c++ - 使用 QTableView 时将 QCombobox 选定文本设置为特定数据列

标签 c++ qt qtableview qcombobox

我正在使用 QCombobox,它使用 QTableView 来显示数据表。除了一些细节之外,我的代码(大部分)现在正在运行。其中一个是,当我选择一行时,组合框标题将使用第一列更新,我想显示另一列的数据。我该如何改变这一点? 我尝试覆盖 currentText() 方法,但它不起作用,似乎它没有在内部用于更新组合框标题。有谁知道答案吗?

Present

这就是现在正在发生的事情。我的数据分为 4 列,前 3 列是 bool 值,第 4 列是字符串。在此屏幕截图中,我选择了“数据 3”单元格。当我选择它时,组合框选择字段上显示的值是“true”,即我所选行的第一列上显示的值。 我想要得到的是这样的:

enter image description here

我试图将第四列的数据显示在组合框选择字段上。

最佳答案

我找到了解决方案,但这不是最好的方法。不过尝试一下,也许这是做到这一点的一种方法:

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());
}); 

结果:

enter image description here

如您所见,它是用户选择的值,而不是第一列中的值。

我在这里使用了C++11(CONFIG += c++11.pro文件)和new syntax of signals and slots ,但当然,如果您愿意,您可以使用旧语法。

关于c++ - 使用 QTableView 时将 QCombobox 选定文本设置为特定数据列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27377796/

相关文章:

java - 在多项式方程中合并相似项

python - 如何从 QMainWindow 在 QGraphicsView 上绘图

linux - Qt 小部件大小错误 + 小部件更新问题

c++ - Qt::BackgroundRole 似乎被忽略了

python - 如何在没有可见空白的情况下扩展/缩小 QTable View

c++ - Qt C++ MySQL 到 QTableView 多个连接表为空

c++ - 使用接口(interface)包装库而不需要向下转换

c++ - 这种 nullptr 的使用是否会产生编译器错误?

c++ - 如何在 NetBeans 中使用框架

c++ - 单继承方式编译报错[Qt新手]