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

parentQObjectの親子階層の親とparent itemグラフィックスシーンのように混乱していると思います。前者が必要な場合は、通常のsetParentメカニズムを使用する必要があります。

いずれにせよ、その基本クラスの構築の試みは間違っています。これを次のように置き換えます。

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

さらに、Qt 5 を使用している場合は、 、、およびその他のバリアントのQ_NULLPTR代わりにチェックアウトすることをお勧めします。0NULLnullptr

グラフィック アイテムを親にしたい場合は、 と の両方を継承する を使用する必要がありQGraphicsObjectます。子育ての両方の目的で使用できます。QGraphicsItemQObject

また、QGraphicsWidgetinheritsQGraphicsObjectであるため、両方のペアレンティング メカニズムに直接適用できます。

于 2014-12-27T23:04:11.033 に答える