嵌入式积累|表格QTableView单元中添加控件

本文主要总结在Qt5.9中,用表格类QTableView,在表格单元中添加控件用法。
想要在表格QTableView中添加控件,有多种方法,可以参考如下地址:http://qimo601.iteye.com/blog/1538364。
其中,我用的是最常用和简单的方式,使用函数QTableView::setIndexWidget(const QModelIndex &index, QWidget *widget)

void setIndexWidget(const QModelIndex &index, QWidget *widget);

用法:

tableView->setIndexWidget(standItemModel->index(10,1),m_PushButton); //向表格单元添加一个控件

【嵌入式积累|表格QTableView单元中添加控件】下面将通过一个例子展示像表格中添加控件的例子。


1.1新建一个widget工程,不要勾选ui界面。然后分别在widget.h,widget.cpp,main.cpp分别添加如下代码。
widget.h
#ifndef WIDGET_H #define WIDGET_H#include #include #include #include #include #include #include #include class Widget : public QWidget { Q_OBJECTpublic: Widget(QWidget *parent = 0); void CreateView(); private: QPushButton *testBtn; QPushButton *m_PushButton; QVBoxLayout *mainLayout; //QTreeView *treeView; QStandardItemModel *standItemModel; QTableView *tableView; }; #endif // WIDGET_H


widget.cpp
#include "widget.h"Widget::Widget(QWidget *parent) : QWidget(parent) { CreateView(); }void Widget::CreateView() { mainLayout = new QVBoxLayout; //垂直布局 mainLayout->setSpacing(10); //设置控件间距 mainLayout->setMargin(10); //设置边缘间距 testBtn = new QPushButton("Test"); m_PushButton = new QPushButton("PushButton"); //添加QTableView代码 tableView = new QTableView; standItemModel = new QStandardItemModel(); //添加表头 standItemModel->setColumnCount(3); standItemModel->setHeaderData(0,Qt::Horizontal,QStringLiteral("序号")); //设置表头内容 standItemModel->setHeaderData(1,Qt::Horizontal,QStringLiteral("名称")); standItemModel->setHeaderData(2,Qt::Horizontal,QStringLiteral("地址")); //向表格添加100行内容 for(int i=0; i<100; i++) { QStandardItem *standItem1 = new QStandardItem(tr("%1").arg(i+1)); QStandardItem *standItem2 = new QStandardItem(tr("第%1行").arg(i+1)); standItemModel->setItem(i,0,standItem1); //表格第i行,第0列添加一项内容 standItemModel->item(i,0)->setForeground(QBrush(QColor(255,0,0))); //设置字符颜色 standItemModel->item(i,0)->setTextAlignment(Qt::AlignCenter); //设置表格内容居中 standItemModel->setItem(i,1,standItem2); //表格第i行,第1列添加一项内容 }tableView->setModel(standItemModel); //挂载表格模型//设置表格属性 tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter); //表头信息显示居中 tableView->horizontalHeader()->setSectionResizeMode(0,QHeaderView::Fixed); //设定表头列宽不可变 tableView->horizontalHeader()->setSectionResizeMode(1,QHeaderView::Fixed); tableView->horizontalHeader()->setSectionResizeMode(2,QHeaderView::Stretch); //设定第2列表头弹性拉伸tableView->setColumnWidth(0,100); //设定表格第0列宽度 tableView->setColumnWidth(1,200); tableView->verticalHeader()->hide(); //隐藏默认显示的行头 tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选中时整行选中 tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置表格属性只读,不能编辑 //tableView->setContextMenuPolicy(Qt::CustomContextMenu); //需要在表格使用右键菜单,需要启动该属性 //tableView->sortByColumn(0,Qt::AscendingOrder); //表格第0列,按降序排列tableView->setIndexWidget(standItemModel->index(10,1),m_PushButton); //向表格单元添加一个控件 tableView->setIndexWidget(standItemModel->index(10,2),testBtn); //向表格单元添加一个控件 tableView->setShowGrid(false); standItemModel->removeRows(0,10); //删除从第0行开始的连续10行//mainLayout->addWidget(testBtn); mainLayout->addWidget(tableView); //添加控件 this->setLayout(mainLayout); //显示垂直布局 }


main.cpp
#include "widget.h" #include int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.resize(960,640); w.setWindowTitle(QString::fromUtf8("表格控件QTableView用法示例")); w.show(); return a.exec(); }



1.2程序构建运行后,结果如下图所示:
嵌入式积累|表格QTableView单元中添加控件
文章图片




参考内容:
http://blog.sina.com.cn/s/blog_a6fb6cc90101iadm.html

http://qimo601.iteye.com/blog/1538364

http://www.cnblogs.com/jiangu66/archive/2013/07/18/3199041.html#undefined

    推荐阅读