【发布时间】:2012-01-24 14:32:39
【问题描述】:
我正在尝试在 C++/Qt 的类中使用混合来提供一大堆具有通用界面的小部件。接口是这样定义的,如果它被定义为其他小部件类的基类,那么小部件本身就会有这些信号:
class SignalInterface: public QObject {
Q_OBJECT
public:
SignalInterface();
virtual ~SignalInterface();
signals:
void iconChanged(QIcon);
void titleChanged(QString);
}
class Widget1: public SignalInterface, QWidget{
public:
Widget1()
virtual ~Widget1()
// The Widget Should Inherit the signals
}
查看类层次结构,问题变得很明显,我偶然发现了多重继承中可怕的菱形,其中Widget1 继承自QWidget 和SignalInterface,两者都继承自QObject。这会导致任何问题吗?
我们知道,如果QObject 类是纯虚拟的(事实并非如此),这个问题就可以轻松解决。
一个可能的解决方案是:
class Interface: public QWidget {
Q_OBJECT
signals:
void IconChanged(QIcon);
void titleChanged(QString);
}
class Widget1: public Interface {
}
这里的问题是我已经有很多从 QWidget 继承的代码,并且很难破解它。还有其他方法吗?
【问题讨论】:
-
我遇到了这个问题,只是添加了一个信号发射器作为基接口的成员,而不是它的基类。
标签: c++ qt user-interface