首页 > 解决方案 > Q_PROPERTY 未将值设置为通过 qml 上的模型给出的值

问题描述

我试图通过 qml 更新我的模型中的值,以便我可以让用户成为朋友,但由于某种原因它不起作用。当基本上相同的代码适用于程序的不同部分时。

我已经尝试使用引擎设置值

主.cpp:

    qmlRegisterType<sqlFriendsModel>("chat.friendsModel", 1, 0, "SqlFriendsModel");

朋友模型.h

#include <QSqlQueryModel>

class sqlFriendsModel : public QSqlQueryModel
{
    Q_OBJECT
    Q_PROPERTY(QString sender READ getSender WRITE setSender NOTIFY friendsList)

public:
   sqlFriendsModel(QObject *parent = 0);
   Q_INVOKABLE void setSender(const QString& sender);
   QString getSender() const;

private:
   QString m_sender;

signals:
    void friendsList();
};

朋友模型.cpp

QString sqlFriendsModel::getSender() const
{
    return m_sender;
}

Q_INVOKABLE void sqlFriendsModel::setSender(const QString &sender)
{
    if (sender == m_sender)
        return;

    m_sender = sender;

    emit friendsList();
}

sqlFriendsModel::sqlFriendsModel(QObject *parent) :
    QSqlQueryModel(parent)
{
    createFriendsTable();

    qDebug()<< "sender is: " << m_sender;

    QString friendString = QString::fromLatin1("SELECT * FROM Friends WHERE You IS '%1'").arg(m_sender);

    QSqlQuery qry;
    if(!qry.exec(friendString))
        qFatal("Friends SELECT query failed: %s", qPrintable(qry.lastError().text()));

    setQuery(qry);
    if (lastError().isValid())
        qFatal("Cannot set query on SqlContactModel: %s", qPrintable(lastError().text()));

}

主窗口.qml

    import chat.friendsModel 1.0

    property string author

    model: SqlFriendsModel {
         sender: author
    } 

登录.qml

    root.StackView.view.push("qrc:/mainwindow.qml", { author: userTextField.text })

我也试过在 mainwindow.qml 上运行它:

    Component.onCompleted: {
        _friendsModel.setSender(author)
    }

实际值作者的行为就像我想要的那样,但是每当我尝试在朋友模型中设置发件人时,它仍然是空的

编辑:

在弄乱断点之后,我发现 sqlfriendsmodel 首先加载,并且只有在 setSender() 工作并将 m_sender 设置为所需值之后才加载。现在我只需要让它先运行 setSender() 。

标签: c++sqliteqtqml

解决方案


推荐阅读