4

我想QWebPage在非 GUI Qt 应用程序中使用。我的意思是我根本不想与窗口服务器通信。不过,使用 QtGui 不是问题。

QWebPage在内部创建一些QWidget实例。因此,QCoreApplication无法使用。

但是,在创建QApplication实例时,我已经立即获得了 MacOSX 停靠图标。我不希望那样。这也意味着它以某种方式在 Cocoa 中将自己注册为 GUI 应用程序。

我的问题不仅限于 Mac。我想知道 Qt 是否有“官方”的方式来做到这一点。只有在没有的情况下,我才想知道具体的方法,例如现在在 Mac 上。


关于 Mac 的更具体一点:

还有一个LSBackgroundOnly属性,可以为一个 App 包设置,它指向我想要的方向(因此我仍然不确定它是否真的是纯控制台的,例如在没有 Quartz 的情况下也可以工作,等等。 )。但是,我根本没有 App 包。它只是一个简单的二进制文件(用作 shell 中的命令行工具)。

现在,我有一个小解决方法来隐藏停靠图标,但这很丑陋,因为它首先弹出然后消失:(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 预配置文件以指定 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

恐怕没有不使用 QtGui 的简单方法。如果您查看QWebPage 的源代码,您会看到使用了 QPainter,作为从 QtGui 导出的一些方法\对象。这是意料之中的,因为您具有QWidget* QWebPage::view() constAPI 中的功能。

您可以破解源代码,但您的 Qt 库是独一无二的且不兼容的。这是一种负担。

于 2012-02-09T15:27:32.547 回答
0

你想用 QWebPage 做什么?也许有一个更适合您需求的课程?
如果没有:从 QWebPage 的源代码复制和粘贴是一种选择。

更新:
你想创建类似命令行浏览器的东西吗?或者只是看起来像 Web 服务器的浏览器?
在这些情况下,您可能只是隐藏QWidget,因此停靠栏中不会出现任何内容(不确定这是否是它在 OS X 上的工作方式;在 Windows 上,我认为可能有没有任务栏条目的窗口)。

于 2012-02-09T15:07:44.067 回答
0

PyPhantomJs 是使用 pyqt 的无头浏览器,甚至 IT 也使用 QApplication:http ://code.google.com/p/phantomjs/source/browse/python/pyphantomjs/pyphantomjs.py?name=4ec8df3a84&r=4dc051a60ec3d59bf125838a5caa2a24d59bd0ee

您始终可以使用使应用程序作为系统托盘应用程序运行的各种窗口标志

更新

因为我看到您使用的是 osx,您可以将此设置添加到您的应用程序列表中,以使其作为没有图标的系统服务启动:http: //www.cocoadev.com/index.pl?LSBackgroundOnly

我将它用于位于顶部任务栏中并提供聚光灯样式界面的应用程序

于 2012-02-18T00:12:38.620 回答