sqlite - 在 Qt 中,是否可以将数据库单元映射到小部件的属性
问题描述
我正在尝试将包含我数据库中的文本的单元格映射到小部件的属性。我想做的是以下内容:
- 拥有 QLabel 或 QPushbushButton 其文本可以由我的应用程序的用户编辑并且一旦编辑,它将更新我的 SQLite 数据库。
我试图从我的数据库中创建一个 QSqlTableModel,然后将我选择的小部件(下例中的 QPushButton)映射到它们。
我尝试按照文档中的这个示例进行操作,但我似乎遗漏了一些东西。
这个想法是让小部件数据感知,当用户完成编辑小部件时,我只需调用模型的 submitAll() 方法。
我的数据库看起来像这样:数据库
例如,目标是从数据库中获取名字“peter”并将其用于 QPushButton 的文本。
这是我的代码:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(QDir::currentPath() + "/todo.sqlite");
if (!db.open()) {
// something
}
QSqlQuery query;
query.prepare("CREATE TABLE IF NOT EXISTS names (id INTEGER UNIQUE PRIMARY KEY, firstname VARCHAR(30), lastname VARCHAR(30))");
query.exec();
m_model = new QSqlTableModel(this, db);
m_model->setEditStrategy(QSqlTableModel::OnManualSubmit);
m_model->setTable("names");
m_model->select();
// Find the number of rows from the table
query.exec("SELECT COUNT(*) FROM names");
if(query.first())
qDebug() << query.value(0).toInt() << Qt::endl;
// do the mapping
auto btn = new QPushButton;
auto mapper = new QDataWidgetMapper(this);
mapper->setModel(m_model);
//mapper->setItemDelegate(new QSqlRelationalDelegate(this));
qDebug() << m_model->fieldIndex("firstname");
mapper->addMapping(btn, m_model->fieldIndex("firstname"));
qDebug() << btn->text();
编辑 我听说过这种方法: void QDataWidgetMapper::addMapping(QWidget *widget, int section, const QByteArray &propertyName)
但是,我不知道如何访问我的小部件的 text 属性
解决方案
推荐阅读
- python-3.x - 将时间戳转换为日期应用于 Python 中的多个列
- c++ - 无法使用 Qt Creator 在 Windows 中构建 yaml-cpp
- javascript - 上传多个文件并显示进度条
- angular - 当以角度禁用表格中的按钮时,下一行按钮会随着数组长度的变化而变化
- javascript - ASP.NET Web API 中的表单
- python-3.x - 如何使用 FastAPI 返回元素
- sql - Postgresql - 如何从没有出现特定数据的同一个表中获取记录
- angular - 需要帮助解决 Angular 9 TypeScript 错误(TypeCasting)
- c# - 将每个记录的 int 列值更改为 1 会引发重复错误
- c++ - 如何在 C++ 中从 git 设置外部库