Я пытаюсь реализовать пользовательскую иерархию виджетов:
QMainWindow
-> QFrame
-> MyWidget
-> QFrame
-> MySubWidget
Вот как выглядит класс MyWidget:
class MyWidget : public QWidget {
Q_OBJECT
public:
MyWidget(QWidget *parent = 0, ...);
...
public slots:
void SlotFunction(int i);
...
private:
MySubWidget *sub_w;
QFrame *sub_frame;
...
}
Если я попытаюсь создать MySubWidget во время конструктора MyWidget, то все элементы MySubWidget будут отображаться так, как задумано:
MyWidget::MyWidget (...) : QWidget(parent) {
...
sub_frame = new QFrame(this);
...
sub_w = new MySubWidget(sub_frame); // commented out on a runtime test
}
Но если я попытаюсь добавить подвиджет во время выполнения, sub_frame останется пустым. То есть Сигнальная реакция:
void MyWidget::SlotFunction(int i) {
sub_w = new MySubWidget(sub_frame); // update, repaint, show and hide methods aren't helphul
}
Я знаю, что это старый вопрос, но у меня была очень похожая проблема, и оказалось, что это отсутствие вызова QWidget :: show (). Возможно, это была и ваша проблема?
Мой вопрос здесь: Динамически добавлять экземпляр, унаследованный от QWidget
Приветствия.
Вы достигаете своей функции?
В верхней части вашей функции, прежде чем сделать new
экземпляр MySubWidget
положил:
qDebug() << Q_FUNC_INFO;
Правильно ли подключен слот?
Qt сообщит вам, если он не может подключить слот, используя предупреждение о времени выполнения. Посмотрите на выходные данные отладки, которые отображаются в Qt Creator, и там может быть указана причина, по которой слот так и не был достигнут.
Является subframe
видно?
Если родитель вашего объекта не виден, то показ или скрытие дочернего объекта повлияет на него только тогда, когда будет показан родитель.
Надеюсь, это поможет. Удачи.