【问题标题】:How to use QWebEnginePage::OpenLinkInNewTab [Qt5.8]如何使用 QWebEnginePage::OpenLinkInNewTab [Qt5.8]
【发布时间】:2017-03-29 20:16:50
【问题描述】:

当我使用此代码在 Quora 上的提要中单击指向任何问题的链接时,该链接不会打开,但不会打印“Hello”。你能告诉我我哪里错了吗?我很确定 quora 上的链接会发出 OpenLinkInNewTab 信号。请帮忙,谢谢。

class WebView : public QObject {
    void newTabRequested() {
        std::cout<<"Hello"<<std::endl;
    }

public:
    char* home_page;
    QAction* newTabAction=new QAction();
    QWebEngineView* view=new QWebEngineView();

    WebView(char* page=(char*)"https://google.com") {
        this->home_page=page;
        this->exitFullScreen->setShortcut(Qt::Key_Escape);

        createWebView();

        this->view->settings()
            ->setAttribute(QWebEngineSettings::JavascriptCanOpenWindows,true);

        this->newTabAction=this->view->pageAction(QWebEnginePage::OpenLinkInNewTab);

        connect(this->newTabAction,&QAction::toggled,this,&WebView::newTabRequested);
    }

    void createWebView() {
        this->view->load(QUrl(this->home_page));
    }
};

【问题讨论】:

    标签: c++ qt qt5 qwebview qaction


    【解决方案1】:

    我认为问题在于newTabRequested 不是插槽。试试

    class WebView : public QObject{
        Q_OBJECT
    
    private slots:
        void newTabRequested(){
            std::cout<<"Hello"<<std::endl;
        }
    
        // ...
    }
    

    【讨论】:

    • 你的方法也报错undefined reference to vtable for WebView
    • 它正在为我编译。类是在标头 (.h) 文件中还是在 .cpp 中?如果是第二个,那么您必须采取一种解决方法并在最后手动包含 moc'ed 文件。
    • 我刚刚也注意到createWebView 方法在 连接插槽之前被调用。在该功能中,您加载页面。我不是 QWebEngine 方面的专家,但是,不应该在 连接和设置其余属性之后加载页面吗?
    • QWebEngineView::createWindow(QWebEnginePage::WindowType type)有关系吗?
    • 正如我所说,不是 QWEV 专家,但似乎是这样,也许其他人可以更好地澄清这一点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    相关资源
    最近更新 更多