C++ 使用单插槽处理Qt多个webview #包括 #包括 类MyWebview:公共QObject{ Q_对象 私人: QWebView*v1、*v2、*v3、*v4; 公众: MyWebview(){ v1=新的QWebView(0); v2=新的QWebView(0); v3=新的QWebView(0); v4=新的QWebView(0); v1->加载(QUrl(“http://google.com")); v2->加载(QUrl(“http://facebook.com")); v3->加载(QUrl(“http://bing.com")); v4->加载(QUrl(“http://twitter.com")); 连接(v1,信号(loadFinished(bool)),此,插槽(finished(bool))); 连接(v2,信号(loadFinished(bool)),此,插槽(finished(bool))); 连接(v3,信号(loadFinished(bool)),此,插槽(finished(bool)); 连接(v4,信号(loadFinished(bool)),此,插槽(finished(bool))); } 公众时段: void MyWebview::finished(bool ok){/[SLOT] 开关(/**/){ case/*如果是v1*/: 断开(v1,信号(loadFinished(bool)),此,插槽(finished(bool))); 打破 case/*如果是v2*/: 断开(v2,信号(loadFinished(bool)),此,插槽(finished(bool))); 打破 case/*如果是v3*/: 断开(v3,信号(loadFinished(bool)),此,插槽(finished(bool)); 打破 case/*如果是v3*/: 断开(v4,信号(loadFinished(bool)),此,插槽(finished(bool)); 打破 } //做点什么。。 } }
如何解决这种情况?谢谢。请使用一个。它允许您识别信号的发送者。有C++ 使用单插槽处理Qt多个webview #包括 #包括 类MyWebview:公共QObject{ Q_对象 私人: QWebView*v1、*v2、*v3、*v4; 公众: MyWebview(){ v1=新的QWebView(0); v2=新的QWebView(0); v3=新的QWebView(0); v4=新的QWebView(0); v1->加载(QUrl(“http://google.com")); v2->加载(QUrl(“http://facebook.com")); v3->加载(QUrl(“http://bing.com")); v4->加载(QUrl(“http://twitter.com")); 连接(v1,信号(loadFinished(bool)),此,插槽(finished(bool))); 连接(v2,信号(loadFinished(bool)),此,插槽(finished(bool))); 连接(v3,信号(loadFinished(bool)),此,插槽(finished(bool)); 连接(v4,信号(loadFinished(bool)),此,插槽(finished(bool))); } 公众时段: void MyWebview::finished(bool ok){/[SLOT] 开关(/**/){ case/*如果是v1*/: 断开(v1,信号(loadFinished(bool)),此,插槽(finished(bool))); 打破 case/*如果是v2*/: 断开(v2,信号(loadFinished(bool)),此,插槽(finished(bool))); 打破 case/*如果是v3*/: 断开(v3,信号(loadFinished(bool)),此,插槽(finished(bool)); 打破 case/*如果是v3*/: 断开(v4,信号(loadFinished(bool)),此,插槽(finished(bool)); 打破 } //做点什么。。 } },c++,c,multithreading,qt,qwebview,C++,C,Multithreading,Qt,Qwebview,如何解决这种情况?谢谢。请使用一个。它允许您识别信号的发送者。有QObject::sender(),但更好的方法是使用类似@Anthony建议的QSignalMapper。 #include <QWebView> #include <QObject> class MyWebview : public QObject { Q_OBJECT private: QWebView *v1, *v2, *v3, *v4; public: MyWebv
QObject::sender()
,但更好的方法是使用类似@Anthony建议的QSignalMapper。
#include <QWebView>
#include <QObject>
class MyWebview : public QObject {
Q_OBJECT
private:
QWebView *v1, *v2, *v3, *v4;
public:
MyWebview() {
v1 = new QWebView(0);
v2 = new QWebView(0);
v3 = new QWebView(0);
v4 = new QWebView(0);
v1->load(QUrl("http://google.com"));
v2->load(QUrl("http://facebook.com"));
v3->load(QUrl("http://bing.com"));
v4->load(QUrl("http://twitter.com"));
connect(v1, SIGNAL(loadFinished(bool)), this, SLOT(finished(bool)));
connect(v2, SIGNAL(loadFinished(bool)), this, SLOT(finished(bool)));
connect(v3, SIGNAL(loadFinished(bool)), this, SLOT(finished(bool)));
connect(v4, SIGNAL(loadFinished(bool)), this, SLOT(finished(bool)));
}
public slots:
void MyWebview::finished(bool ok) { // [ SLOT ]
switch( /**/ ) {
case /*if it is v1*/:
disconnect(v1, SIGNAL(loadFinished(bool)), this, SLOT(finished(bool)));
break;
case /*if it is v2*/:
disconnect(v2, SIGNAL(loadFinished(bool)), this, SLOT(finished(bool)));
break;
case /*if it is v3*/:
disconnect(v3, SIGNAL(loadFinished(bool)), this, SLOT(finished(bool)));
break;
case /*if it is v3*/:
disconnect(v4, SIGNAL(loadFinished(bool)), this, SLOT(finished(bool)));
break;
}
// do something..
}
}