Политика размера диалогов Qt

Я пытаюсь установить политику размера для пользовательского класса QDialog, который я создал. Идея звучит довольно просто для меня, но кажется, что мне не хватает очевидной концепции или парадигмы фреймворка Qt. Я создал класс LineDialog ниже, который содержит 5 QRadioButtons. Причина, по которой они все заключены в дополнительный уровень вложенности макета, заключается в том, что я скоро добавлю другие группы кнопок, если предположить, что смогу заставить работать одну. Я хочу, чтобы при открытии диалоговое окно имело минимальный размер, при этом все равно отображались все переключатели. Вывод, который я в настоящее время получаю, представляет собой диалоговое окно размером с весь экран компьютера с 5 переключателями, разделенными равным количеством вертикальных промежутков между ними и тоннами отступов на правой стороне.

Я пробовал звонить setSizePolicy(QSizePolicy::Minumum) на обоих line_dialog указатель на вызывающий класс и все содержимое LineDialog, как это видно по закомментированным строкам. Тем не менее, я получаю ошибки компилятора о том, что SetSizePoliy является частной функцией и не может быть вызван, как я делаю. Какой правильный способ сделать это?

(Я не прошел и правильно освободил свою кучу памяти, поэтому, пожалуйста, не обращайте на это внимания)

linedialog.cpp

#include "linedialog.h"

LineDialog::LineDialog(QWidget * parent): QDialog(parent)
{
    QGridLayout *main_layout = new QGridLayout();
    QGroupBox *line_style_group = createLineStyleGroup();
    main_layout->addWidget(line_style_group, 0, 0);
    setLayout(main_layout);
}

QGroupBox *LineDialog::createLineStyleGroup() {
    QGroupBox *line_style_box = new QGroupBox(this);
    QButtonGroup *line_style_group = new QButtonGroup(this);

    QRadioButton *solid_line = new QRadioButton("Solid line", this);
    QRadioButton *dash_line = new QRadioButton("Dash line", this);
    QRadioButton *dot_line = new QRadioButton("Dot line", this);
    QRadioButton *dash_dot_line = new QRadioButton("Dash dot line", this);
    QRadioButton *dash_dot_dot_line = new QRadioButton("Dash dot dot line", this);

    //solid_line->setSizePolicy(QSizePolicy::Minimum);
    //dash_line->setSizePolicy(QSizePolicy::Minimum);
    //dot_line->setSizePolicy(QSizePolicy::Minimum);
    //dash_dot_line->setSizePolicy(QSizePolicy::Minimum);
    //dash_dot_dot_line->setSizePolicy(QSizePolicy::Minimum);

    /** logical line style button grouping */
    line_style_group->addButton(solid_line);
    line_style_group->addButton(dash_line);
    line_style_group->addButton(dot_line);
    line_style_group->addButton(dash_dot_line);
    line_style_group->addButton(dash_dot_dot_line);

    QVBoxLayout *line_style_box_layout = new QVBoxLayout();
    line_style_box_layout->addWidget(solid_line);
    line_style_box_layout->addWidget(dash_line);
    line_style_box_layout->addWidget(dot_line);
    line_style_box_layout->addWidget(dash_dot_line);
    line_style_box_layout->addWidget(dash_dot_dot_line);

    line_style_box->setLayout(line_style_box_layout);
    return line_style_box;
}

вызывающий класс

. . .
LineDialog *line_dialog = new LineDialog(this);
line_dialog.show();
. . .

0 ответов

Другие вопросы по тегам