我正在使用 QCombobox
,它使用 QTableView
来显示数据表。除了一些细节之外,我的代码(大部分)现在正在运行。其中一个是,当我选择一行时,组合框标题将使用第一列更新,我想显示另一列的数据。我该如何改变这一点?
我尝试覆盖 currentText()
方法,但它不起作用,似乎它没有在内部用于更新组合框标题。有谁知道答案吗?
这就是现在正在发生的事情。我的数据分为 4 列,前 3 列是 bool 值,第 4 列是字符串。在此屏幕截图中,我选择了“数据 3”单元格。当我选择它时,组合框选择字段上显示的值是“true”,即我所选行的第一列上显示的值。 我想要得到的是这样的:
我试图将第四列的数据显示在组合框选择字段上。
最佳答案
我找到了解决方案,但这不是最好的方法。不过尝试一下,也许这是做到这一点的一种方法:
QString oldTxt;//somewhere
//...
ui->comboBox->setModel(model);
ui->comboBox->setView(new QTableView);
connect(ui->comboBox->view(),&QAbstractItemView::pressed,[=]() {
oldTxt = ui->comboBox->model()->data(ui->comboBox->view()->currentIndex()).toString();
qDebug() << ui->comboBox->model()->data(ui->comboBox->view()->currentIndex());
//ui->comboBox->setEditText(ui->comboBox->model()->data(ui->comboBox->view()->currentIndex()).toString());
});
connect(ui->comboBox,&QComboBox::currentTextChanged,[=]() {
ui->comboBox->blockSignals(true);
ui->comboBox->setCurrentText(oldTxt);
ui->comboBox->blockSignals(false);
});
主要思想:捕获用户值选择的内容并将其设置为当前文本。第二个连接是必要的,因为没有它,comboBox 将设置另一个值。只是为了证明它可以工作另一个代码片段:
connect(ui->comboBox->view()->selectionModel(),&QItemSelectionModel::selectionChanged,[=]() {
ui->comboBox->setCurrentText(ui->comboBox->model()->data(ui->comboBox->view()->currentIndex()).toString());
});
结果:
如您所见,它是用户选择的值,而不是第一列中的值。
我在这里使用了C++11
(CONFIG += c++11
到.pro
文件)和new syntax of signals and slots ,但当然,如果您愿意,您可以使用旧语法。
关于c++ - 使用 QTableView 时将 QCombobox 选定文本设置为特定数据列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27377796/