как использовать QWebPage в приложении без графического интерфейса - PullRequest
4 голосов
/ 09 февраля 2012

Я хочу использовать QWebPage в Qt-приложении без графического интерфейса.Под этим я подразумеваю, что я вообще не хочу общаться с оконным сервером.Однако использование QtGui не является проблемой.

QWebPage внутренне создает несколько экземпляров QWidget.Таким образом, использование QCoreApplication невозможно.

При создании экземпляра QApplication я уже сразу получаю значок док-станции MacOSX.И я не хочу этого.Это также означает, что он каким-то образом регистрируется в Какао как приложение с графическим интерфейсом.

Мой вопрос не только для Mac.Я хотел бы знать, есть ли для Qt «официальный» способ сделать это.Только если нет, я хотел бы знать конкретные способы сделать это, например, на Mac на данный момент.


Несколько более конкретно о Mac:

Есть также LSBackgroundOnly свойство, которое можно установить для пакета приложения и которое идет в направлении к тому, что я хочу (из-за чего я до сих пор не уверен, действительно ли оно действительно только для консоли, например, также будет работать без Quartz и т. Д.).Тем не менее, у меня нет комплекта приложений вообще;это просто простой двоичный файл (для использования в качестве инструмента командной строки в оболочках).

На данный момент у меня есть небольшой обходной путь, чтобы скрыть значок док-станции, но он довольно уродлив, когда он сначала появляется изатем уходит: (код 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 ]

5 голосов
/ 18 марта 2013

Вы можете сделать это с 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

4 голосов
/ 18 февраля 2012

QApplication инициализирует статические переменные, которые используются QWidgets.Таким образом, вы не сможете создавать какие-либо виджеты, пока не создадите экземпляр QApplication.

Если вам нужен браузер, попробуйте использовать Webkit , Хром , Берклий , Awesomium (коммерческий) или chromiumoffscreenrenderer (вилка LGPL)

1 голос
/ 23 февраля 2012

Вы пытались передать флаг 'no gui' в QApplication?

QApplication ( int & argc, char ** argv, bool GUIenabled )
0 голосов
/ 18 февраля 2012

PyPhantomJs - это автономный веб-браузер, использующий pyqt, и даже ИТ использует 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

Я использую это для приложения, которое находится на панели задач в верхней части и обеспечивает интерфейс в стиле прожектора

0 голосов
/ 09 февраля 2012

Боюсь, что нет простого способа не использовать QtGui.Если вы посмотрите на исходный код QWebPage , вы увидите, что используется QPainter, как некоторые экспортируемые методы \ объекты из QtGui.Это ожидалось, поскольку у вас есть функции, такие как QWidget* QWebPage::view() const в API.

Вы можете взломать исходный код, но ваши библиотеки Qt уникальны и несовместимы. Это бремя.

0 голосов
/ 09 февраля 2012

Для чего вы хотите использовать QWebPage? Может быть, есть класс, который лучше подходит для ваших нужд?
Если нет: копирование и вставка из исходного кода QWebPage является опцией.

Обновление:
Вы хотите создать что-то вроде браузера командной строки? Или просто что-то похожее на браузер для веб-сервера?
В этих случаях вы можете просто скрыть QWidget, чтобы ничего не отображалось на панели док-станции (не уверен, что так оно и работает в OS X; в Windows возможно наличие окон без ввода панели задач думаю).

...