其他分享
首页 > 其他分享> > Qt QTablewidget 不使用代理的情况加 添加控件(下拉框,按钮,,,,),

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