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

标签 qt qt4 qwebkit qwebpage

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

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

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

我的问题不仅仅适用于 Mac。我想知道 Qt 是否有“官方”方式来做到这一点。仅当没有时,我才想知 Prop 体的方法,例如目前在 Mac 上。

<小时/>

关于 Mac 的更具体的信息:

还有LSBackgroundOnly属性,可以为应用程序包设置,并且进入我想要的方向(因此我仍然不确定它是否真的是真正的仅限控制台,例如,在没有 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()

此外,我不确定它是否也适用于其他环境,也许作为系统守护进程等。

最佳答案

您可以使用 QPA 来完成此操作。这恰好是 PhantomJS 实现 headless 的方式。修改 QT 预配置文件以指定 QPA:

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

还有一些关于 QMinimalWindowSurface 的内容。

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

关于qt - 如何在非 GUI 应用程序中使用 QWebPage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213215/

相关文章:

c++ - Q按钮 : How to know whether a "released" signal will be followed by a "clicked" signal?

python - 如何在qt4的文本编辑框中创建多个选择?

python-3.x - Webkit_server(从 python 的 dryscrape 调用)在访问每个页面时使用越来越多的内存。如何减少使用的内存?

python - PyQt5 应用程序在 PyQt4 应用程序不会出现错误时退出

c++ - Qt和OpenCV静态库相互冲突

c++ - 如果从同一个信号调用两个槽,Qt 可以同时调用它们吗?

c++ - 如何使用qt使用qwebview进行打印

javascript - QT 和 QwebKit 我可以加载 javascript 文件作为资源文件并使用它吗?

c++ - 当按值传递时,包含指针的 QList 将如何表现

multithreading - 从线程修改QGraphicsItem的正确方法?