2

我正在使用 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 Table 中的主键/行索引以用于从“QCompleter”进行的当前选择?

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

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

4

1 回答 1

3

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

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

从文档 -

QAbstractItemModel* QCompleter::completionModel()

Returns the completion model. The completion model is a read-only list model that contains all the possible matches for the current completion prefix. The completion model is auto-updated to reflect the current completions.

所以现在我的 SLOT 看起来像这样 -

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;
    }
}
于 2014-01-30T18:47:47.120 回答