【问题标题】:QEventLoop: Cannot be used without QApplicationQEventLoop:没有QApplication就不能使用
【发布时间】:2012-05-28 15:40:54
【问题描述】:

我正在尝试针对特定架构验证 xml 文件。
所以我将模式加载到 QXmlSchema 对象中。但是我遇到了一些奇怪的错误。
我的代码如下:

int main() {

QUrl url("http://www.schema-example.org/myschema.xsd");

QXmlSchema schema;
if (schema.load(url) == true)
    qDebug() << "schema is valid";
else
    qDebug() << "schema is invalid";

return 1;
}

当我尝试运行上述代码时,Qt 错误提示:

QEventLoop:没有 QApplication 就无法使用
QDBusConnection:在 QCoreApplication 之前创建的系统 D_Bus 连接。
应用程序可能行为不端。
QEventLoop:没有QApplication就不能使用

我的 Qt Designer 版本:qt4-designer 4:4.8.1-0ubuntu4.1
我的 Qt Creator 版本:qtcreator 2.4.1-0ubuntu2

谁能帮我解决这个问题。
谢谢

【问题讨论】:

    标签: qt qt4 qtxml


    【解决方案1】:

    QXmlSchema 创建一个继承自QObject 的消息处理程序。由于此消息处理程序将使用 Qt 的事件系统,因此需要一个事件循环(处理排队和事件路由的结构)。正如错误消息告诉您的那样,主事件循环与您的 QApplication 一起创建。

    如果您正在创建一个 GUI 应用程序,您通常应该在 main() 函数中包含少量代码,例如:

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

    MainWindow 的构造函数中开始你的代码:

    MainWindow::MainWindow(QWidget *parent) :
      QMainWindow(parent),
      ui(new Ui::MainWindow)
    {
      ui->setupUi(this);
    
      QUrl url("http://www.schema-example.org/myschema.xsd");
    
      QXmlSchema schema;
      if (schema.load(url) == true)
        qDebug() << "schema is valid";
      else
        qDebug() << "schema is invalid";
    }
    

    【讨论】:

    • 为了他的目的,QCoreApplication a(argc, argv); 就足够了。为什么你认为他想要任何 GUI 元素?
    • 非常感谢。现在它工作正常。对于我的目的,添加 QCoreAppication a(argc, argv) 就足够了。
    • @smerlin 听起来有点敌意,没必要。
    • 嗨,我遇到了一个相关但不完全相同的问题:stackoverflow.com/questions/46729425/…
    猜你喜欢
    • 2017-10-08
    • 2011-10-14
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多