我想在非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()
此外,我不确定它是否也适用于其他环境,可能是系统守护程序等。
答案 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实例之前,您将无法创建任何小部件。
如果您需要浏览器,请尝试使用Webkit,Chromium,Berkelium,Awesomium(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
我将它用于位于顶部任务栏中的应用程序,并提供聚光灯样式界面