QEventLoop:没有QApplication不能使用

5

我正在尝试使用特定的模式对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
请问有人能帮我解决这个问题吗? 谢谢。
1个回答

8

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";
}

15
对于他的目的,一个QCoreApplication a(argc, argv);就足够了。你认为他为什么需要任何GUI元素? - smerlin
非常感谢。现在它运行得很好。对于我的目的,添加QCoreApplication a(argc,argv)就足够了。 - sundar
14
@smerlin,听起来有点敌对,没有必要这样。 - sam-w
嗨,我遇到了一个相关但不完全相同的问题:https://stackoverflow.com/questions/46729425/qxmlschema-failing-to-validate-and-giving-odd-console-output - Iron Attorney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接