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を作成できますか?
はい、それはQt 5でなくなったQt 3(?)の問題です。代わりに-platform offscreen
コマンドラインオプションを使用してアプリケーションを実行してみてください。
QApplication
を使用する(およびQtWidgets
にリンクする)だけで十分なQImage
を描画するために、QGuiApplication
またはQtGui
へのリンクは必要ありません。
GUIなしでアプリを作成する場合は、QCoreApplication
ではなくQApplication
を使用する必要があります。