2017-02-08 2 views
0

Я пытаюсь получить некоторые атрибуты родительского виджета: SamplerModule от его детей: InstrumentSelector.Вызвать родительский метод QtWidget от дочернего

Из конструктора InstrumentSelector я запускаю parent->metaObject()->className(), который дает мне правильное имя (SamplerModule). Поэтому я уверен, что я нахожусь в нужном месте, чтобы вызвать один из моих открытых методов, например getT(), определенный как открытый метод в моем SamplerModule заголовке и файле cpp.

Но, когда я называю эту функцию, я получаю эту ошибку:

\app\widgets\instrumentselector.cpp:23: erreur : 'class QWidget' has no member named 'getT' msgBox.setText(parent->getT());

Так что я думаю, что это C++ и Qt основам, но я все еще учусь, что.

Есть ли у кого-то идеи?

Благодаря

ответ

1

, не видя код, это трудно сказать наверняка, но мне кажется, что вы определили «родитель», как «QWidget *», так что компилятор не имеет ни малейшего представления, что это на самом деле базовый указатель на SamplerModule. Вам нужно либо бросить «родительский» указатель SamplerModule, либо объявить его таким образом, чтобы начать с него. И да, это чистый C++; это не связано с Qt.

+0

Спасибо! Так как мой код довольно длинный, я постараюсь сделать это коротким. Подписи Selector: 'InstrumentSelector :: InstrumentSelector (QWidget * parent): QPushButton (parent)'. У меня 36 из этих кнопок в файле 'SamplerModule'UI. И я пытаюсь запустить 'parent-> getT() в моем конструкторе кнопок. Так что да, я чувствую, что мне нужно дать больше информации для экземпляров InstrumentSelector, но я действительно не понимаю, как это сделать. :/ –

+1

Итак, вам нужно: «SamplerModule * module = dynamic_cast (parent);" а затем используйте «module-> getT()». Динамический бросок не сработает и вернет нулевой указатель, если родительский элемент не является SamplerModule. Вы также захотите прочитать на базовых и производных классах и как использовать указатели для каждого. Это важная концепция и без хорошего понимания, вы будете очень расстроены. :) – goug

+0

Большое спасибо! Но в этом случае 'module' будет« новым экземпляром »для« SamplerModule »? Не тот, где «InstrumentSelector» создан правильно? Так что, если мне нужно получить значение, которое установлено в этом конкретном экземпляре 'SamplerModule', если оно не может получиться таким образом? –

Смежные вопросы