Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从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 - Fatal编程技术网

如何从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列表。。。