0

我正在尝试在我创建的自定义 QDialog 类上设置大小策略。这个想法对我来说听起来很简单,但似乎我缺少一个明显的 Qt 框架概念或范式。我在下面创建了一个 LineDialog 类,其中包含 5 个 QRadioButtons。它们都包裹在一层额外的布局嵌套中的原因是我将很快添加其他按钮组,假设我可以让一个工作。我想要的是对话框在打开时处于最小尺寸,同时仍显示所有单选按钮。我目前收到的输出是一个对话框,其大小与整个计算机屏幕一样大,其中包含 5 个单选按钮,它们之间由等量的垂直空间隔开,右侧还有大量的填充。

我尝试调用调用类中setSizePolicy(QSizePolicy::Minumum)line_dialog指针和 LineDialog 的所有内容,如注释掉的行所示。但是,我收到关于 SetSizePoliy 如何是私有函数的编译器错误,并且不能像我正在做的那样被调用。这样做的正确方法是什么?

(我还没有完成并正确释放我的堆内存,所以请忽略它)

线对话框.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();
. . .
4

0 回答 0