1

这是否可能具有 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*'
    }
};
4

1 回答 1

1

我认为您parent在 QObject 父/子层次结构父级和parent item图形场景中感到困惑。如果你想要前者,你确实需要使用通常的setParent机制。

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

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

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

如果您希望图形项成为父项,则需要使用QGraphicsObject继承QGraphicsItem和的 s QObject。它们可用于育儿目的。

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

于 2014-12-27T23:04:11.033 回答