是否有可能具有QObjects和(例如)QGraphicsWidgets的树状结构?我的意思是,我无法编写像这样的初始化列表:

class MyButton : public QGraphicsWidget
{
    Q_OBJECT
public:
    MyButton(int buttonId, QObject *parent = 0) : QObject(parent)
    {
    }

然后,像
myButton = new MyButton(id, myObject);

我应该做.setParent还是什么?

更新:请参阅实际作业:
class myObject : public QObject
{
    Q_OBJECT
public:
    MyObject(QObject *parent = 0) : QObject(parent) {
        }

    MyButton *myButton;

    void showButton(){
        myButton = new MyButton(id, this); //no matching function for call to 'MyButton::MyButton(MyObject* const)'
//note:   no known conversion for argument from 'MyObject* const' to 'QGraphicsObject*'
    }
};

最佳答案

我认为您像在QObject父/子层次结构父级和parent中混淆了parent item一样。如果要使用前者,则需要使用通常的setParent机制。

无论哪种方式,基类构造尝试都是错误的。替换为:

MyButton(int buttonId, QGraphicsItem *parent = 0) : QGraphicsWidget(parent)

此外,如果您使用Qt 5,则可能希望 check out Q_NULLPTR而不是0NULLnullptr和其他变体。

如果您希望图形项成为父项,那么您将需要使用同时继承QGraphicsObjectQGraphicsItemQObject。它们可用于两个育儿目的。

另外,由于QGraphicsWidget继承了QGraphicsObject,因此可以直接用于两种育儿机制。

关于c++ - QGraphicsWidget作为QObject的子级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27672137/

10-11 21:41