QGraphicsWidget как дочерний элемент QObject

возможно ли иметь древовидную структуру 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*'
}
};

1

Решение

Я думаю ты путаешь parent как в родительской / дочерней иерархии QObject parent и parent item в графической сцене. Если вы хотите первое, вам нужно использовать обычный setParent механизм.

В любом случае, эта попытка построения базового класса неверна. Замените это на это:

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

Кроме того, если вы используете Qt 5, вы можете проверитьQ_NULLPTR вместо 0, NULL, nullptr и другие варианты.

Если вы хотите, чтобы графические элементы были родителями, вам нужно будет использовать QGraphicsObjects, которые наследуют оба QGraphicsItem а также QObject, Они могут быть использованы для родительских целей.

Кроме того, так как QGraphicsWidget наследуется QGraphicsObject, это может быть непосредственно для обоих механизмов воспитания.

1

Другие решения


По вопросам рекламы [email protected]