возможно ли иметь древовидную структуру 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*'
}
};
Я думаю ты путаешь parent
как в родительской / дочерней иерархии QObject parent и parent item
в графической сцене. Если вы хотите первое, вам нужно использовать обычный setParent
механизм.
В любом случае, эта попытка построения базового класса неверна. Замените это на это:
MyButton(int buttonId, QGraphicsItem *parent = 0) : QGraphicsWidget(parent)
Кроме того, если вы используете Qt 5, вы можете проверитьQ_NULLPTR
вместо 0
, NULL
, nullptr
и другие варианты.
Если вы хотите, чтобы графические элементы были родителями, вам нужно будет использовать QGraphicsObject
s, которые наследуют оба QGraphicsItem
а также QObject
, Они могут быть использованы для родительских целей.
Кроме того, так как QGraphicsWidget
наследуется QGraphicsObject
, это может быть непосредственно для обоих механизмов воспитания.