我正在使用QCompleter在线编辑来获取一些文字。完成功能就这样工作正常。
QCompleter从Sql Table获取数据。
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查询。
答案 0 :(得分:3)
我必须承认@Pavel Strakhov的评论,谢谢。如果它被作为答案,我会接受它。
我一直在使用QCompleter::currentIndex
和我用QCompleter::setModel()
设置的sql表模型。我不知道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;
}
}