qt学习笔记-布局

目录

QLayout类

QStackedWidget类

QSplitter类

QDockWidget类

一、QLayout类(基本布局)

Qt提供QHBoxLayout类、QVBoxLayout类、QGridLayout类等基本布局管理。

实战应用:

 setWindowTitle("员工信息");

    //左边控件
    UserNumber=new QLabel("员工编号");
    UserNumberEdit=new QLineEdit;

    UserName=new QLabel("员工姓名:");
    UserNameEdit=new QLineEdit;

    UserSex=new QLabel("员工性别:");
    UserSexCombobox=new QComboBox;
    UserSexCombobox->addItem("男");
    UserSexCombobox->addItem("女");

    UserDepart=new QLabel("所在部门:");
    UserDepartEdit=new QTextEdit;

    UserAge=new QLabel("年龄:");
    UserAgeEdit=new QLineEdit;

    //右边控件
    RTitle=new QLabel("个人简介");
    infoEdit=new QTextEdit;
    Yesbutton=new QPushButton("确认");
    CloseButton=new QPushButton("关闭");

    //网格布局
    lLayout=new QGridLayout();

    lLayout->addWidget(UserNumber,0,0);
    lLayout->addWidget(UserNumberEdit,0,1);

    lLayout->addWidget(UserName,1,0);
    lLayout->addWidget(UserNameEdit,1,1);

    lLayout->addWidget(UserSex,2,0);
    lLayout->addWidget(UserSexCombobox,2,1);

    lLayout->addWidget(UserDepart,3,0);
    lLayout->addWidget(UserDepartEdit,3,1);

    lLayout->addWidget(UserAge,4,0);
    lLayout->addWidget(UserAgeEdit,4,1);

    buttonLayout = new QHBoxLayout;
    buttonLayout->addStretch();
    buttonLayout->addWidget(Yesbutton);
    buttonLayout->addWidget(CloseButton);

    rLayout=new QGridLayout();
    rLayout->addWidget(RTitle,0,0);
    rLayout->addWidget(infoEdit,1,0);
    rLayout->addLayout(buttonLayout,2,0);

    QGridLayout *mlayout=new QGridLayout(this);
    mlayout->addLayout(lLayout,0,0);
    mlayout->addLayout(rLayout,0,1);

左侧和右侧分别采用网格布局,将部件安排布局显示在整体的一个大的网络布局中。其中右侧的button控件,采用水平布局,且使用addStretch动态调整分配控件间距。

演示效果:

界面优化:可以调整layout,将三个layout同时放在同一个大的layout中UI效果可能会更美观。

二、QStackedWidget类(堆栈窗体)

QStackedWidget控件相当于一个窗口一样,提供一个空间专门存放一些控件。

// 创建一个QStackedWidget实例

        stackedWidget=new QStackedWidget;

        // 创建几个页面窗口部件
        page1=new QWidget;
        page2=new QWidget;
        page3=new QWidget;

        // 在页面窗口部件中添加一些内容
        label1=new QLabel("This is Page 1");
        label2=new QLabel("This is Page 2");
        label3=new QLabel("This is Page 3");


        layout1=new QVBoxLayout(this);
        layout1->addWidget(label1);
        page1->setLayout(layout1);
        qDebug()<<"page1";

        layout2=new QVBoxLayout(this);
        layout2->addWidget(label2);
        page2->setLayout(layout2);

        layout3=new QVBoxLayout(this);
        layout3->addWidget(label3);
        page3->setLayout(layout3);

        // 将页面窗口部件添加到QStackedWidget中
        stackedWidget->addWidget(page1);
        stackedWidget->addWidget(page2);
        stackedWidget->addWidget(page3);

        // 创建按钮来切换页面
        button1=new QPushButton("Page 1",this);
        button2=new QPushButton("Page 2",this);
        button3=new QPushButton("Page 3",this);

        // 连接按钮的点击事件到对应的页面
        connect(button1, SIGNAL(clicked()),this, SLOT(button1clicked()));
        connect(button2, SIGNAL(clicked()),this,SLOT(button2clicked()));
        connect(button3,SIGNAL(clicked()),this, SLOT(button3clicked()));

        // 创建一个布局,并将按钮和QStackedWidget添加到其中
        QHBoxLayout *mlayout=new QHBoxLayout(this);
        mlayout->addWidget(button1);
        mlayout->addWidget(button2);
        mlayout->addWidget(button3);
        mlayout->addWidget(stackedWidget);
}

Dialog::~Dialog()
{

}

void Dialog::button1clicked(){
    stackedWidget->setCurrentIndex(0);

    qDebug()<<"button1";
}

void Dialog::button2clicked(){
    stackedWidget->setCurrentIndex(1);
    qDebug()<<"button2";
}

void Dialog::button3clicked(){
    stackedWidget->setCurrentIndex(2);
    qDebug()<<"button3";
}

运行效果:单击按钮,会跳转到相应界面。

三、QSplitter类(窗口分割)

实例:

 //1:拆分窗口
    QSplitter *spmainwindow = new QSplitter(Qt::Horizontal,0);
    QTextEdit *texteditmain = new QTextEdit("",spmainwindow);

    //2:
    QSplitter *spRight = new QSplitter(Qt::Vertical,spmainwindow);
    QTextEdit *textediteup = new QTextEdit("中间第1部分窗口",spRight);
    QTextEdit *texteditmiddle = new QTextEdit("中间第2部分窗口",spRight);
    QTextEdit *texteditedown = new QTextEdit("中间第3部分窗口",spRight);
    QTextEdit *texteditefour = new QTextEdit("中间第4部分窗口",spRight);


    //3:
    QSplitter *spTriRight = new QSplitter(Qt::Horizontal,spmainwindow);
    QTextEdit *addtextedite = new QTextEdit("第三部分窗口",spTriRight);

    spmainwindow->setWindowTitle("Splitter类拆分窗口test");
    spmainwindow->show();

运行效果:

四、QDockWidget类(停靠窗口)

小实践:

setWindowTitle("QDockWidget类停靠窗口测试");

    QTextEdit *maintextedit = new QTextEdit(this);
    maintextedit->setAlignment(Qt::AlignCenter);
    setCentralWidget(maintextedit);

    //创建停靠窗口1
    QDockWidget *dockWiget1=new QDockWidget("停靠窗口1",this);
    dockWiget1->setFeatures(QDockWidget::DockWidgetMovable); //可移动特性的设置
    dockWiget1->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);

    QTextEdit *textedit1=new QTextEdit();
    dockWiget1->setWidget(textedit1);
    addDockWidget(Qt::LeftDockWidgetArea,dockWiget1);

    //创建停靠窗口2
    QDockWidget *dockWiget2=new QDockWidget("停靠窗口2",this);
    dockWiget2->setFeatures(QDockWidget::DockWidgetMovable|QDockWidget::DockWidgetClosable| QDockWidget::DockWidgetFloatable);
    //可移动特性  可关闭  浮动性

    QTextEdit *textedit2=new QTextEdit();
    dockWiget2->setWidget(textedit2);
    addDockWidget(Qt::RightDockWidgetArea,dockWiget2);

运行效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值