4

QWebPageGUI以外のQtアプリケーションで使用したい。つまり、ウィンドウサーバーとはまったく通信したくないということです。ただし、QtGuiの使用は問題ではありません。

QWebPage内部でいくつかのQWidgetインスタンスを作成します。したがって、使用することQCoreApplicationはできません。

ただし、インスタンスを作成すると、QApplicationすぐにMacOSXドックアイコンが表示されます。そして、私はそれを望んでいません。また、なんとかして自分自身をGUIアプリケーションとしてCocoaに登録することも意味します。

私の質問はMacだけではありません。Qtがこれを行うための「公式の」方法があるかどうか知りたいです。ない場合にのみ、これを行うための具体的な方法を知りたいと思います。たとえば、今のところMacで。


Macについてもう少し具体的に:

AppBundleに設定できるLSBackgroundOnlyプロパティもあります。これは、私が望む方向に進みます(これにより、本当にコンソールのみであるかどうかはまだわかりません。たとえば、Quartzがなくても機能します。 )。ただし、AppBundleはまったくありません。これは単なるバイナリです(シェルでコマンドラインツールとして使用されます)。

今のところ、ドックアイコンを非表示にするための小さな回避策がありますが、最初にポップアップしてから消えるので、かなり醜いです:( Pythonコードですが、それは実際には問題ではありません...)

def hideMacDockIcon():
    # http://stackoverflow.com/a/9220857/133374
    import AppKit
    # https://developer.apple.com/library/mac/#documentation/AppKit/Reference/NSRunningApplication_Class/Reference/Reference.html
    NSApplicationActivationPolicyRegular = 0
    NSApplicationActivationPolicyAccessory = 1
    NSApplicationActivationPolicyProhibited = 2
    AppKit.NSApp.setActivationPolicy_(NSApplicationActivationPolicyProhibited)

app = QApplication(sys.argv)
if sys.platform == "darwin":
    hideMacDockIcon()

また、システムデーモンなど、他の環境でも機能するかどうかはわかりません。

4

6 に答える 6

5

これはQPAで行うことができます。これが、PhantomJSがヘッドレスを実現した方法です。QT preconfigファイルは、QPAを指定するように変更されました。

QT_CFG +=' -qpa' # X11-less with QPA (aka Lighthouse)

QMinimalWindowSurfaceについても何か。

https://github.com/ariya/phantomjs/commit/6c8a1c2dc1 https://github.com/ariya/phantomjs/commit/c78ae190a9

于 2013-03-18T07:10:08.150 に答える
4

QApplicationは、QWidgetsによって使用される静的変数を初期化します。したがって、QApplicationインスタンスを作成するまで、ウィジェットを作成することはできません。

ブラウザが必要な場合は、WebkitChromiumBerkeliumAwesomium(商用)またはchromiumoffscreenrenderer(LGPLフォーク)を使用してみてください

于 2012-02-17T23:13:01.187 に答える
1

'no gui'フラグをQApplicationに渡してみましたか?

QApplication ( int & argc, char ** argv, bool GUIenabled )
于 2012-02-23T05:52:22.307 に答える
0

PyPhantomJsはpyqtを使用するヘッドレスウェブブラウザであり、ITでもQApplicationを使用しています:http ://code.google.com/p/phantomjs/source/browse/python/pyphantomjs/pyphantomjs.py?name = 4ec8df3a84&r = 4dc051a60ec3d59bf125838a5caa2a24d59

アプリをシステムトレイアプリとして実行するためのさまざまなウィンドウフラグをいつでも使用できます

アップデート

osxを使用しているようですので、この設定をアプリのplistに追加して、アイコンのないシステムサービスとして起動することができます:http://www.cocoadev.com/index.pl?LSBackgroundOnly

上部のタスクバーに配置され、スポットライトスタイルのインターフェイスを提供するアプリにこれを使用します

于 2012-02-18T00:12:38.620 に答える
0

QWebPageを何に使用したいですか?たぶんあなたのニーズにより適したクラスがありますか?
そうでない場合:QWebPageのソースコードからのコピーと貼り付けはオプションです。

更新:
コマンドラインブラウザのようなものを作成しますか?それとも、Webサーバーにとってブラウザのように見えるものですか?
このような場合は、QWidgetを非表示にして、ドックバーに何も表示されないようにすることができます(これがOS Xでどのように機能するかはわかりません。Windowsでは、タスクバーエントリのないウィンドウを使用できると思います)。

于 2012-02-09T15:07:44.067 に答える
0

QtGuiを使わない簡単な方法はないのではないかと思います。QWebPageのソースコードを見ると、QtGuiからエクスポートされたメソッド/オブジェクトの一部として、QPainterが使用されていることがわかります。QWidget* QWebPage::view() constAPIの ような関数があるので、これは予想されていました。

ソースコードの考え方をハックすることはできますが、Qtライブラリは一意で互換性がありません。それは負担です。

于 2012-02-09T15:27:32.547 に答える