QBoxLayout::setSizeConstraint可以固定窗口的大小,且根据内部控件所占用的位置自动调节大小

Qt:可扩展对话框的实现

1、可扩展对话框通常用于用户对界面有区分的场合,通常情况下,只出现基本界面;当有高级应用或者需要更多的信息时,通过某种方式的切换,才显示完整的窗体,切换工作通常由一个按钮来实现。

2、切换按钮的实现。整个窗体可扩展的工作都是在此按钮所连接的槽函数中完成的。

3、可扩展对话框的基本实现方法是利用函数setSizeConstraint(QLayout::setFixedSize),是对话框的尺寸保持固定。(在整个对话框的构造函数中调用)

实例

一个简单的资料填写界面。效果图如下:

 

步骤

  • **新建Qt Gui应用,项目名称为“ExtensinDlg”,基类选择“QDialog”,取消”创建界面“复选框,单击下一步,完成新建工程。工程树结构如下:
  • **
  • **打开“Dialog.h”头文件,添加如下代码:
   #define DIALOG_H
   #include <QDialog>

class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void showDetailInfo();

private:
    void createBaseInfo();
    void createDetailInfo();
    QWidget *baseWidget;
    QWidget *detailWidget;
};
 #endif // DIALOG_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 打开“Dialog.cpp”文件,添加如下代码:
#include "dialog.h"
#include <QVBoxLayout>
#include <QLabel>
#include <QLineEdit>
#include <QComboBox>
#include <QPushButton>
#include <QDialogButtonBox>
#include <QHBoxLayout>

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("Extension Dialog"));
    createBaseInfo();
    createDetailInfo();

    //QHBoxLayout *layout = new QHBoxLayout(this);    //水平布局
    QVBoxLayout *layout = new QVBoxLayout(this);    //垂直布局
    layout->addWidget(baseWidget);
    layout->addWidget(detailWidget);
    layout->setSizeConstraint(QLayout::SetFixedSize);   //设定其为固定的大小
    layout->setSpacing(10);
}

void Dialog::createBaseInfo()
{
    baseWidget = new QWidget;

    QLabel *nameLabel = new QLabel(tr("姓名:"));
    QLineEdit *nameLineEdit = new QLineEdit;

    QLabel *sexLabel = new QLabel(tr("性别:"));
    QComboBox *sexComboBox = new QComboBox;
    sexComboBox->insertItem(0,tr("男"));
    sexComboBox->insertItem(1,tr("女"));
    sexComboBox->insertItem(2,tr("不男不女"));

    QGridLayout *leftLayout = new QGridLayout;
    leftLayout->addWidget(nameLabel,0,0);
    leftLayout->addWidget(nameLineEdit,0,1);
    leftLayout->addWidget(sexLabel,1,0);
    leftLayout->addWidget(sexComboBox,1,1);

    QPushButton *okBtn = new QPushButton(tr("确定"));
    QPushButton *detailBtn = new QPushButton(tr("详细"));
    QDialogButtonBox *dlgBtnBox = new QDialogButtonBox(Qt::Vertical);
    dlgBtnBox->addButton(okBtn, QDialogButtonBox::ActionRole);
    dlgBtnBox->addButton(detailBtn, QDialogButtonBox::ActionRole);

    QVBoxLayout *mainLayout = new QVBoxLayout(baseWidget);

   // QHBoxLayout *mainLayout = new QHBoxLayout(baseWidget);
    mainLayout->addLayout(leftLayout);
    mainLayout->addWidget(dlgBtnBox);
    connect(detailBtn,SIGNAL(clicked(bool)),this,SLOT(showDetailInfo()));
}

void Dialog::createDetailInfo()
{
    detailWidget = new QWidget;
    QLabel *ageLabel = new QLabel(tr("年龄: "));
    QLineEdit *ageLineEdit = new QLineEdit;
    ageLineEdit->setText(tr("30"));

    QLabel *departmentLabel = new QLabel(tr("部门:"));
    QComboBox *departmentComboBox = new QComboBox;
    departmentComboBox->addItem(tr("高性能计算中心"));
    departmentComboBox->addItem(tr("网络管理中心"));
    departmentComboBox->addItem(tr("大数据与云计算中心"));

    QLabel *emailLabel = new QLabel(tr("Email: "));
    QLineEdit *emailLineEdit = new QLineEdit;

    QGridLayout *mainLayout = new QGridLayout(detailWidget);
    mainLayout->addWidget(ageLabel,0,0);
    mainLayout->addWidget(ageLineEdit,0,1);
    mainLayout->addWidget(departmentLabel,1,0);
    mainLayout->addWidget(departmentComboBox,1,1);
    mainLayout->addWidget(emailLabel,2,0);
    mainLayout->addWidget(emailLineEdit,2,1);

    detailWidget->hide();   //在点击“详细”按钮之前将隐藏窗体
}

void Dialog::showDetailInfo()
{

    if(detailWidget->isHidden())
    {
        detailWidget->show();
    }
    else
    {
        detailWidget->hide();
    }
}

