2012-05-22 55 views
4

我想驗證一個xml文件對特定模式。
所以我將模式加載到QXmlSchema對象中。但我有一些奇怪的錯誤。
我的代碼如下所示:QEventLoop:無法使用沒有QApplication

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:之前創建的系統D_Bus連接:無QApplication的
QDBusConnection不能使用QCoreApplication。
應用程序可能行爲不當。
QEventLoop:沒有的QApplication

不能使用

我的Qt Designer的版本:QT4設計師4:4.8.1-0ubuntu4.1
我的Qt Creator的版本:qtcreator 2.4.1-0ubuntu2

可能有人請幫助我解決這個問題。
謝謝

回答

6

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

爲了他的目的'QCoreApplication a(argc,argv);'就足夠了。你爲什麼認爲他需要任何GUI元素? – smerlin

+0

非常感謝。現在它工作正常。爲了我的目的,添加QCoreAppication(argc,argv)就足夠了。 – sundar

+13

@smerlin聽起來有點敵意,不需要那個。 – sjwarner

相關問題