我在网上的一个例子来填充组合框,但它并没有为我炒作,我不知道为什么!我有两个类stock
和DbCon
,stock
有三个私有字段以及公共访问器和增变器。 DbCon
有一个Q_Property
和两个公共函数,一个返回数据库连接,另一个创建并返回stock
列表为QList<QObject*>
。在main.cpp
中,我创建了一个名为“data”的上下文属性,以便从QML
访问DbCon
。从QList填充组合框<QObject*>
main.qml
我在dbcon.h
class DbCon:public QObject
{
Q_OBJECT
Q_PROPERTY(QList<QObject*> stockModel READ stockModel)
public:
explicit DbCon(QObject *parent = 0);
QSqlDatabase db();
QList<QObject*> stockModel();
};
....
ComboBox{
model: data.stockModel
textRole: "code"
}
....
在main.cpp中
DbCon db;
engine.rootContext()->setContextProperty("data", &db);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
在实施QList<QObject*> stockModel()
的dbcon.h
QList<QObject*> data;
....
while (query.next()) {
stock *s = new stock();
....
data.append(s);
}
return data;
和stock.h
class stock : public QObject
{
Q_OBJECT
private:
QString m_name;
QString m_code;
int m_id;
public:
explicit stock(QObject *parent = 0);
QString name();
void setname(QString &name);
QString code();
void setcode(QString &code);
int id();
void setid(int &id);
};
当运行该应用程序我得到应用输出以下消息
QQmlExpression:表达式QRC:/main.qml:16:20要看在非NOTIFYable属性: QQuickComboBox ::数据
我没有得到任何东西在组合框!
如果我以这种方式
engine.rootContext()->setContextProperty("myModel", QVariant::fromValue(data));
创建main.cpp
另一个上下文属性和设置myModel
为模型的组合框,它工作正常。但我想这样做,因为onCurrentIndexChanged
我将调用另一个函数,返回另一个QList<QObject*>
为另一个qml
文件TableView
。
编辑:Entrie QML
import QtQuick 2.5
import QtQuick.Window 2.2
import QtQuick.Controls 2.0
Window {
visible: true
width:600
height:600
property string contentSource
Column{
spacing:10
ComboBox{
model: data.stockModel
textRole: "code"
}
Loader {
id: content
width: parent.width
height:400
}
Row{
spacing:10
Button{
text: "Page1"
onClicked: content.source = "Page1.qml"
}
Button{
text: "Page2"
onClicked: content.source = "Page2.qml"
}
}
}
}
通过main.qml
改变main.cpp
data
至dataStore
和data.stockModel
到dataStore.stockModel
我获得以下错误
文件:/// C :/Qt/Qt5.7.0/5.7/mingw53_32/qml/QtQuick/Controls.2 /组合框。QML:62:15:无法为[未定义]分配到QString的
什么是QML中的'数据'?它是如何定义的? – AlexanderVX
@AlexanderVX它不是指向'DbCon'的指针吗?它在'main.cpp'中定义,如“main.cpp”部分所示。 –
更好地显示整个QML部分。 – AlexanderVX