【发布时间】:2014-07-12 09:22:31
【问题描述】:
我正在尝试通过信号将带有自定义元素的 QList 传递给 QML。但是在 qml 中,我得到了 QVariant(QList) 元素而不是常见的 javascript 数组。有我的代码:
class reader : public QObject
{
Q_OBJECT
Q_PROPERTY(QList<bashQuote*> data READ getData WRITE setData NOTIFY dataChanged)
public:
explicit reader(QObject *parent = 0);
Q_INVOKABLE void download(const QString& str);
QList<bashQuote*> getData() const { return data;}
signals:
void dataChanged(QList<bashQuote*> argum);
public slots:
void setData(QList<bashQuote*> arg);
public:
QList<bashQuote*> data;
};
class bashQuote : public QObject
{
Q_OBJECT
public:
explicit bashQuote(QObject *parent = 0);
QString quote;
signals:
public slots:
};
Q_DECLARE_METATYPE(bashQuote*)
int main(int argc, char *argv[])
{
qmlRegisterType<reader>("com.lobster.reader", 1, 0, "Reader");
qRegisterMetaType<bashQuote*>("BashQuotePtr");
return SailfishApp::main(argc, argv);
}
qml 文件:
Page {
id: page
Reader {
id: bestReader
onDataChanged: {
console.log("!!!!!!!!!!!!!onDataChanged")
}
}
// To enable PullDownMenu, place our content in a SilicaFlickable
SilicaFlickable {
anchors.fill: parent
Column {
id: column
Connections {
target: bestReader
onDataChanged: {
console.log(argum)
console.log(argum[0])
}
}
}
}
}
控制台输出是:
[D] onDataChanged:41 - !!!!!!!!!!!!!onDataChanged
[D] onDataChanged:70 - QVariant(QList<bashQuote*>)
[D] onDataChanged:71 - undefined
但是,当我将 BashQuote 更改为 int 时,一切正常
【问题讨论】:
标签: c++ qt qml qtcore qt-signals