如何在非GUI应用程序中使用QWebPage

时间:2012-02-09 15:00:36

标签: qt qt4 qwebkit qwebpage

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

QWebPage在内部创建了一些QWidget个实例。因此,使用QCoreApplication是不可能的。

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

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


更具体的Mac:

还有一个LSBackgroundOnly属性,可以为App捆绑设置,并按照我想要的方向(我仍然不确定它是否真的是真正的控制台,例如也可以在没有Quartz的情况下工作等)。但是,我根本没有应用程序包;它只是一个简单的二进制文件(用作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()

此外,我不确定它是否也适用于其他环境,可能是系统守护程序等。

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

QApplication初始化QWidgets使用的静态变量。因此,在创建QApplication实例之前,您将无法创建任何小部件。

如果您需要浏览器,请尝试使用WebkitChromiumBerkeliumAwesomium(commersial)或chromiumoffscreenrenderer(LGPL fork)

答案 2 :(得分:1)

您是否尝试将'no gui'标志传递给QApplication?

QApplication ( int & argc, char ** argv, bool GUIenabled )

答案 3 :(得分:0)

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

<强>更新
你想创建像命令行浏览器的东西吗?或者只是看起来像浏览器到Web服务器的东西? 在这些情况下,您可能只是隐藏 QWidget,因此停靠栏中没有任何内容(不确定它是否在OS X上运行;在Windows上,可以使窗口没有任务栏条目,我想)。

答案 4 :(得分:0)

恐怕没有简单的方法可以不使用QtGui。如果查看source code of QWebPage,您会看到使用QPainter,因为QtGui中有一些导出的方法\对象。这是预期的,因为您在API中具有QWidget* QWebPage::view() const等功能。

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

答案 5 :(得分:0)

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

您可以随时使用各种窗口标记,使应用程序作为系统托盘应用程序运行

<强>更新

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

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