qt - 是否可以从 QCompleter 获取所选文本的主键

标签 qt qcompleter

我正在使用 QCompleter 进行行编辑来获取一些文本。完整的功能本身工作正常。

QCompleter 正在从 Sql 表中获取数据。

completer = new QCompleter(this);
model = new QSqlRelationalTableModel(this, db);
model->setTable("product"); 
model->select();
completer->setModel(model);
completer->setCompletionColumn(1);                 // points to "name" in product table
ui->line_edit->setCompleter(completer);

现在在 line_edit_returnPressed() 上,我能够获取所选文本。是否还可以获取 Sql 表中的主键/行索引,以用于从“QCompleter”中进行的当前选择?

我看到 ui->line_edit->completer()->currentRow(); 总是返回 0。

我只是想保存一个 SQL 查询,仅此而已。

最佳答案

我必须感谢@Pavel Strakhov 的评论,谢谢。如果它被作为答案提出,我会接受它。

我一直在使用 QCompleter::currentIndex 和通过 QCompleter::setModel() 设置的 SQL 表模型。我不知道 QCompleter 是如何工作的,但我相信它在内部从输入表模型派生出一个列表模型。

来自文档 -

QAbstractItemModel* QCompleter::completionModel()

返回完成模型。完成模型是一个只读列表模型,其中包含当前完成前缀的所有可能匹配项。完成模型会自动更新以反射(reflect)当前的完成情况。

现在我的老虎机看起来像这样 -

void MainWindow::on_line_edit_returnPressed()
{
    QModelIndex index = ui->le_filter->completer()->currentIndex();
    if (index.isValid()) {
        int row = index.row();
        int key = completer->completionModel()->index(row, 0).data().toInt();
        qDebug() << key;
    }
}

关于qt - 是否可以从 QCompleter 获取所选文本的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21197102/

相关文章:

python - 如何将 QCompleter 与 InputDialog 一起使用?

c++ - 如何更改 QCompleter 弹出窗口的顺序?

python - QLineEdit 上的 QCompleter 用于部分插入的文本

c++ - 如何验证是否选中了多个复选框

c++ - 为什么 opengl 中的 gl_FragCoord.z 与深度缓冲区之一不同?

css - 使用自定义调色板时增加 QTabWidget 选项卡大小

qt - 如何使用 Qt 编写一个包装另一个库的共享库?

c++ - 在 QPolygon 中查找完全包含的正方形?

c++ - QCompleter,如何从数据库中获取 Id

python - 从多列(其中一列)的开头自动完成