gpt4 book ai didi

c++ - QT QTableWidget::item() 返回 nullptr,即使 widget 分配给它

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:51:43 25 4
gpt4 key购买 nike

这让我抓狂。这是相关代码:

//Inside UI class
QTableWidget *table_view;

后来,

QLabel* lb_param_id = new QLabel(this);
lb_param_id->setText(QString::number(param_id));

QLabel* lb_param_name = new QLabel(this);
lb_param_name->setText(QString(param_name));

QLineEdit* te_value = new QLineEdit(this);
te_value->setText(QString(value));

QPushButton* pb_command = new QPushButton();
pb_command->setText("Change");

...

if(ui->table_view->rowCount() <= param_id)
ui->table_view->setRowCount(param_id + 1);

ui->table_view->setCellWidget(param_id, 0, lb_param_id);
ui->table_view->setCellWidget(param_id, 1, lb_param_name);
ui->table_view->setCellWidget(param_id, 2, te_value);
ui->table_view->setCellWidget(param_id, 3, pb_command);

for(int i =0; i < ui->table_view->rowCount(); ++i)
{
for(int j = 0; j < ui->table_view->columnCount(); ++j)
{
QTableWidgetItem* item = ui->table_view->item(i, j);

//Here, item is nullptr. Why?
item->setForeground(QColor::fromRgb(255,255,255));
}
}

我设置了小部件,然后尝试更改 QTableWidget 中所有小部件的前景。但是ui->table_view->item()返回的是nullptr。这里发生了什么?顺便说一句,列数是在初始化时设置的。

最佳答案

添加以下几行代码。

if(ui->table_view->rowCount() <= param_id)
ui->table_view->setRowCount(param_id + 1);

ui->table_view->setColumnCount(4);

ui->table_view->setItem(param_id, 0, new QTableWidgetItem());
ui->table_view->setItem(param_id, 1, new QTableWidgetItem());
ui->table_view->setItem(param_id, 2, new QTableWidgetItem());
ui->table_view->setItem(param_id, 3, new QTableWidgetItem());

ui->table_view->setCellWidget(param_id, 0, lb_param_id);
...

基本上,您需要先将数据插入到单元格中,然后才能设置小部件。在您的情况下,您没有完整的数据意义。

检查 qt 源代码,这是 setCellWidget() 的实现方式:

   void QTableWidget::setCellWidget(int row, int column, QWidget *widget)
{
QModelIndex index = model()->index(row, column, QModelIndex());
QAbstractItemView::setIndexWidget(index, widget);
}

如果不先设置单元格,模型索引是无效索引。如果返回的索引无效,我同意 qt 应该插入数据。现在,您必须使用 qt 代码。

关于c++ - QT QTableWidget::item() 返回 nullptr,即使 widget 分配给它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27436251/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com