C++ Qt对话框大小策略

C++ Qt对话框大小策略,c++,qt,qdialog,qsizepolicy,C++,Qt,Qdialog,Qsizepolicy,我正在尝试为我创建的自定义QDialog类设置大小策略。这个想法听起来很简单,但似乎我缺少了一个明显的Qt框架概念或范例。我在下面创建了一个LineDialog类,它包含5个QRADIOButton。它们都被包装在一个额外的布局嵌套层中的原因是我将很快添加其他组的按钮,假设我可以得到一个工作。我希望对话框在打开时保持最小大小,同时仍显示所有单选按钮。我目前收到的输出是一个对话框,大小相当于整个电脑屏幕,有5个单选按钮,中间有相等的垂直空间,右侧有大量的填充 我已经尝试在调用类中的line_对话框

我正在尝试为我创建的自定义QDialog类设置大小策略。这个想法听起来很简单,但似乎我缺少了一个明显的Qt框架概念或范例。我在下面创建了一个LineDialog类,它包含5个QRADIOButton。它们都被包装在一个额外的布局嵌套层中的原因是我将很快添加其他组的按钮,假设我可以得到一个工作。我希望对话框在打开时保持最小大小,同时仍显示所有单选按钮。我目前收到的输出是一个对话框,大小相当于整个电脑屏幕,有5个单选按钮,中间有相等的垂直空间,右侧有大量的填充

我已经尝试在调用类中的
line_对话框
指针上调用
setSizePolicy(QSizePolicy::Minumum)
,以及可以通过注释掉的行看到的LineDialog的所有内容。然而,我得到了关于setSizePolicy如何是一个私有函数的编译器错误,并且不能像我现在这样调用它。正确的方法是什么

(我还没有检查并正确释放我的堆内存,所以请忽略这一点)

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();
. . .

我尝试使用您的代码,对话框以最小可能的大小打开。不知道为什么在你的情况下它会全屏显示。可能您可以在另一个项目中使用相同的代码,看看会发生什么。您需要将两个参数传递给QWidget::setSizePolicy,一个用于水平,一个用于垂直。Frank Osterfeld是正确的
setSizePolicy
需要一个
QSizePolicy
对象,或者两个
QSizePolicy::Policy
枚举。您通过了一个
QSizePolicy::Policy
enum。哇,我一定是看错了文档。谢谢你的帮助。