Добавление собственного QWidget во время выполнения

Я пытаюсь реализовать пользовательскую иерархию виджетов:
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
}

1

Решение

Я знаю, что это старый вопрос, но у меня была очень похожая проблема, и оказалось, что это отсутствие вызова QWidget :: show (). Возможно, это была и ваша проблема?

Мой вопрос здесь: Динамически добавлять экземпляр, унаследованный от QWidget

Приветствия.

1

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

Вы достигаете своей функции?

В верхней части вашей функции, прежде чем сделать new экземпляр MySubWidget положил:

qDebug() << Q_FUNC_INFO;

Правильно ли подключен слот?

Qt сообщит вам, если он не может подключить слот, используя предупреждение о времени выполнения. Посмотрите на выходные данные отладки, которые отображаются в Qt Creator, и там может быть указана причина, по которой слот так и не был достигнут.

Является subframe видно?

Если родитель вашего объекта не виден, то показ или скрытие дочернего объекта повлияет на него только тогда, когда будет показан родитель.

Надеюсь, это поможет. Удачи.

0

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