c – QObject继承Ambiguous Base
发布时间:2020-12-16 10:30:16 所属栏目:百科 来源:网络整理
导读:我有一个简单的类,当我的程序获得并失去焦点时停止并启动一个计时器,但是它给出了错误,即QObject是每个信号槽连接上的MyApp的模糊基础. 这是相关代码: class MyApp : public QApplication,public QObject{ Q_OBJECT ...} 这是我的(凌乱)Main.cpp: #include
我有一个简单的类,当我的程序获得并失去焦点时停止并启动一个计时器,但是它给出了错误,即QObject是每个信号槽连接上的MyApp的模糊基础.
这是相关代码: class MyApp : public QApplication,public QObject { Q_OBJECT ... } 这是我的(凌乱)Main.cpp: #include <QtGui/QApplication> #include "qmlapplicationviewer.h" #include <QObject> #include <QGraphicsObject> #include <QTimer> #include <QVariant> #include "timecontrol.h" #include "scorecontrol.h" #include "Retry.h" #include <QEvent> #include "myapp.h" int main(int argc,char *argv[]) { MyApp app(argc,argv); QmlApplicationViewer viewer; viewer.setOrientation(QmlApplicationViewer::ScreenOrientationLockLandscape); viewer.setMainQmlFile(QLatin1String("qml/Raker/main.qml")); viewer.showExpanded(); QObject *rootObject = viewer.rootObject(); QTimer *timmer = new QTimer; timmer->setInterval(1000); TimeControl *timcon = new TimeControl; scorecontrol *scorer = new scorecontrol; Retry *probeer = new Retry; QObject::connect(timmer,SIGNAL(timeout()),timcon,SLOT(updateTime())); QObject::connect(timcon,SIGNAL(setTime(QVariant)),rootObject,SLOT(setTime(QVariant))); QObject::connect(rootObject,SIGNAL(blockClicked(int,int)),scorer,SLOT(checkRight(int,int))); QObject::connect(scorer,SIGNAL(setScore(QVariant)),SLOT(setScore(QVariant))); QObject::connect(scorer,SIGNAL(setState(QVariant)),SLOT(setState(QVariant))); QObject::connect(rootObject,SIGNAL(start()),probeer,SLOT(Reetry())); QObject::connect(probeer,timmer,SLOT(start())); QObject::connect(probeer,SIGNAL(stop()),SLOT(stop())); QObject::connect(probeer,SIGNAL(start(int)),SLOT(randomNum(int))); QObject::connect(probeer,SIGNAL(sReset()),SLOT(reset())); QObject::connect(probeer,SIGNAL(tReset()),SLOT(reset())); QObject::connect(timcon,SIGNAL(timeOut()),SLOT(reset())); QObject::connect(timcon,SLOT(setState(QVariant))); QObject::connect(timcon,SIGNAL(changeFinal()),SLOT(changeFinal())); QObject::connect(scorer,SIGNAL(setFinal(QVariant)),SLOT(setFinal(QVariant))); QObject::connect(&app,SIGNAL(focusL()),SLOT(focusL())); QObject::connect(&app,SIGNAL(focusG()),SLOT(focusG())); return app.exec(); } MyApp.cpp中: #include "myapp.h" #include <QDebug> #include <QObject> MyApp::MyApp(int argc,char **argv): QApplication(argc,argv) { installEventFilter(this); } bool MyApp::eventFilter(QObject *object,QEvent *event) { if (event->type() == QEvent::ApplicationDeactivate) { qDebug() << "Focus lost"; focusL(); } if (event->type() == QEvent::ApplicationActivate) { qDebug() << "Focus gained"; focusG(); } return false; } 解决方法
在您当前的示例中,您已经创建了一个拆分继承方案,其中您的对象最终得到了QObject的双实例… QApplication有一个基本QObject,而实际的MyApp类有另一个.这会产生歧义,因为访问继承的QObject方法或数据成员将无法准确知道要访问哪个继承的基础对象.
现在,您的继承图如下所示(请注意MyApp对象继承的两个QObject实例): | QObject | | QObject | / | QApplication | / / | MyApp | 您应该保持继承图是线性的,而不是使用拆分继承方案,这意味着拥有一个只包含一个基类实例的派生类.所以你想要这样的东西: QObject | | QApplication | | MyApp (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |