qt5.7 中的信号和槽 - QWebEnginePage

Posted

技术标签:

【中文标题】qt5.7 中的信号和槽 - QWebEnginePage【英文标题】:Signals and Slots in qt5.7 - QWebEnginePage 【发布时间】:2017-03-25 09:46:08 【问题描述】:

我在将 QWebEnginePage 连接到 fullScreenRequested 时遇到问题,我正在尝试以下方式,但它给出了错误

main.cpp:58: error: ',' 标记之前的预期主表达式 连接(this->view->page(), SIGNAL(fullScreenRequested(QWebEngineFullScreenRequest)), &QWebEngineFullScreenRequest, SLOT(&QWebEngineFullScreenRequest::accept()));

我的代码:

class WebView:public QObject
public:
    char* home_page;
    QWebEngineView* view=new QWebEngineView();
    WebView(char* page=(char*)"https://google.com")
        this->home_page=page;
        createWebView();
        this->view->settings()->setAttribute(QWebEngineSettings::FullScreenSupportEnabled,true);
        connect(this->view->page(),SIGNAL(fullScreenRequested(QWebEngineFullScreenRequest)),&QWebEngineFullScreenRequest,SLOT(&QWebEngineFullScreenRequest::accept()));
    
    void createWebView()
        this->view->load(QUrl(this->home_page));
    
    QWebEngineView* returnView()
        return this->view;
    
    void home()
        this->view->load(QUrl(this->home_page));
    
;

请帮我解决这个问题。谢谢

【问题讨论】:

【参考方案1】:

您的问题是信号/插槽连接需要一个源对象以及一个目标对象作为参数,并且您混合了两种连接方式。

也可以

connect(&src, &FirstClass::signalName, &dest, &SecondClass::slotName);

或者

connect(&src, SIGNAL(signalName(argType)), &dest, SLOT(slotName(artType)));

在您的情况下,&QWebEngineFullScreenRequest 不是对象,而是您尝试获取类的地址。你需要一个QWebEngineFullScreenRequest 类的实例来连接它。

正确方法:

    WebView(...)
    
        //...
        connect(this->view->page(), &QWebEnginePage::fullScreenRequested, this, &WebView::acceptFullScreenRequest);
    

private slots:
    void acceptFullScreenRequest(QWebEngineFullScreenRequest request) 
        request.accept();
    

其他几点说明:

尝试将头文件 (.h) 中的类声明与定义 (.cpp) 文件分开。 而不是char* page=(char*)"https://google.com",最好使用const char*,或者在使用Qt 时使用更好的QString QWebEngineView* view=new QWebEngineView(); 最好在 WebView 构造函数中实例化它 this-> 是不必要的
WebView(QObject* parent = nullptr, QString page = "https://google.com"):
    QObject(parent),
    home_page(page),
    view(new QWebEngineView())

//...

【讨论】:

以上是关于qt5.7 中的信号和槽 - QWebEnginePage的主要内容,如果未能解决你的问题,请参考以下文章

Qt 6.x中的信号和槽介绍及示例

Qt 6.x中的信号和槽介绍及示例

使用 Qt 5.5 或 5.6 打印网页的 HTML/内容

Qt4 中的信号和槽

QThread 中的 Qt 信号和槽

PyQt 中的信号和槽