我在網上的一個例子來填充組合框,但它並沒有爲我炒作,我不知道爲什麼!我有兩個類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