QCompleter,如何有从数据库的Id
QCompleter, how to have the Id from a database
在网上搜索了很多没有找到正确答案后,我来寻求你们的帮助…所以让我看看我能不能解释清楚。
我正在Qt 5的UI上工作,我想要一个自动完成的lineEdit
。我知道我可以用QCompleter
,它工作得很好。我用for
迭代的查询填充QCompleter
。但是我需要知道那个字段的ID。
如果我正在对具有Product_Name
和Product_Code
的数据库进行查询,用户将键入产品名称,并且在每个text_edit
事件中,我将用新数据填充QCompleter
。但是,当用户选择Product时,我想在其他地方显示代码。当然,可能有两个或更多的产品具有相同的名称,但不同的代码,所以我不能在搜索后查找代码。
那么,有没有办法在QCompleter
中有两个相关的字段呢?
我已经尝试使用隐藏列(带有代码)制作QTableWidget
,并将其显示在QlineEdit
的底部(模拟Qcompleter
)。看起来不错,也很好用……但我不知道如何添加QCompleter
所具有的功能,如向下箭头将跳入表中,并使其在lineEdit
失去焦点时消失,但不是当表被选中时。
您可以在补全模型中保留额外的数据:
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)
信号来捕捉自动完成动作并显示您想要的其他数据:
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));
}
但是如果用户不使用自动补全并键入整个字符串,这种方法将不起作用。在这种情况下,如果在数据库中有多个具有相同名称的记录,您将无法获得正确的代码id。
如果您正在尝试创建某种搜索字段,我建议您在某些表视图中显示所有数据,并使用QSortFilterProxyModel
显示与行编辑中用户输入匹配的记录。
- 查询SQLite数据库中的日期
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在ArangoDb AQL查询中指定数据库
- 从数据库实时显示QT c++中的数据
- 从函数角度看ID到文件路径的内部与外部映射
- 通过组合不同的类型来创建唯一的id
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 我不断收到 [错误] ID 返回 1 退出状态错误,但看不到问题所在
- FFMPEG配置文件级别id大小无效
- 方法内部但循环仍得到预期的不合格id错误C++
- 无法在C++中建立与MySQL数据库的连接
- 将类实现到数据库程序中
- C QT中的SQL数据库更新未前进到下一个ID
- Firebird/IBPP:如何检索由数据库自动增量生成的 ID
- 数据库中的自动 ID 与通过代码的自动 ID
- 通过传递一个ID(c++)从数据库中检索数据
- 如何在树模型中维护父 QStandardItems 和数据库行 ID 之间的链接
- 仅使用一个用户id和密码访问数据库
- QCompleter,如何有从数据库的Id
- 使用DAO获取Access数据库的副本ID