首页 > 解决方案 > 在 Qt 中,是否可以将数据库单元映射到小部件的属性

问题描述

我正在尝试将包含我数据库中的文本的单元格映射到小部件的属性。我想做的是以下内容:

我试图从我的数据库中创建一个 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 属性

标签: sqliteqt

解决方案


推荐阅读