Document Completed Signal inside qt using QAxWidget

我是研究僧i 提交于 2019-12-11 15:22:02

问题


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&)


回答1:


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?
    }
}



回答2:


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



来源:https://stackoverflow.com/questions/47987953/document-completed-signal-inside-qt-using-qaxwidget

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!