Document Completed Signal inside qt using QAxWidget

559 Views Asked by At

I'm Using qt Built-in Examples in /examples/activeqt/webbrowser, and i'm trying to use DocumentComplete SIGNAL. my purpose is using embedded Internet explorer inside QAxWidget and popup a message (with contetnt from the website) after DocumentComplete. NavigateComplete Signal is not good enough for me use...

the code can be seen here : qt Web browser Example

class MainWindow : public QMainWindow, public Ui::MainWindow
{
    Q_OBJECT
public:
    MainWindow();

public slots:
    void on_WebBrowser_TitleChange(const QString &title);
    void on_WebBrowser_ProgressChange(int a, int b);
    void on_WebBrowser_CommandStateChange(int cmd, bool on);
    void on_WebBrowser_BeforeNavigate();
    void on_WebBrowser_NavigateComplete(const QString &address);
    void on_WebBrowser_DocumentComplete(IDispatch*,QVariant&)

    void on_actionGo_triggered();
    void on_actionNewWindow_triggered();
    void on_actionAddBookmark_triggered();
    void on_actionAbout_triggered();
    void on_actionAboutQt_triggered();
    void on_actionFileClose_triggered();

private:
    QProgressBar *m_progressBar;
 
};

MainWindow::MainWindow()
{
    setupUi(this);
  
    connect(m_addressEdit, SIGNAL(returnPressed()), actionGo, SLOT(trigger()));

    connect(actionBack, SIGNAL(triggered()), WebBrowser, SLOT(GoBack()));
    connect(actionForward, SIGNAL(triggered()), WebBrowser, SLOT(GoForward()));
    connect(actionStop, SIGNAL(triggered()), WebBrowser, SLOT(Stop()));
    connect(actionRefresh, SIGNAL(triggered()), WebBrowser, SLOT(Refresh()));
    connect(actionHome, SIGNAL(triggered()), WebBrowser, SLOT(GoHome()));
    connect(actionSearch, SIGNAL(triggered()), WebBrowser, SLOT(GoSearch()));
    connect(WebBrowser,SIGNAL(DocumentComplete(IDispatch*,QVariant&), this, SLOT(on_WebBrowser_DocumentComplete(IDispatch*,QVariant&)))
}
void MainWindow::on_WebBrowser_DocumentComplete(IDispatch*,QVariant&)
{
    QMessangeBox x;
    x.setText("pop-up");
    x.exec();
}

the dubbuger says: No such slot MainWindow::on_WebBrowser_DocumentComplete(IDispatch*,QVaria‌​nt&)

2

There are 2 best solutions below

0
Mark Ruffon On BEST ANSWER

i solved the issue by regenerating the .moc file. under build configuration the folder location of qmake was wrong. by correcting it to project location fixed my problem. the slot is now recognized. thank all for you help.

Qt Build Configuration

0
Alexander V On

As long as the workaround needs more than comment:

MyWidgetUsesActiveX::MyWidgetUsesActiveX()
{
    ///
    connect(m_pActiveX, SIGNAL(signal(const QString&, int, void*)),
        this, SLOT(activexEventHandler(const QString&, int, void*)));
}

void MyWidgetUsesActiveX::activexEventHandler(
                             const QString &name, int argc, void *argv)
{
    VARIANTARG *params = (VARIANTARG*)argv;

    // See what events fired
    qDebug() << "Event:" << name << "argc:" << argc;

    // some concrete example
    if (name == "OnRemoteWindowDisplayed")
    {
        // Extract parameters
        _variant_t varValue = params[argc-1];
        bool bDisplayed = (bool)varValue;

        // hwnd
        varValue = params[argc-2];
        int iResult = (int)varValue;

        varValue = params[argc-3];
        int windowAttribute = (int) varValue;

        // CALL that stubborn slot we cannot have called otherwise
        onRemoteWindowDisplayed(bDisplayed, iResult, windowAttribute);
    }
    else if (name == "OnSomethingElse")
    {
        // extract concrete parameters and call the handler from here
        // onSomethingElse(param1, param2, param3);
    }
    else
    {
        // Log it?
    }
}