如何从QML到C++;? 我尝试用FieldLogic编写一些应用程序,我必须在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) }
如何从QML到C++;? 我尝试用FieldLogic编写一些应用程序,我必须在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) },c++,qt,qml,C++,Qt,Qml,class MyClass : public QObject { Q_OBJECT public slots: void addToPlaylist (const QList<QUrl> & urls){ for(int i = 0; i < urls.length(); ++i) qDebug() << "Get\n"; } }; QObject *fileDialog = root-&
class MyClass : public QObject
{
Q_OBJECT
public slots:
void addToPlaylist (const QList<QUrl> & urls){
for(int i = 0; i < urls.length(); ++i)
qDebug() << "Get\n";
}
};
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>)));
class MyClass:公共QObject
{
Q_对象
公众时段:
void addToPlaylist(常量QList和URL){
对于(int i=0;ifindChild(“行”)->findChild(“打开按钮”)->findChild(“文件对话框”);
MyClass MyClass;
连接(文件对话框,信号(getFiles(QVariant)),&myClass,插槽(addToPlaylist(QList));
我找到了解决办法,但我不明白。有人能用我的例子来解释我吗
只是一个问题(也许还有解决方案),为什么需要定义
QML的信号是什么?不能简单地调用C++时隙和通行证吗?
直接访问URL列表
你试图把一个URL列表从QML传递给C++,这些方法是:
1) 通过调用QQmlContext::setContextProperty()
并注册该对象,确保将MyClass
的对象提供给QML
例如:
QQuickView view;
MyClass myObj;
view.rootContext()->setContextProperty("myObj", &myObj);
然后您可以像这样从QML调用您的MyClass::addToPlaylist()
FileDialog{onAccepted: myObj.addToPlaylist(fileDialog.fileUrls);}
2) 每当用户从QML中选择一些文件时,使FileDialog
实例发出一个信号。现在需要将此信号连接到MyClass
对象的插槽。为此,您需要有指向FileDialog
实例和MyClass
对象的指针
通过执行此操作,您将获得指向FileDialog
实例的指针
QObject *fileDialog = root->findChild<QObject *>("column")->findChild<QObject *>("row")->findChild<QObject *>("openButton")->findChild<QObject*>("fileDialog");
QObject*fileDialog=root->findChild(“列”)->findChild(“行”)->findChild(“打开按钮”)->findChild(“文件对话框”);
现在您正在连接信号和插槽。就这样。我从未成功地使
信号
/插槽
方法用于传递URL列表。。。