Qt Desktop на Mac: определение размера QFormLayout с помощью подгрупп - PullRequest
0 голосов
/ 20 мая 2019

TL; DR: у меня рост / сжатие, возможно, с использованием встроенных форм внутри главного окна. Я не уверен, что попробовать дальше.

Хорошо, у меня есть еще одна проблема с проклейкой.

Это пример приложения о том, что я пытаюсь сделать:

Sample App

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

В простейшей форме с макетом виджета, подобным следующему:

Main Window Widget Layout

Я установил макет центрального виджета на «Горизонтальный», а внутренний виджет на «FormLayout», а затем установил правила расширения внутреннего виджета для расширения любых расширяемых полей. Когда я изменяю размер окна, простое редактирование строки расширяется и сжимается по желанию.

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

V1Form Layout

Мой триггерный код делает это:

currentCenter = ui->innerWidget; // In the constructor
currentCenter->hide();

if (v1Form == nullptr) {
    v1Form = new V1Form(ui->centralWidget);
}
v1Form->show();
currentCenter = v1Form;

Я пробовал различные заказы на это, и я пытался использовать setCentralWidget (). Во всех случаях новая центральная область остается фиксированного размера, даже если исходная область расширяется и разрушается.

Что работает: я могу легко изменить внутреннее содержание для разных форм. Это отлично работает. (Потребовалось время, чтобы понять это.)

или я могу создавать простые всплывающие формы, которые правильно растут и уменьшаются.

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

Я не уверен, что еще попробовать.

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Я нашел решение, которое делает это так, как я начал.Мне пришлось добавить одну строку кода:

void MainWindow::switchForm(QWidget *widget) {
    if (centralForm != widget) {
        if (centralForm != nullptr) {
            centralForm->hide();
            centralForm = nullptr;
        }
        if (widget != nullptr) {
            centralForm = widget;
            centralForm->show();
            ui->centralwidget->layout()->addWidget(centralForm);
        }
    }
}

void MainWindow::on_actionSetup_triggered()
{
    if (setupForm == nullptr) {
        setupForm = new SetupForm(ui->centralwidget);
    }
    switchForm(setupForm);
}

Отсутствующая строка - добавление моей новой формы в макет:

ui->centralwidget->layout()->addWidget(centralForm);
0 голосов
/ 21 мая 2019

Может быть, я должен просто использовать виджет вкладки, но я хотел сделать это таким образом.

Вам определенно следует использовать QTabWidget в качестве центрального виджета. Он разработан специально для вашего случая использования и значительно упростит ваш код.

Мой триггерный код делает это:

currentCenter = ui->innerWidget; // In the constructor
currentCenter->hide();

if (v1Form == nullptr) {
    v1Form = new V1Form(ui->centralWidget);
}
v1Form->show();
currentCenter = v1Form;

С помощью QTabWidget ваш код триггера может быть упрощен до:

ui->innerTabWidget->setIndex(1).

Вам не нужно динамически создавать V1Form. Просто используйте Qt Designer для создания нескольких страниц в вашем QTabWidget и внедрите все ваши виджеты подпанелей в пределах вашего MainWindow.ui.

(Тем не менее, если вы хотите реализовать каждую подпанель в отдельном * .ui-файле, вы все равно можете продвигать каждой страницы вашего QTabWidget в свой пользовательский виджет.)


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

Для устранения исходных симптомов: ваши виджеты не растут / не уменьшаются, потому что вы не поместили их в макет, который является частью вашего основного окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...