【问题标题】:Issues using QScriptEngine: Must construct a Q(Core)Application before a QScriptEngine使用 QScriptEngine 的问题:必须在 QScriptEngine 之前构建 Q(Core)Application
【发布时间】:2018-10-01 23:12:50
【问题描述】:

我有一个使用主窗口小部件的 Qt Gui 应用程序。窗口类如下所示:

class MainWindow : public QMainWindow
{
  Q_OBJECT
  ...
  public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
  //some more code
  private:
    class2* m_data;
}

在 class2 中,我想使用 qscriptengine。简而言之,它看起来像这样:

class2.h:

 class class2: public QObject
 {
  Q_OBJECT
  public:
   class2(QObject* parent = nullptr);
 ...
 private:
 QScriptEngine* m_engine;
 }

class2.cpp:

 class2::class2(QObject* parent)
 :QObject(parent)       
{
 m_engine = new QScriptEngine(this); //this line fails!!
 //some other code
}

还有一个 main.cpp 文件,看起来很典型:

int main(int argc, char *argv[])
{
 QApplication a(argc, argv);
 MainWindow w;
 w.show();
 return a.exec();
}

在初始化 qscript 引擎应用程序崩溃时。调试器将我带到 qscriptengine.cpp,错误 qFatal("QScriptEngine:必须在 QScriptEngine 之前构造 Q(Core)Application");。它还在 ucrtbase.dll 中显示未处理的异常。 令人惊讶的是,它在发布配置中工作(但在某处失败),并且在调试配置中启动失败。认为这可能是相关的。 我做错了什么,我该如何解决? 我确实在将 qtscript 库包含到项目中时遇到了问题,但在我看来,我解决了这些问题。我通过#pragma 注释和项目属性将库添加到项目中。我应该复制它的 .lib 和 .dll 文件还是类似的东西?..

【问题讨论】:

  • class2 是什么时候构造的?你把它变成全局变量了吗?
  • 也许我应该添加一段 mainwindow.cpp 代码。 Class2 是它的一部分,并在 mainwindow 构造函数中构造: mainwindow.cpp: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); m_data = 新类 2; }
  • 我无法重现这一点。你在哪里实例化class2?包含脚本有什么问题?您的 *.pro 文件中有 QT += script 吗?
  • 我没有 .pro 文件,我需要一个调试器,所以我的项目在 Visual Studio 中。只有 sln 文件。问题不包括纯“include 的脚本,我不得不使用#pragma comment(lib, "QScript")。Class2 实例出现在主窗口的构造函数中。同样重要的是:它仅在调试配置中崩溃。在放开就好了。
  • 问题是通过重新安装 Qt 并在项目中包含附加依赖项中的库来解决的,而不是通过 pragma 注释。

标签: c++ qt visual-studio-2017 qtscript qt5.11


【解决方案1】:

问题是通过重新安装 Qt 并在项目中包含附加依赖项中的库来解决的,而不是通过编译指示注释。

【讨论】:

    猜你喜欢
    • 2019-08-05
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多