Компоновка панели инструментов с помощью Qt Designer

Я использую Qt Designer для разработки .ui файлов и их компиляции в моем VS-проекте. У нас есть класс Toolbar, производный от QToolbar.

Инициализация класса выглядит так.

MyToolBar::ToolBar(QWidget* qWidgetParent) :
    ToolBar(qWidgetParent),
    mUiToolBar(new Ui::MyToolBar())
    {
        mUiToolBar->setupUi(this);
        //...
     }

Все работает нормально для фиксированных позиций и размеров. Но если я начинаю использовать макет для автоматического форматирования, все ломается. В этом случае все находится в верхнем левом положении.

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

редактировать: я скопировал код из своего проекта. В этом MyToolBar является производным от ToolBar, класса для управления той же функциональностью. Панель инструментов является производной от QToolBar.


person norca    schedule 04.02.2013    source источник
comment
Можете ли вы показать, как вы добавляете виджеты в MyToolBar? Я предполагаю, что MyToolbar унаследовано от QToolBar, а не от Toolbar?   -  person Nemanja Boric    schedule 04.02.2013
comment
Это была ошибка копирования кода. MyToolBar наследуется от ToolBar от QToolBar. Я редактирую свой пост.   -  person norca    schedule 04.02.2013


Ответы (2)


Я не думаю, что панель инструментов предназначена для макета. Чего вы пытаетесь добиться этим?

Если вы видите в верхнем левом положении все, что должно быть в макете, это признак того, что либо эти дочерние виджеты не были добавлены в макет (используя QLayout::addWidget(...)), либо что макет не был добавлен в родительский виджет (ваша панель инструментов, используя QWidget::setLayout(...)).

Кроме того, вы, вероятно, имели в виду QToolBar(qWidgetParent), вместо ToolBar(qWidgetParent),.

person PrisonMonkeys    schedule 04.02.2013
comment
Я думаю, что лучше всего удалить макет. Я не могу найти хорошую зависимость виджета ‹-› Layout. - person norca; 04.02.2013
comment
@norca Затем добавьте виджеты на панель инструментов с помощью функции QToolBar::addWidget(...). Но обычно QToolBar должен иметь только QActions, которые вы можете добавить с помощью QToolBar::addAction(...). - person PrisonMonkeys; 04.02.2013
comment
На моей панели инструментов есть кнопки и флажки, мы стремились сделать все масштабируемым с помощью макета. - person norca; 05.02.2013

Вы забыли вызвать QToolBar::addWidget(), но вы устанавливаете родителя виджетов для виджета QToolBar.

Это создаст все виджеты в позиции (0,0) (относительно родителя), но не будет располагать их так, как вы ожидаете.

person Nemanja Boric    schedule 04.02.2013