web-dev-qa-db-ja.com

ディスプレイのないQt 5.1 QApplication-QXcbConnection:ディスプレイに接続できませんでした

Qt5.1を使用していて、ディスプレイなしでQApplicationを作成しようとしています。 QPainterでテキストを描画する必要があるため、QApplication(またはQGuiApplication)を使用する必要があります。そうしないと、segfaultが発生します。

アプリケーションはQt4.8では問題なく動作しましたが、次のエラーでUbuntuのヘッドレスバージョンのQt5.1で失敗します。

「QXcbConnection:ディスプレイに接続できませんでした」。

Qt 4.8では、次のコンストラクターをGUIenabled = falseで使用して、表示を必要としないQApplicationを作成できました。

QApplication :: QApplication(int&argc、char ** argv、bool GUIenabled)

Qt5.1では、QApplicationのコンストラクターにGUIenabledフラグがなくなりました。

ソースコードを少しスキャンしたところ、QApplicationコンストラクターにフラグがあるようですが、そのフラグで使用できるオプションについては文書化されていません。 「false」を使用しても機能しません。

ディスプレイなしでQApplicationを作成するにはどうすればよいですか? QApplication GUIenabled = falseを伝える別の方法はありますか?または、QPainterでQImageにテキストを描画するときにsegfaultしないQCoreApplicationを作成できますか?

17
Vincent

はい、それはQt 5でなくなったQt 3(?)の問題です。代わりに-platform offscreenコマンドラインオプションを使用してアプリケーションを実行してみてください。

QApplicationを使用する(およびQtWidgetsにリンクする)だけで十分なQImageを描画するために、QGuiApplicationまたはQtGuiへのリンクは必要ありません。

20
peppe

GUIなしでアプリを作成する場合は、QCoreApplicationではなくQApplicationを使用する必要があります。

4
Pavel Strakhov