QTableWidget中,某一列使用了控件而并非TableItem,因此需要获取到某个控件的当前值用于保存。程序示例如下:

添加CellWidget代码如下:

QComboBox *combo = new QComboBox;

QCheckBox *checkBox = new QCheckBox;

QWidget *cwidget = new QWidget;

QHBoxLayout *layout = new QHBoxLayout;

layout->setSpacing(0);

layout->setMargin(0);

layout->addWidget(checkBox);

layout->setAlignment(checkBox, Qt::AlignCenter); // 控件居中

cwidget->setLayout(layout);

combo->addItems(varlist);



if (instr_var_list->rowCount() <= Var_Max_Num)

{

instr_var_list->insertRow(instr_var_list->rowCount());

instr_var_list->setCellWidget(instr_var_list->rowCount() - 1, 2, combo);

instr_var_list->setCellWidget(instr_var_list->rowCount() - 1, 3, cwidget);

instr_var_list->setItem(var_count, 0 ,new QTableWidgetItem(QString::number(var_count + 1)));

var_count++;

}

插入之后,需要以CellWidget的形式获取某一个位置Item的信息,其中,cellWidget返回值为QWidget*。此处三个参数分别为:

table:传入的QTableWidget对象;

row:需要查找的CellWidget所在的行;

column:需要查找的CellWidget所在的列

QWidget *getCellWidget(QTableWidget *table, int row, int column)

{

return table->cellWidget(row,column);

}

获取到之后返回之后,需要将QWidget*转化为所对应的对象,如上,添加了一个QComboBox*和一个QWidget*对象,这里转化函数则是:

// 获取QComboBox的当前值

QString currentText = qobject_cast<QComboBox*>(getCellWidget(instr_var_list,i,2))->currentText();

紧接着是获取QCheckBox中的选中状态,之前上面设置CellWidget时候,并没有直接设置的QCheckBox为CellWidget,而是将QCheckBox放入的QWdiget中,因此,需要获取QCheckBox的选中状态,还需要对获取到的CellWidget做进一步的转化,转化过程如下:

QCheckBox* check = getCellWidget(instr_var_list,i,3)->findChild<QCheckBox*>();

这里通过找到CellWidget中的Wigdet*,利用其findChild函数找到获取Widget中的CheckBox子对象,即可找到所需的QCheckBox对象。其它同理。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