Qt-连接C ++和QML-ReferenceError:未定义xxx

时间:2018-08-01 14:32:53

标签: c++ qt qml

我是Qt的新手,目前正在尝试将程序的c ++部分与qml部分连接起来。连接的目的是将TreeView的当前选定项传递给qml(可能通过on_treeView_doubleClicked)。既然没有用,我尝试了所有建议的连接,在这里进行了非常基本的编程,但是我总是收到以下错误:

for filen in [x for x in os.listdir(path_to_files) if '.ares' in x]: df1 = pd.read_table(path_to_files+filen, skiprows=0, usecols=(0,1,2,3,4,8), names=['wave','num','stlines','fwhm','EWs','MeasredWave'], delimiter=r'\s+')) df1 = df1.sort_values('stlines', ascending=False).drop_duplicates('wave') lst.append(df1)

这是我有关连接的代码片段:

test.h:

file::/main.qml:10: ReferenceError: test is not defined

test.cpp:

#ifndef TEST_H
#define TEST_H

#include <QObject>
#include <QDebug>

class test : public QObject
{
    Q_OBJECT
public:
    explicit test(QObject *parent = nullptr);
    Q_INVOKABLE void testFunc();

signals:

public slots:
};

#endif // TEST_H

mainwindow.cpp:

#include "test.h"

test::test(QObject *parent) : QObject(parent)
{

}

void test::testFunc()
{
    qDebug() <<  "Hello from C++!";
}

main.qml:

test testObj;
QQmlApplicationEngine engine;
ui->quickWidget->setSource(QUrl::fromLocalFile(":/main.qml"));

engine.rootContext()->setContextProperty("test", &testObj);

我将非常感谢您提供的任何帮助(不仅是简单的编程,而且还可能传递了treeView中当前选择的项)。我知道其他线程中也有一些建议,但是它们似乎对我没有用,所以请不要将此标记为重复。

预先感谢

卢卡斯

1 个答案:

答案 0 :(得分:0)

您有3个主要错误:

  • 如果要使用来自qresource的.qml,则不应使用QUrl::fromLocalFile(),因为qresource不是本地文件,而是虚拟文件。

  • testObj是一个局部变量,因此将在创建该函数的函数完成后将其消除,一种解决方案是使testObj成为该类的成员。

  • 对于最后一个错误,主要错误QQuickWidget已经有一个QQmlEngine,您不必创建另一个错误。


*。h

Ui::MainWindow *ui;
test testObj;

*。cpp

ui->quickWidget->setSource(QUrl("qrc:/main.qml"));
ui->quickWidget->engine()->rootContext()->setContextProperty("test", &testObj);

我的完整测试可以在下面的link

中找到