Dialog::~Dialog()
{

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • *此时整个界面的代码就编写完了,运行效果图如下: 

注:可以通过修改控件布局方式,来修改程序的界面。

http://blog.csdn.net/rl529014/article/details/51590317

时间: 2024-10-25 06:54:28

QBoxLayout::setSizeConstraint可以固定窗口的大小,且根据内部控件所占用的位置自动调节大小的相关文章

在web浏览器窗口中编辑报表的报表控件Stimulsoft Reports.Web

Stimulsoft Reports.Web是一个报表工具,适用于Web的报表生成器控件.其设计的目的在于通过Web浏览器创建和渲染报表.您可以创建报表,显示报表,打印报表,导出报表. Stimulsoft Reports.Web将提供完整的报表创建周期,从报表模板开始到在浏览器中显示报表为止.这一过程可在web浏览器未被关闭时完成.Stimulsoft Reports.Web是第一款可以让您直接在Web中编辑报表的报表工具.在您的客户端的机器里不需要安装.Net框架.ActiveX控件或其他特

C# ——窗体和控件随着分辨率的变化自适应大小

一.说明 我们自己编写程序的界面,会遇到各种屏幕分辨 率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置和大小,当窗体改变比例时,其控件的位置和大小也按此比 例变化即可.因为窗体上控件的位置和大小是相对于自己所在的窗体的,也就是所谓的窗口坐标. 在这里我们只考虑相对于自己窗体的窗口坐标更简单,也就是成比例变化.为了多个窗体共用,我在这里创建一个类AutoSizeFormClass ,1.使用它去记录窗体和其控件的初始位置和大小,2.根据窗体变化了的大小,

【转】C# 控件的自定义拖动、改变大小方法

在用VS的窗体设计器时,我们可以发现控件都是可以拖动的,并且还可以调整大小.怎么在自己的程序中可以使用上述功能呢? 下面的方法值得借鉴! using System; using System.Windows.Forms; using System.Drawing; namespace ControlSizeChangeEx { /// <summary> /// This class implements sizing and moving functions for /// runtime

C# 控件的自定义拖动、改变大小方法

在用VS的窗体设计器时,我们可以发现控件都是可以拖动的,并且还可以调整大小.怎么在自己的程序中可以使用上述功能呢? 下面的方法值得借鉴! using System; using System.Windows.Forms; using System.Drawing; namespace ControlSizeChangeEx { /// <summary> /// This class implements sizing and moving functions for /// runtime

IOS-各控件默认尺寸和参考图标大小

UITabBar

C# 窗体控件跟随窗体大小自动调节

测试目的:如何使得窗体内的控件可以跟随窗体大小自动调节 测试环境:WIN10 ENT + VS2015 方法原理:记录初始时窗口大小.控件大小等信息.每当窗口大小变化时,计算窗口大小相对于初始时的缩放比例,然后根据缩放比例再调整控件的位置(Location).大小(Size).字体大小(Font.Size). C#主要测试代码: using System; using System.Drawing; using System.Windows.Forms; namespace TEST1111 {

对话框控件大小随窗口的大小变化而变化

我们经常会发现当我们将窗口最大化时,里面的控件并没有进行改变,接下来我就介绍一下此问题的解决办法,我们其实一般的都会把窗口的最大化按钮失效,是窗口不能进行最大化操作,但是有时候我们还是需要对窗口进行最大化操作的,下面我们可以通过添加WM_SIZE消息来解决此问题. 1 在XXDLg.h中添加 afx_msg void OnSize(UINT nType, int cx, int cy); 2 在XXDLg.h中添加 ON_WM_SIZE() 或者 ON_MESSAGE(WM_SIZE,OnSiz

简介子窗口控件(api)

子窗口控件 壹佰软件开发小组  整理编译   回忆第七章的CHECKER程序.这些程序显示了矩形网格.当您在一个矩形中按下鼠标按键时,该程序就画一个x:如果您再按一次鼠标按键,那么x就消失.虽然这个程序的CHECKER1和CHECKER2版本只使用一个主窗口,但CHECKER3版本却为每个矩形使用一个子窗口.这些矩形由一个叫做ChildProc的独立窗口消息处理程序维护. 如果有必要,无论矩形是否被选中,都可以给ChildProc增加一种向其父窗口消息处理程序(WndProc)发送消息的手段.通

如何实现控件随窗体大小的改变而自动适应其改变

在设计可供用户调整大小的窗体时,如何实现该窗体上的控件也应能正确地随窗体的改变而自动调整大小并且能重新定位?此时就要借助控件的.Anchor属性.Anchor属性定义控件的定位点位置.当控件锚定到某个窗体时,如果该窗体的大小被调整,那么该控件维持它与定位点位置之间的距离不变.例如,如果":Button"控件锚定到窗体的左.右和底边缘,那么当调整该窗体的大小时,Button控件水平调整大小,维持到该窗体左边和右边的距离不变,另外控件垂直定位其自身,以便其到窗体底边的距离始终不变,如果控件