Как заставить экземпляр qtabwidget автоматически изменять размер при добавлении к нему дочерних вкладок?

Я пытаюсь автоматически изменить размер QTabWidget, чтобы он соответствовал дочерней вкладке, когда ребенок добавляется, но не смог этого сделать. Я создал форму с помощью Qt Designer и унаследовал ее, используя подход одиночного наследования следующим образом.

class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = 0);
private:
    Ui::MyForm ui;
};

У меня есть QTabWidget, и я добавляю экземпляр объекта в свой QTabWidget с помощью addTab(). Когда я отображаю QTabWidget, я замечаю, что его размер не изменился, чтобы соответствовать экземпляру MyWidget. Что мне нужно сделать, чтобы гарантировать автоматическое изменение размера экземпляра QTabWidget?


person user24560    schedule 09.05.2009    source источник


Ответы (3)


В дизайнере убедитесь, что вы добавили макет в свой виджет. Щелкните фон виджета, чтобы при применении макета он применялся ко всему виджету. Хитрость в том, что базовый (родительский) виджет, на котором построена ваша форма, нуждается в макете, а не только элементы в форме.

Сетки, как правило, довольно просты в использовании. Но иногда другие лучше. Конструктор может быть сложным в использовании, и к нему нужно время, чтобы привыкнуть. По сути, к каждому виджету должен быть применен макет. Странные вещи могут происходить, когда вы этого не делаете.

person jhufford    schedule 12.05.2009

Я считаю, что это ошибка создателя (по крайней мере, для версии 4.7.4 с открытым исходным кодом). Мое решение следующее.

Не создавайте объект QTabWidget в основном проекте.

Создайте его самостоятельно (создав Qt->Form-класс).

Затем скопируйте 3 файла (.h, ,cpp, .ui) в проект и добавьте их в проект.

Результат: он изменяет размер как размер основного окна.

person Gibbs    schedule 20.12.2011

Чтобы поместить любой виджет в его родительский виджет, вам нужно использовать определенный макет (сетка, горизонтальный, вертикальный и т. д.).

person Donotalo    schedule 09.05.2009