Q_PROPERTY не устанавливает значение того, что дано через модель в qml - PullRequest
0 голосов
/ 06 июня 2019

Я пытаюсь обновить значение в моей модели через qml, чтобы я мог найти друзей у пользователей, но по какой-то причине это не работает. Когда в основном один и тот же код работает для другой части программы.

Я уже пытался установить значение с помощью двигателя

main.cpp:

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

friendsmodel.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();
};

friendsmodel.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()));

}

mainwindow.qml

    import chat.friendsModel 1.0

    property string author

    model: SqlFriendsModel {
         sender: author
    } 
1016 * * login.qml
    root.StackView.view.push("qrc:/mainwindow.qml", { author: userTextField.text })

Я также попытался запустить это на mainwindow.qml:

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

фактическое значение автора действует так, как я хочу, но всякий раз, когда я пытаюсь установить отправителя в модели друзей, оно остается пустым

редактирование:

после возни с точками останова я обнаружил, что sqlfriendsmodel загружается первым и только после этого setSender () работает и устанавливает m_sender на желаемое значение. теперь мне просто нужно сделать так, чтобы setSender () запускался первым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...