目录
1、设置样式文件
2、set base attribute
3、设置model
4、设置表头
5、设置数据
6、添加代理控件
6.1 添加 QSpinBox 代理
6.2 添加 QComboBox 代理
6.3 添加 QPushButton 代理
6.4 添加 CheckBox 代理
6.5 添加 Pixmap 代理
6.6 添加 LineEdit 代理
6.7 添加 ReadOnly 代理
6.8 添加 Text 代理
6.9 添加 QProcessBar 代理
6.10 添加 DateEdit 代理
6.11 添加 添加自定义窗口 代理
6.13 添加 DoubleProcessBar 代理
7、获取某一单元格数据
开发过程中进程使用MVD模型,添加各种代理控件,本文在此基础上整理一些数据模型代理,包括:QPushbutton、QLineEdit、QPixmap、QChecledBox、QComboBox、QSpinBox、QProcessBar、只读列、自定义窗口等共13种代理方式,如图所示:
1、设置样式文件
QString qssData = nullptr; QFile fileqss(":/qss/QSSUITableView"); if(fileqss.open(QFile::ReadOnly)) { qssData = fileqss.readAll(); fileqss.close(); } ui->tableView->setStyleSheet(qssData);
2、set base attribute
ui->tableView->verticalHeader()->hide(); // 隐藏垂直头
ui->tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 隐藏水平头
//ui->tableView->horizontalHeader()->setStretchLastSection(true); // 设置随后一列拉伸
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive); // 设置列平均分配
//ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); // 设置TreeWidget水平滚动和自适应宽度
//ui->tableView->setColumnWidth(headersList.count() - 1, TITLE_FIXED_HEIGHT); // 设置最后一列固定
//ui->tableView->setSelectionMode(QAbstractItemView::SelectionMode::SingleSelection); // 行单选
ui->tableView->setSelectionMode(QAbstractItemView::SelectionMode::MultiSelection); // 行多选 (单选QAbstractItemView::SingleSelection 多选:QAbstractItemView::MultiSelection)
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); // 不可编辑
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); // 设置选中模式为整行
ui->tableView->setShowGrid(false); // 显示/隐藏网格线
setFocusPolicy(Qt::FocusPolicy::NoFocus); // 设置选中之后无虚线焦点
//horizontalHeader()->setMinimumSectionSize(100); // 设置最小列宽
//horizontalHeader()->setMaximumSectionSize(100); // 设置最大列宽
ui->tableView->verticalHeader()->setDefaultSectionSize(25); // 可以设置tableview所有列的默认行高为15。
//horizontalHeader()->setDefaultSectionSize(15); // 可以设置tableview所有行的默认列宽为15。
ui->tableView->setWordWrap(false); // 设置不自动换行
setMouseTracking(true); // 设置鼠标追踪
// 设置第0列固定宽度
/*
ui->tableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
ui->tableView->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setSectionResizeMode(3, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setSectionResizeMode(4, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setSectionResizeMode(5, QHeaderView::Fixed);
ui->tableView->setColumnWidth(0, 50);
ui->tableView->setColumnWidth(2, 150);
ui->tableView->setColumnWidth(3, 150);
ui->tableView->setColumnWidth(4, 150);
ui->tableView->setColumnWidth(5, 150);
*/
3、设置model
model = new QStandardItemModel;
ui->tableView->setModel(model);
4、设置表头
QStringList headerList;
headerList<<"姓名"<<"QSpinBox"<<"QComboBox"<<"QPushButton"<<"CheckBox"<<"QPixmap"<<"QLineEdit"<<"ReadOnly"<<"Text"<<"ProcessBar"<<"DateEdit"<<"CustomWidget"<<"pDoubleProcessBar";
model->setHorizontalHeaderLabels(headerList);
5、设置数据
model->setItem(0,0,new QStandardItem("张三"));
model->setItem(1,0,new QStandardItem("李四"));
model->setItem(2,0,new QStandardItem("王二"));
model->setItem(3,0,new QStandardItem("小明同学"));
model->setItem(0,1,new QStandardItem("1"));
model->setItem(1,1,new QStandardItem("2"));
model->setItem(2,1,new QStandardItem("3"));
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); // 选择一行
6、添加代理控件
6.1 添加 QSpinBox 代理
CUISpinBoxDelegate *pSpinBox = new CUISpinBoxDelegate(this);
ui->tableView->setItemDelegateForColumn(1, pSpinBox);
6.2 添加 QComboBox 代理
CUIComboBoxDelegate *pComboBox = new CUIComboBoxDelegate(this);
ui->tableView->setItemDelegateForColumn(2, pComboBox);
6.3 添加 QPushButton 代理
CUIMutipleButtonDeleagate *pMutipleBtn = new CUIMutipleButtonDeleagate(QStringList() << "修改" << "删除", this);
ui->tableView->setItemDelegateForColumn(3, pMutipleBtn);
connect(pMutipleBtn, &CUIMutipleButtonDeleagate::editData, [&](){
QMessageBox::information(this, "提示", "这是一个编辑按钮");
});
connect(pMutipleBtn, &CUIMutipleButtonDeleagate::deleteData, [&](){
QMessageBox::information(this, "提示", "这是一个删除按钮");
});
6.4 添加 CheckBox 代理
/*CUITableHeaderView **/pTableHeaderView = new CUITableHeaderView(Qt::Horizontal, ui->tableView);
connect(pTableHeaderView, &CUITableHeaderView::stateChanged, this, &MainWindow::headerStateChangedSlot);
connect(model, SIGNAL(itemChanged(QStandardItem*)), this, SLOT(itemChangedSlot(QStandardItem*)));
ui->tableView->setHorizontalHeader(pTableHeaderView);
CUICheckBoxDelegate *pCheckedBox = new CUICheckBoxDelegate(this);
ui->tableView->setItemDelegateForColumn(4, pCheckedBox);
6.5 添加 Pixmap 代理
CUIPixmapDelegate *pPixmap = new CUIPixmapDelegate(this);
ui->tableView->setItemDelegateForColumn(5, pPixmap);
6.6 添加 LineEdit 代理
CUILineEditDelegate *pLineEdit = new CUILineEditDelegate(this);
6.7 添加 ReadOnly 代理
CUIOnlyReadDelegate *pReadOnly = new CUIOnlyReadDelegate(this);
ui->tableView->setItemDelegateForColumn(7, pReadOnly);
6.8 添加 Text 代理
CUITextDelegate *pLabel = new CUITextDelegate(this);
ui->tableView->setItemDelegateForColumn(8, pLabel);
6.9 添加 QProcessBar 代理
CUIProcessBarDelegate *pProcessBar = new CUIProcessBarDelegate();
ui->tableView->setItemDelegateForColumn(9, pProcessBar);
QModelIndex index = model->index(0, 9, QModelIndex());
model->setData(index,29);
6.10 添加 DateEdit 代理
CUIDateEditDelegate *pDateEdit = new CUIDateEditDelegate();
ui->tableView->setItemDelegateForColumn(10, pDateEdit);
6.11 添加 添加自定义窗口 代理
CUICustomDelegate *pCustomWidget = new CUICustomDelegate(this);
ui->tableView->setItemDelegateForColumn(11, pCustomWidget);
6.13 添加 DoubleProcessBar 代理
CUIDoubleProcessBarDelegate *pDoubleProcessBar = new CUIDoubleProcessBarDelegate(this);
ui->tableView->setItemDelegateForColumn(12, pDoubleProcessBar);
7、获取某一单元格数据
//model->index(0, 1).data();
详细代码下载