网站建设制作费用,友链互换平台推荐,做网站合同封面,2018年怎样做淘宝客网站表格是Qt最重量级的控件之一#xff0c;另外一个重量级控件就是树。QTableWidget是成熟的表格控件#xff0c;它有默认的模型QTableModel#xff08;继承自QAbstractTableModel#xff09;#xff0c;QTableWidget本身继承自QTableView。
本文通过多个示例展示QTableWidg…表格是Qt最重量级的控件之一另外一个重量级控件就是树。QTableWidget是成熟的表格控件它有默认的模型QTableModel继承自QAbstractTableModelQTableWidget本身继承自QTableView。
本文通过多个示例展示QTableWidget表格的丰富的使用方法。
表格中动态创建下拉框等自定义控件
以下是一个示例通过实现一个QStyledItemDelegate的子类来提供自定义的表格代理控件然后在表格中设置该代理。
最终实现的效果就是双击表格第一列的单元格都会在单元格内创建下拉框编辑控件并且在交互完成后控件内的值会同步到表格中。
如果要实现表格的不同列的编辑控件不一样比如有的通过下拉框编辑有的通过拨轮编辑就可以通过在ItemDelegate的createEditor方法中去创建这些不同的控件。
#ifndef ITEMDELEGATE_H
#define ITEMDELEGATE_H#include QStyledItemDelegateclass ItemDelegate : public QStyledItemDelegate
{Q_OBJECT
public:explicit ItemDelegate(QObject *parent nullptr);// QAbstractItemDelegate interface
public: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;
};#endif // ITEMDELEGATE_H#include itemdelegate.h
#include QtWidgetsItemDelegate::ItemDelegate(QObject *parent): QStyledItemDelegate{parent}
{}QWidget *ItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem option, const QModelIndex index) const
{if(index.column()0){//当双击表格第1列的单元格时会创建下拉框QComboBox* cbxnew QComboBox(parent);cbx-addItems({100,200});return cbx;}return QStyledItemDelegate::createEditor(parent,option,index);}void ItemDelegate::setEditorData(QWidget *editor, const QModelIndex index) const
{if(index.column()0){//将单元格的值写入到代理控件中QComboBox* cbxqobject_castQComboBox*(editor);if(cbx!nullptr){QString valueindex.model()-data(index,Qt::EditRole).toString();cbx-setCurrentText(value);}}elseQStyledItemDelegate::setEditorData(editor,index);
}void ItemDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex index) const
{if(index.column()0){QComboBox* cbxqobject_castQComboBox*(editor);if(cbx!nullptr){model-setData(index,cbx-currentText(),Qt::EditRole);}}elseQStyledItemDelegate::setModelData(editor,model,index);
}MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{this-resize(800,600);QTableWidget* tbnew QTableWidget;tb-setRowCount(3);tb-setColumnCount(5);tb-setItemDelegate(new ItemDelegate);this-setCentralWidget(tb);
}