Я пытаюсь обновить значение в моей модели через 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 () запускался первым.