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的主要内容,如果未能解决你的问题,请参考以下文章