QT5 QListView表格中添加复选框CheckBox

由于最近项目中需要用到在表格每行第一列添加复选框checkBox,用于选择是否打开IO板对应外部界接口,拟实现类似如下效果

在C#中对于ListView表格,可通过直接设置属性ListView.CheckBoxes=true来实现,但是QT中QStandardItemModel没有对应的function,需要通过其他方式来实现,可参考以下博文:https://www.cnblogs.com/godcity/p/5957256.html。博文中的实现方式可根据继承的不同类表格实现该功能

(1)对于QListWidgetItem类表格

QListWidgetItem *item = new QListWidgetItem;
item->setData( Qt::DisplayRole, "text" );
item->setData( Qt::CheckStateRole, Qt::Checked );
listWidget->addItem( item );

(2)对于QStandardItemModel类表格

QStandardItemModel *model = new QStandardItemModel();
QStandardItem *Item = new QStandardItem();
Item->setCheckable( true );
Item->setCheckState( Qt::Checked );
model->setItem( 0, Item ); 
listView->setModel( model );

我的具体项目,用到第二中类型,QT中实现如下:

在UI界面中添加TableView表格控件

(1)MainWindow.h中声明

QStandardItemModel *modelTabIOOut; //Tab表模型
QStandardItem *Item_IOCheckBox[32]; //表格共设置32行,需要32个Item_IOCheckBox复选框类对象

此处需注意用到对象数组动态初始化

类名称[] 对象数组名 = new 类名称[3];
对象数组名[0] = 对象;
对象数组名[1] = 对象;
对象数组名[2] = 对象;

在MainWindow.cpp的构造函数中

modelTabIOOut = new QStandardItemModel();//输出IO表格
for(int i=0;i<32;i++)
{
   Item_IOCheckBox[i] = new QStandardItem();
}

在MainWindow.cpp的初始化函数中

//输出IO表格模型
modelTabIOOut->setColumnCount(3);//设置列数
modelTabIOOut->setRowCount(32);//设置行数
modelTabIOOut->setHeaderData(0,Qt::Horizontal," ");
modelTabIOOut->setHeaderData(1,Qt::Horizontal,"位");
modelTabIOOut->setHeaderData(2,Qt::Horizontal,"标签");
//输出IO表属性
for(int i=0;i<32;i++)
{
    Item_IOCheckBox[i]->setCheckable(true);
    Item_IOCheckBox[i]->setCheckState( Qt::Checked );
    modelTabIOOut->setItem( i, Item_IOCheckBox[i] );
    modelTabIOOut->setItem( i, 1, new QStandardItem(QString::number(i)));
}
ui->tableView_IOOut->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);//字体居中
ui->tableView_IOOut->verticalHeader()->setDefaultSectionSize(20);//固定行高度为6
ui->tableView_IOOut->verticalHeader()->setVisible(false);    //列表头不可见
ui->tableView_IOOut->setShowGrid(true);//表中网格线可见
ui->tableView_IOOut->setModel(modelTabIOOut);
ui->tableView_IOOut->setColumnWidth(0,40);
ui->tableView_IOOut->setColumnWidth(1,40);
ui->tableView_IOOut->setColumnWidth(2,320);

最终效果:

发布了9 篇原创文章 · 获赞 2 · 访问量 4094

猜你喜欢

转载自blog.csdn.net/qq_27085429/article/details/99676147