QtWebkit как графический интерфейс для настольных приложений - PullRequest
6 голосов
/ 11 января 2010

Мне было интересно, знает ли кто-нибудь о хороших руководствах или статьях, описывающих методы создания HTML GUI для приложения, использующего QTWebKit для настольного приложения Windows.

В основном меня интересует обмен сообщениями, событиями и информацией между, скажем, DLL (написанной на C ++, например) и GUI (QtWebKit).

нужны хорошие надежные ссылки ...

Ответы [ 4 ]

4 голосов
/ 11 января 2010

Это будет непросто: веб-браузеры - это крепости из-за проблем безопасности. Так что довольно сложно перейти от JS на веб-странице к чему-то вне браузера.

Кроме того, QtWebKit не очень открытый API. Самое большое препятствие в вашем случае - это то, что он не предоставляет вам доступ к DOM, поэтому вы можете заменить только весь HTML.

Следовательно, вам нужно будет исправить и написать много кода для реализации отсутствующих API и функций.

С момента выхода Qt 4.6 существует QWebElement ( см. Документы для примеров), так что вы можете по крайней мере получить доступ к DOM и изменить его. Это сделает многое проще. Я предлагаю решить, кто управляет браузером: будет ли ваше приложение JavaScript, который вызывает снаружи, или это приложение действительно на C ++, и вы используете браузер как средство визуализации интеллектуального интерфейса?

Гораздо более простым способом реализации вашей идеи может быть запуск внутреннего веб-сервера при запуске приложения, а затем открытие представления QtWebKit, указывающего на URL-адрес локального сервера. Затем вы можете использовать все стандартные инструменты веб-разработки. Eclipse использует эту технику для своей внутренней справочной системы.

3 голосов
/ 07 марта 2010

Я копирую / вставляю биты из разных разделов, но так я вставляю объект, доступный для javascript, затем использую javascript для общения с основным приложением. Кажется, хорошо работает ...

void MyApi::setWebView( QWebView *view ) {

    QWebPage *page = view->page();
    m_frame = page->mainFrame();

    attachObject();
    connect( m_frame, SIGNAL(javaScriptWindowObjectCleared()), 
        this, SLOT(attachObject()) );

}

void MyApi::attachObject() {

    m_frame->addToJavaScriptWindowObject( QString("MyApi"), this );

}

Это делает объект MyApi существующим в javascript, и я могу вызывать любые слоты, доступные из класса MyApi.

2 голосов
/ 11 января 2010

Для базового использования примеры от trolltech должны помочь вам начать работу.

Плюсом подхода Qt является то, что раскрытие объектов сценарием относительно просто, см., Например, здесь . JavaScript в различных встроенных веб-наборах может затем легко взаимодействовать с C ++ (и, конечно, со сценарием в других окнах, если вы предоставите поддержку на стороне C ++ для этого). Недостатком является то, что API пока не выглядит достаточно стабильным и, похоже, отсутствует поддержка добавления слушателей событий из JavaScript в объекты C ++ (или, по крайней мере, я не понял, как это должно было быть сделано).

Размещение пользовательских нарисованных элементов на странице снова довольно упрощено, вы вставляете плагины на страницу (например, через тег <object>) и возвращаете пользовательские QWidgets из QWebPluginFactory :: create () .

Важная вещь, о которой всегда следует помнить: вызовы встроенного веб-набора (например, для оценки JavaScript) всегда должны выполняться в главном потоке.

2 голосов
/ 11 января 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...