Qt 学习之路2(46)视图和委托---代码实现

叁歲伎倆 2022-11-19 04:12 168阅读 0赞

代码: #ifndef WIDGET_H #define WIDGET_H #include class QStringListModel; class QListView; namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private: Ui::Widget *ui; QStringListModel *model; QListView *listView; }; #endif // WIDGET_H #ifndef SPINBOXDELEGATE_H #define SPINBOXDELEGATE_H #include #include #include class SpinBoxDelegate : public QStyledItemDelegate { Q_OBJECT public: SpinBoxDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} 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; }; #endif // SPINBOXDELEGATE_H #include “widget.h” #include “ui_widget.h” #include #include #include #include #include #include #include #include #include #include “SpinBoxDelegate.h” Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { QStringList data1; data1 << “0” << “1” << “2”; model = new QStringListModel(this); model->setStringList(data1); listView = new QListView(this); listView->setModel(model); listView->setItemDelegate(new SpinBoxDelegate(listView)); qDebug() <selectionModel(); QPushButton *btnShow = new QPushButton((“Show Model”), this); connect(btnShow, SIGNAL(clicked()), this, SLOT(showModel())); QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addWidget(btnShow); QVBoxLayout *layout = new QVBoxLayout; layout->addWidget(listView); layout->addLayout(buttonLayout); setLayout(layout); ui->setupUi(this); } Widget::~Widget() { delete ui; } #include “SpinBoxDelegate.h” #include QWidget *SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem & /* option */, const QModelIndex & /* index */) const { QSpinBox *editor = new QSpinBox(parent); editor->setMinimum(0); editor->setMaximum(100); return editor; } void SpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { int value = index.model()->data(index, Qt::EditRole).toInt(); QSpinBox *spinBox = static_cast(editor); spinBox->setValue(value); } void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { QSpinBox *spinBox = static_cast(editor); spinBox->interpretText(); int value = spinBox->value(); model->setData(index, value, Qt::EditRole); } void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &index) const { editor->setGeometry(option.rect); } #include “widget.h” #include int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }

发表评论

表情:
评论列表 (有 0 条评论,168人围观)

还没有评论,来说两句吧...

相关阅读