[Development] ActiveQt Events

neel patel neel5481 at gmail.com
Tue Jun 27 14:17:59 CEST 2017


Thank you Henry. I will check and keep you updated.

On Tue, Jun 27, 2017 at 5:26 PM, Henry Skoglund <fromqt at tungware.se> wrote:

> On 2017-06-27 10:54, neel patel wrote:
>
>> Hi All,
>>
>> As I am using "QAxWidget". I took the "webbrowser" example as reference.
>> As I am using "QTabWidget" as mainwindow widget and adding "QAxWidget" as
>> tab widget. Below is the code for reference.
>>
>>
>>      m_tabWidget = new QTabWidget(mainwindow);
>>
>>      m_mainGridLayout = new QGridLayout(m_tabWidget);
>>      m_mainGridLayout->setContentsMargins(0, 0, 0, 0);
>>
>>      m_MainTab = new QWidget(m_tabWidget);
>>      m_tabGridLayout = new QGridLayout(m_MainTab);
>>      m_tabGridLayout->setContentsMargins(0, 0, 0, 0);
>>
>>      m_activeX = new WebAxWidget(m_MainTab);
>>      m_activeX->setControl(QStringLiteral("{8856F961-340A-11D0-
>> A96B-00C04FD705A2}"));
>>      m_activeX->setObjectName(QStringLiteral("WebBrowser"));
>>      m_activeX->setFocusPolicy(Qt::StrongFocus);
>>
>>      m_tabGridLayout->addWidget(m_activeX, 0, 0, 1, 1);
>>      m_tabWidget->addTab(m_MainTab, QString());
>>
>>      mainwindow->setCentralWidget(m_tabWidget);
>>
>> class WebAxWidget : public QAxWidget
>> {
>> public:
>>
>>      WebAxWidget(QWidget* parent = 0, Qt::WindowFlags f = 0)
>>          : QAxWidget(parent, f)
>>      {
>>      }
>> }
>>
>>
>>
>> I want to receive events like NewWindow3, NewWindow2, BeforeNavigate2
>> with Qt. As such there is no signal available in "QAxWidget". How can we
>> receive those signals from windows COM interface ?
>>
>> Let me know reference or pointers so that i can implement and suggest in
>> above code.
>>
>> Thanks in Advance.
>>
>
> Hi, you can receive those events through the generic QAxBase::signal, see
> http://doc.qt.io/qt-5/qaxbase.html#signal
> In it, you'll see the example code for receiving "BeforeNavigate2", and
> all the other event flavors you retrieve the same way.
>
> So first, add the slot declaration to your MainWindow class:
> ...
> private slots:
>     void slot(const QString& name,int argc, void* argv);
> ...
>
> then connect your m_activeX object to that signal, here is some sample
> code added after your " mainwindow->setCentralWidget(m_tabWidget);":
>
> ...
>     connect(m_activeX,SIGNAL(signal(const QString&,int,void*)),this,SLOT(slot(const
> QString&,int,void*)));
> //    connect(m_activeX,&QAxWidget::signal,this,&MainWindow::slot);  //
> this is better syntax but alas will *not* compile :-(
>
> // setup a sample navigation
>     QString url = "http://doc.qt.io/qt-5/qaxbase.html";
>     m_activeX->dynamicCall("Navigate(const QString&)",url);
> }
>
> // here's how to receive all of them
> // you'll have to check the name for the correct one, I'll give you 2 for
> free
> // just add the others you need...
> // note: the example in QAxBase::signal is too old to compile correctly,
> (changed below)
>
> // need this for the VARIANTARG chaps
> #include "windows.h"
>
> void MainWindow::slot(const QString &name, int argc, void *argv)
> {
>     VARIANTARG *params = (VARIANTARG*)argv;
>     if (name.startsWith("BeforeNavigate2("))
>     {
>     // "BeforeNavigate2(IDispatch*,QVariant&,QVariant&,QVariant&,QV
> ariant&,QVariant&,bool&)"
>         IDispatch *pDisp = params[argc-1].pdispVal;
>         VARIANTARG URL = *params[argc-2].pvarVal;
>         VARIANTARG Flags = *params[argc-3].pvarVal;
>         VARIANTARG TargetFrameName = *params[argc-4].pvarVal;
>         VARIANTARG PostData = *params[argc-5].pvarVal;
>         VARIANTARG Headers = *params[argc-6].pvarVal;
>         VARIANT_BOOL *Cancel = params[argc-7].pboolVal;
>
>         QString url = QString::fromStdWString(URL.bstrVal);
>         qDebug() << "BeforeNavigate2, ur" << url;
>     }
>
>     if (name.startsWith("NewWindow3("))
>     {
>     // NewWindow3(IDispatch**,bool&,uint,QString,QString)"
>         IDispatch *pDisp = params[argc-1].pdispVal;
>         VARIANT_BOOL* Cancel = params[argc-2].pboolVal;
>         uint Flags = params[argc-3].uintVal;
>         BSTR URLContext = params[argc-4].bstrVal;
>         BSTR URL = params[argc-5].bstrVal;
>
>         QString urlContext = QString::fromStdWString(URLContext);
>         QString url = QString::fromStdWString(URL);
>         qDebug() << "NewWindow3, opening" << url << "from" << urlContext;
>     }
> }
> ...
>
> Good luck! Rgrds Henry
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20170627/f5fbc1b3/attachment.html>


More information about the Development mailing list