QEventLoop:没有QApplication就无法使用

sun*_*dar 4 qt qt4 qtxml

我正在尝试针对特定架构验证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;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行上面的代码时,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

有人可以帮我解决这个问题.
谢谢

sam*_*m-w 6

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

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

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

  return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

例如,在以下构造函数中启动代码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";
}
Run Code Online (Sandbox Code Playgroud)

  • @smerlin听起来有点敌意,没必要. (13认同)
  • 为了他的目的,`QCoreApplication a(argc,argv);`就足够了.为什么你认为他想要任何GUI元素? (10认同)
  • @smerlin不用担心:) (4认同)