gpt4 book ai didi

c++ - QObject从C++到QML到QML到C++(在列表中)

转载 作者:太空狗 更新时间:2023-10-29 23:04:55 24 4
gpt4 key购买 nike

我的想法是在一个列表中有一堆 QObject 驱动类的实例(用 C++ 创建)。然后将此列表传递给 QML,每个条目都可以通过单独的 QML 对象查看。现在我希望能够将特定实例传递回 C++(例如,单击时)。

这是一些代码:

QObject派生类

class Data : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name NOTIFY nameChanged)

Data(std::string n):_name(n){};
QString name(){return QString::fromStdString(_name);};
signals:
void nameChanged();
private:
std::string _name;
}

Controller (创建列表和接收选择的实例)

class Controller : public QObject
{
Q_OBJECT
Q_PROPERTY(QQmlListProperty<Data> list READ list NOTIFY listChanged)

Controller()
{
_list.append(new Data("data 1");
_list.append(new Data("data 2");
_list.append(new Data("data 3");
};
QQmlListProperty<Data> list() // <--- provide data to QML
{
return QQmlListProperty<Grammar>(this, _list);
};
void takeThisOne(Data* d)// <--- receive selected instance from QML
{
//do something with d
}
signals:
void listChanged();
private:
QList<Data*> _list;
}

QML main(显示数据列表)

ApplicationWindow
{
id: mainWindowContainer
width: 800
height: 500

ListView
{
id: dataList
delegate: Rectangle{
height: 10
width: 100
Text{text: name}
}
model: controller.list // <-- what data type are the list items here?
}

Button
{
id: btnOpen
text: "open selected Data in the DataViewer"
onClicked{
// what data type is dataList.currentItem and dataList.currentItem.modelData?
var dataViewer = Qt.createComponent("DataViewer.qml").createObject(mainWindowContainer, {data: dataList.currentItem.modelData});
dataViewer.show()}
}
}

QML DataViewer(显示数据并返回给 Controller )​​

Window
{
height: 400
width: 800
property variant data // <--- tried 'property Data data', but did not work

TextArea
{
text: data.name
}

Button
{
id: btnReturn
text: "return to controller"
onClicked: {controller.takeThisOne(data)} // <--- does not work
}
}

我希望这个示例代码是可以理解的。感谢您的帮助!

编辑:

我在做qmlRegisterType<Data>()在主要。也试过qmlRegisterType<Data>("stuff", 1, 0, "Data")并导入 stuff 1.0进入数据查看器。问题是,我不知道我的数据在不同点是哪种数据类型:

Controller: list of Data*
QML main : list of ???
dataList.currentItem = ???
dataList.currentItem.modelData = ???
DataViewer: variant or Data (according to property type, but Data does not work)
Controller: obviously not Data* as hoped, but what else?

最佳答案

我终于知道怎么做了!诀窍是使用

{数据:dataList.model[dataList.currentIndex]}

而不是 main.qml 中的 {data: dataList.currentItem]}{data: dataList.currentItem.modelData]}。虽然我仍然不知道使用了哪些数据类型以及为什么 currentItem 似乎使用了与模型 [dataList.currentIndex] 不同的数据类型,但它工作得很好!

关于c++ - QObject从C++到QML到QML到C++(在列表中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20997742/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com