由于QObject,我对QT中的多重遗传有问题。我知道很多人都有同样的问题,但我不知道该如何解决。
class NavigatableItem : public QObject
{
Q_OBJECT
signals:
void deselected();
void selected();
void activated();
};
class Button : public NavigatableItem, public QToolButton
{
Q_OBJECT
...
}
class MainMenuOption : public Button
{
Q_OBJECT
...
}
当我这么做的时候
MainMenuOption* messages = new MainMenuOption();
connect(messages, SIGNAL(selected()), SLOT(onMenuOptionSelected()))
我会得到错误:
QObject是MainMenuOption的一个模棱两可的基
我让NavigatableItem离开QObject的原因是因为信号。有办法这样做吗?
编辑:
将虚拟添加到每个继承声明中,仍然会给出相同的错误:
class NavigatableItem : public virtual QObject
class Button : public virtual NavigatableItem, public virtual QToolButton
class MainMenuOption : public virtual Button
即使在“清除所有”、“运行qmake”和“构建所有”之后也是如此。
发布于 2011-03-23 12:48:08
它需要更多的代码,但我过去所做的是将其中一个(在本例中是您的NavigatableItem
)变成一个纯虚拟类,即接口。而不是使用“信号”宏,使它们成为纯粹的虚拟保护函数。然后从QObject派生类以及接口继承乘法,并实现这些方法。
我知道这有点有争议,但是不惜一切代价避免多重实现继承确实解决了许多问题和混乱。谷歌C++风格指南建议这样做,我认为这是个很好的建议。
class NavigatableItemInterface
{
// Don't forget the virtual destructor!
protected:
virtual void deselected() = 0;
virtual void selected() = 0;
virtual void activated() = 0;
};
class Button : public NavigatableItemInterface, public QToolButton
{
Q_OBJECT
...
signals:
virtual void deselected();
...
}
https://stackoverflow.com/questions/5403810
复制相似问题