c++ - 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() 。
解决方案
推荐阅读
- mysql - 为什么每次尝试上传数据库时mysql都会给我错误1136?
- java - 如何使用 Java 进行简单的密码登录
- python - 使用 pandas 将 csv 转换为 json 以在 highcharts highstock 图中绘制两个系列而不是一个系列
- c# - UWP 通知中是否可以有特定的斜体或粗体文本?
- javascript - React-native:未定义不是对象(评估'_this3.props.navigation.navigate')
- reactjs - 可以与自定义 Javascript 对象处理程序进行交互
- c - 灵活的数组成员和指针成员:利弊?
- python - 将生成的 JSON 保存到 SQLite - Django
- solidity - 在 Solidity 中,为什么使用 'is' 关键字,而不是 'extends' 进行继承
- ruby-on-rails - rails 5.0.7 多个默认 gem,无法卸载任何默认 gem