Qt QTablewidget 不使用代理的情况加 添加控件(下拉框,按钮,,,,),
作者:互联网
前言
一般情况下tablewidget 添加控件的时候, 合理的情况本应该是使用代理,更高效的一点是 使用 tableview 和代理。 但是有时为了开发快,以及开发简易程度 就使用setCellWidget 来快速开发:(极不推荐这种,后期业务逻辑写起来很淡腾)
void setCellWidget(int row, int column, QWidget *widget);`
案例
{
// 为了combox 居中又不得不用QWidegt 嵌套起来(后期数据多了,刷新数据很慢的。)
QWidget *Widget = new QWidget();
QHBoxLayout *vLayout = new QHBoxLayout();
QComboBox *comBox = new QComboBox();
comBox->addItems({"1","2"});
vLayout->addWidget(comBox);
comBox->setCurrentIndex(comboxindex);
//Widget中添加布局
Widget->setLayout(vLayout);
Widget->setStyleSheet({"background: #2F3133;"});
//表格中添加Widget
ui->tableWidget->setCellWidget(currentrow, 7, (QWidget*)Widget);```
//触发combox 必须写对应的曹函数
connect(comBox, SIGNAL(currentIndexChanged(int)),this, SLOT(slotComBox(int)));
}
void XXXXX::slotComBox(int index)
{
QComboBox * comboBox = dynamic_cast<QComboBox *>(sender());
if(comboBox == nullptr) return;
// 获取索引 注意 comboBox->parent() 而不是 combox
// 当单独一个控件的时候用combox,事例中为了居中引入了QWidget 嵌套combox
QModelIndex modelindex = ui->tableWidget->indexAt(dynamic_cast<QWidget *>(comboBox->parent())->pos());
int row = modelindex.row();
int column = modelindex.column();
//XXXXXX 具体逻辑
}
意见
能用代理加载控件,最好用代理, 别用这种。
前期开发界面确实很快, 但后期写业务, 尤其是多个控件有联动关系的时候, 很麻烦
标签:控件,Widget,Qt,int,comBox,QWidget,下拉框,combox 来源: https://blog.csdn.net/sinat_14854721/article/details/116140317