【问题标题】:QGraphicsWidget as a child of QObjectQGraphicsWidget 作为 QObject 的子级
【发布时间】:2015-02-24 15:38:27
【问题描述】:

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

【问题讨论】:

    标签: c++ qt qtgui qgraphicsitem qgraphicswidget


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 不,我只是希望在标记您的答案之前有一些解决方法。但也许你是对的,没有办法建立这样的层次结构
    • @DensiTensy:答案中所写的 setParent。 :)
    猜你喜欢
    • 2011-03-17
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-09
    相关资源
    最近更新 更多