gpt4 book ai didi

c++ - 充满 QLineEdits 的 QTableWidget 不会触发信号

转载 作者:行者123 更新时间:2023-11-28 07:17:12 32 4
gpt4 key购买 nike

我对 QT 比较陌生。在我的代码中,我创建了一个 QTableWidget,遍历行并将单元格设置为 QLineEdits 和 QCheckBoxes。我想这样做,以便更改任何 QLineEdits 中的文本或选中/取消选中 QCheckBoxes 会导致我的表触发一个信号,传递有问题的项目或其所在的行/列。

我在这里建表:

for(int row=0; row < conditionTable->rowCount(); row++)
{
QLineEdit *condition = new QLineEdit;
conditionTable->setCellWidget(row, 0, condition);

QLineEdit *minBoundField = new QLineEdit;
conditionTable->setCellWidget(row, 1, minBoundField);

QLineEdit *maxBoundField = new QLineEdit;
conditionTable->setCellWidget(row, 2, maxBoundField);

QCheckBox *checkbox = new QCheckBox;
conditionTable->setCellWidget(row, 3, checkbox);

if(row > 0)
{
condition->setReadOnly(true);
minBoundField->setReadOnly(true);
maxBoundField->setReadOnly(true);
checkbox->setCheckable(false);
}
}

然后我尝试这样做,以便可以通过其中一种槽方法处理对表的更改:

connect(conditionTable, SIGNAL(itemChanged(QTableWidgetItem*)),
this, SLOT(handleConditionTableChange(QTableWidgetItem*)));

但是,这似乎行不通,而且我不确定从这里该去哪里。任何帮助将不胜感激。

最佳答案

你不应该在这里使用 QLineEdit 和 QCheckBox。

要向您的 QTableWidget 添加复选框,请执行以下操作:

QTableWidgetItem* item =  new QTableWidgetItem("check box");
item->setFlags(Qt::ItemIsUserCheckable);
item->setCheckState(Qt::Unchecked);
tableWidget->setItem(row, column, item);

添加行编辑:

QTableWidgetItem* item =  new QTableWidgetItem("line edit");
tableWidget->setItem(row, column, item);

使用此设置,将在更改项目时发出信号。

编辑:对于您的示例,请尝试类似的操作:

for(int row=0; row < conditionTable->rowCount(); row++)
{
QTableWidgetItem* condition = new QTableWidgetItem("");
conditionTable->setItem(row, 0, condition);

QTableWidgetItem *minBoundField = new QTableWidgetItem("");
conditionTable->setItem(row, 1, minBoundField);

QTableWidgetItem *maxBoundField = new QTableWidgetItem("");
conditionTable->setItem(row, 2, maxBoundField);

QTableWidgetItem *checkbox = new QTableWidgetItem("");
checkbox->setFlags(Qt::ItemIsUserCheckable);
checkbox->setCheckState(Qt::Unchecked);
conditionTable->setItem(row, 3, checkbox);

if(row > 0)
{
condition->setFlags(Qt::NoItemFlags);
minBoundField->setFlags(Qt::NoItemFlags);
maxBoundField->setFlags(Qt::NoItemFlags);
checkbox->setFlags(Qt::NoItemFlags);
}
}

如果出于某种原因您仍想使用 QLineEdit 和 QCheckBox,则需要将每个行编辑和每个复选框连接到一个插槽。

关于c++ - 充满 QLineEdits 的 QTableWidget 不会触发信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20033691/

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