首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QCompleter,如何从数据库获得Id

QCompleter,如何从数据库获得Id
EN

Stack Overflow用户
提问于 2014-06-11 21:53:06
回答 1查看 1.2K关注 0票数 1

在搜索了很多网络之后没有找到正确的答案,我来寻求你们的帮助.让我看看我能不能解释一下。

我正在用Qt 5开发一个UI,我想要一个自动完成的lineEdit。我知道我可以使用QCompleter,而且它工作得很好。我在QCompleter中填充了一个执行for迭代的查询。但我需要知道那个领域的身份。

如果我对具有Product_NameProduct_Code的数据库进行查询,用户将输入产品的名称,在每个text_edit事件中,我都会向QCompleter填充新的数据。但是,当用户选择Product时,我想在其他地方显示代码。当然,可能有两个或更多的产品具有相同的名称,但代码不同,所以我无法在搜索后查找代码。

那么,是否有一种方法可以在QCompleter中有两个相关字段

我已经尝试用隐藏的列(带有代码)创建一个QTableWidget,并将其显示在QlineEdit的底部(以模拟Qcompleter)。看起来很好,而且很管用..。但我不知道如何添加QCompleter所具有的函数,比如Arrow将跳入表中,并在lineEdit失去焦点时使其消失,而不是在选择表时消失。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-12 04:49:04

您可以在completer模型中保存其他数据:

代码语言:javascript
复制
QMap<int, QString> data;
data[0] = "Moscow";
data[1] = "London";
data[2] = "Paris";

QCompleter *completer = new QCompleter(this);

QStandardItemModel *model = new QStandardItemModel(completer);
QMapIterator<int, QString> it(data);
while (it.hasNext())
{
    it.next();

    int code = it.key();
    QString name = it.value();

    QStandardItem *item = new QStandardItem;
    item->setText(name);
    item->setData(code, Qt::UserRole);

    model->appendRow(item);
}

completer->setModel(model);

然后连接到QCompleter activated(const QModelIndex &index)信号,以捕获自动完成操作并显示所需的其他数据:

代码语言:javascript
复制
connect(completer, SIGNAL(activated(QModelIndex)),
            this, SLOT(onItemActivated(QModelIndex)));

void Widget::onItemActivated(const QModelIndex &index)
{
    int code = index.data(Qt::UserRole).toInt();

    codeEdit->setText(QString::number(code));
}

但是,如果用户不使用自动完成并键入整个字符串,则此方法将无法工作。在这种情况下,如果DB中有多个具有相同名称的记录,则无法获得正确的代码id。

如果您试图创建某种搜索字段,我建议您在某个表视图中显示所有数据,并使用QSortFilterProxyModel在行编辑中显示与用户输入相匹配的记录。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24173220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档