使用效果:
使用控件包括:
/*
* ReadOnly
*/
class ReadOnlyDelegate : public QItemDelegate
{
Q_OBJECT
public:
ReadOnlyDelegate(QObject *parent = 0): QItemDelegate(parent) {}
void setItems(QStringList items);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
return NULL;
}
};
/*
* ComboBox
*/
class ComboDelegate : public QItemDelegate
{
Q_OBJECT
public:
ComboDelegate(QObject *parent = 0);
void setItems(QStringList items);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
private:
QStringList m_sItemList; //下拉框列表项
};
/*
* DoubleSpinBox
*/
class SpinBoxDelegate : public QItemDelegate
{
Q_OBJECT
public:
SpinBoxDelegate(QObject *parent = 0);
void setRange(double min, double max);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
private:
double minValue; //最小值
double maxValue; //最大值
};
/*
* CheckBox
*/
class CheckBoxDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
CheckBoxDelegate(QObject *parent = 0);
void setColumn(int col);
protected:
void paint(QPainter* painter,const QStyleOptionViewItem& option,const QModelIndex& index) const;
bool editorEvent(QEvent *event,QAbstractItemModel *model,const QStyleOptionViewItem &option,const QModelIndex &index);
private:
int column; //设置复选框的列
};
/*
* calendar
*/
class DateDelegate : public QItemDelegate
{
Q_OBJECT
public:
DateDelegate(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
/*
* TimeEdit
*/
class TimeDelegate : public QItemDelegate
{
Q_OBJECT
public:
TimeDelegate(QObject *parent = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
/*
* DoubleLineEdit
*/
class DoubleLineEditDelegate : public QItemDelegate
{
Q_OBJECT
public:
DoubleLineEditDelegate(QObject *parent = 0);
void setRange(double bottom, double top, int decimals = 0);
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
void setEditorData(QWidget *editor, const QModelIndex &index) const;
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const;
private:
int min; //最小值
int max; //最大值
int dec; //小数位数
};
class IntegerDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit IntegerDelegate(QObject* parent = nullptr, int min = -1, int max = -1, int step = -1) : QStyledItemDelegate(parent)
{
this->min = min;
this->max = max;
this->step = step;
}
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
void setEditorData(QWidget* editor, const QModelIndex& index) const override;
void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override;
void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
void setMinMaxStep(int min, int max, int step);
protected:
int min{ -1 }, max{ -1 }, step{ -1 };
};
/
class NotEditableDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit NotEditableDelegate(QObject* parent = nullptr)
: QStyledItemDelegate(parent)
{}
protected:
bool editorEvent(QEvent*, QAbstractItemModel*, const QStyleOptionViewItem&, const QModelIndex&) override
{
return false;
}
QWidget* createEditor(QWidget*, const QStyleOptionViewItem&, const QModelIndex&) const override
{
return nullptr;
}
};
/
// Not editable delegate to display numbers to 2 decimal places
class NotEditableDelegate2dp : public QStyledItemDelegate
{
Q_OBJECT
public:
explicit NotEditableDelegate2dp(QObject* parent = nullptr)
: QStyledItemDelegate(parent)
{}
QString displayText(const QVariant& value, const QLocale& locale) const override
{
Q_UNUSED(locale)
QString str = QString::number(value.toDouble(), 'f', 2);
return str;
}
protected:
bool editorEvent(QEvent*, QAbstractItemModel*, const QStyleOptionViewItem&, const QModelIndex&) override
{
return false;
}
QWidget* createEditor(QWidget*, const QStyleOptionViewItem&, const QModelIndex&) const override
{
return nullptr;
}
};
/
class ToggleDelegate : public QItemDelegate
{
Q_OBJECT
public:
explicit ToggleDelegate(QObject* parent = nullptr) : QItemDelegate(parent) {}
QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
void setEditorData(QWidget* editor, const QModelIndex& index) const override;
void updateEditorGeometry(QWidget* editor, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override;
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override;
bool editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem&, const QModelIndex& index) override;
};