如何从QML到c++获取数据
How to get data from QML to C++?
我尝试使用FileDialog编写一些应用程序,我必须在我的c++类中获取文件url。我尝试这样做:
FileDialog {
id: fileDialog
objectName: "fileDialog"
selectMultiple: true
signal getFiles(var urls)
title: qsTr("Open file")
nameFilters: [qsTr("MP3 files (*.mp3)"), qsTr("All files (*.*)")]
onAccepted: getFiles(fileDialog.fileUrls)
}
........................................
class MyClass : public QObject
{
Q_OBJECT
public slots:
void addToPlaylist (const QList<QUrl> & urls){
for(int i = 0; i < urls.length(); ++i)
qDebug() << "Getn";
}
};
............................................
QObject *fileDialog = root->findChild<QObject *>("column")->findChild<QObject *>("row")->findChild<QObject *>("openButton")->findChild<QObject*>("fileDialog");
MyClass myClass;
QObject::connect(fileDialog, SIGNAL(getFiles(QVariant)), &myClass, SLOT(addToPlaylist(QList<QUrl>)));
我找到了解决办法,但我不明白。有人能解释一下我的例子吗?只是一个问题(也可能是解决方案),为什么需要定义一个信号在QML吗?难道不能简单地调用c++槽并传递吗直接URL列表?
嗯,您正在尝试将url列表从qml传递到c++。这些就是方法。
1)通过调用QQmlContext::setContextProperty()
并注册该对象,确保QML可以使用MyClass
的对象。
的例子:
QQuickView view;
MyClass myObj;
view.rootContext()->setContextProperty("myObj", &myObj);
然后你可以像这样从QML调用你的MyClass::addToPlaylist()
。
FileDialog{onAccepted: myObj.addToPlaylist(fileDialog.fileUrls);}
参考:使用上下文属性将c++对象嵌入到QML中
2)当用户从QML中选择文件时,使FileDialog
实例发出信号。现在这个信号需要连接到MyClass
对象的插槽上。为了做到这一点,你需要有指向FileDialog
实例和MyClass
对象的指针。
你得到了一个指向FileDialog
实例的指针。
QObject *fileDialog = root->findChild<QObject *>("column")->findChild<QObject *>("row")->findChild<QObject *>("openButton")->findChild<QObject*>("fileDialog");
现在您正在连接信号和插槽。那它。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 使用指针从C++中的数组中获取最大值
- 如何获取std::result_of函数的返回类型
- 如何在openssl-ecc中获取十六进制格式的私钥
- 使用Unreal C++获取VR耳机的世界位置/方向
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 从C字符串中获取奇怪的字符串长度
- 为什么我的for循环不能正确获取argv
- 从python中调用C++函数并获取返回值
- 如何获取一个数字的前3位
- 获取字符串的长度并将其分配给数组
- 无法获取菜单选择以运行函数.C++
- 数组长度,为什么从命令行获取时不能使用它?
- Boost Spirit,获取迭代器内部语义动作
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- 具有默认值的引用获取函数
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 在c++中获取大文件的大小