Pergunta

Eu sou novo no QT e o que estou tentando fazer é:

  1. Crie um aplicativo Linux usando a estrutura QT.
  2. Este aplicativo exibe algumas páginas da Web da Internet.
  3. Quero estender a API JavaScript para acessar alguns dados baseados em dispositivo e dispositivo, o que significa que alguns dispositivos podem ser controlados usando o JavaScript no WebKit.

Mas como adiciono algumas funções/classes personalizadas ao WebKit no QT?

Foi útil?

Solução

Felizmente, existe alguma documentação sobre isso, finalmente: http://doc.qt.io/qt-4.8/qtwebkit-bridge.html

Outras dicas

Eu fiz um projeto QWebkit no qual estabilizei uma ponte entre JavaScript e meu código C ++.

Para conseguir isso, usei o método:

this->page()->mainFrame()->addToJavaScriptWindowObject( "god", this );

Isso permite que você execute métodos do objeto que você passa para addTojavScriptWindowObject como segundo parâmetro do JavaScript, usando o objeto especificado como primeiro parâmetro.

Aqui um exemplo:

class Browser : public QWebView
{
     Q_OBJECT
     public:
         Browser( QWidget* parent=0 )
         {
            connect( this->page()->mainFrame(), SIGNAL(javaScriptWindowObjectCleared()),    this,   SLOT(onJavaScriptWindowObjectCleared()) );
         }

     public slots:
         void onJavaScriptWindowObjectCleared()
         {
          //   QString script = "console.log('init!');";
          //   this->page()->mainFrame()->evaluateJavaScript( script );
         }

         void onChange()
         {
             qDebug() << "Browser::onChange()";
         }
 }

Então, do JavaScript, posso fazer:

$('input:text').keydown( god.onChange );

Então, toda vez que pressiono uma tecla em uma caixa de entrada, God.onchange () é executado que executa o navegador :: onchange () slot.

Dessa forma, você evita estender a API JS.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top