4

特定のスキーマに対して 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

誰かがこの問題を解決するのを手伝ってくれませんか。
ありがとう

4

1 に答える 1

8

QXmlSchemaは、とりわけ、 から継承するメッセージ ハンドラを作成しますQObject。このメッセージ ハンドラーは Qt のイベント システムを使用するため、イベント ループ (イベントのキューイングとルーティングを処理する構造) が必要です。エラー メッセージが示すように、メイン イベント ループがQApplication.

main()通常、GUI アプリケーションを作成している場合は、関数に次のような少量のコードを含める必要があります。

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";
}
于 2012-05-22T07:59:47.917 に答える