QT学习笔记10(布局管理类2)

1、代码实现分割窗口类QSplitter

应用举例:将一个窗口分割成三个子窗口组成,各个子窗口之间的大小可随意拖拽改变。

新建QMainWindow窗口,取消创建界面,在main.cpp中编写以下代码

#include "mainwindow.h"
#include <QApplication>
#include<Qsplitter>
#include<QTextEdit>
#include <QTextCodec>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QFont font("ZYSong18030",12); //指定显示字体
    a.setFont(font);
    //主分割窗口
    QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);	//(a) 水平分割窗口
    QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"), splitterMain);//(b) 新建QTextEdit类对象并将其插入主分割窗口
    textLeft->setAlignment(Qt::AlignCenter);					//(c)  设置textLeft中文字的对齐方式为文字居中
    //右部分分割窗口												//(d)
    QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);//右分割窗口,设定此分割窗口为垂直分割窗口,并以主分割窗口为父窗口
    splitterRight->setOpaqueResize(false);						//(e) 设定分割窗口的分割条在拖拽是是否为实时更新显示,true时实时显示
    QTextEdit *textUp =new QTextEdit(QObject::tr("Top Widget"), splitterRight);
    textUp->setAlignment(Qt::AlignCenter);
    QTextEdit *textBottom =new QTextEdit(QObject::tr("Bottom Widget"), splitterRight);
    textBottom->setAlignment(Qt::AlignCenter);
    splitterMain->setStretchFactor(1,1);//(f) 用于设定可伸缩控件。第一个参数指定设置控件的序号;第二个参数大于表示此控件可伸缩  对话窗口改变时左侧窗口随界面大小伸缩
    splitterMain->setWindowTitle(QObject::tr("Splitter"));
    splitterMain->show();

    //MainWindow w;
    //w.show();

    return a.exec();
}

实现效果如下:

2、停靠窗口QDockWidget类

操作流程:

  • 创建一个QDockWidget对象的停靠窗口
  • 设置此停靠窗口的属性
  • 新建一个要插入停靠窗体的控件
  • 将控件插入停靠窗体
  • 使用addDockWidget()方法在MainWidget中加入此停靠窗体

应用举例:一个窗口中创建三个停靠子窗口,窗口1只可在主窗口的左边和右边停靠;窗口2只可在浮动和右部停靠两种状态间切换,并且不可移动;窗口3可实现停靠窗口的各种工作状态。

按照1的方法新建一个工程,在函数的构造函数中编写以下代码

dockwindows.h文件不做修改

#include "dockwindows.h"
#include<QTextEdit>
#include<QDockWidget>
DockWindows::DockWindows(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("DockWindows"));	//设置主窗口的标题栏文字
    QTextEdit *te=new QTextEdit(this);	//定义一个QTextEdit对象作为主窗口
    te->setText(tr("Main Window"));
    te->setAlignment(Qt::AlignCenter);
    setCentralWidget(te);          		//将此编辑框设为主窗口的中央窗体
    //停靠窗口1
    QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);
    //可移动
    dock->setFeatures(QDockWidget::DockWidgetMovable);	//(a)设置停靠窗口的特性
    dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);//(b)设定停靠窗口可停靠的区域
    QTextEdit *te1 =new QTextEdit();
    te1->setText(tr("Window1,The dock widget can be moved between docks by the user" ""));
    dock->setWidget(te1);
    addDockWidget(Qt::RightDockWidgetArea,dock);
    //停靠窗口2
    dock=new QDockWidget(tr("DockWindow2"),this);
    dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); 										//可关闭、可浮动
    QTextEdit *te2 =new QTextEdit();
    te2->setText(tr("Window2,The dock widget can be detached from the main window,""and floated as an independent window, and can be closed"));
    dock->setWidget(te2);
    addDockWidget(Qt::RightDockWidgetArea,dock);
    //停靠窗口3
    dock=new QDockWidget(tr("DockWindow3"),this);
    dock->setFeatures(QDockWidget::AllDockWidgetFeatures);   //全部特性
    QTextEdit *te3 =new QTextEdit();
    te3->setText(tr("Window3,The dock widget can be closed, moved, and floated"));
    dock->setWidget(te3);
    addDockWidget(Qt::RightDockWidgetArea,dock);
}

实现效果:

3、堆叠窗口QStackedWidget类

 应用举例:当选择左侧列表中不同的选项是,右侧显示所选的不同窗体。

创建一个类位QDialog的工程,取消“创建界面”

(1)头文件.h编写

#ifndef STACKDLG_H
#define STACKDLG_H

#include <QDialog>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
class StackDlg : public QDialog
{
    Q_OBJECT

public:
    StackDlg(QWidget *parent = 0);
    ~StackDlg();
private:
    QListWidget *list;
    QStackedWidget *stack;
    QLabel *label1;
    QLabel *label2;
    QLabel *label3;
};

#endif // STACKDLG_H

(2).cpp文件编写

#include "stackdlg.h"
#include <QHBoxLayout>
StackDlg::StackDlg(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("StackedWidget"));
    list =new QListWidget(this);	//新建一个QListWidget控件对象
    //在新建的QListWidget控件中插入三个条目,作为选择项
    list->insertItem(0,tr("Window1"));
    list->insertItem(1,tr("Window2"));
    list->insertItem(2,tr("Window3"));
    //创建三个QLabel标签控件对象,作为堆栈窗口需要显示的三层窗体
    label1 =new QLabel(tr("WindowTest1"));
    label2 =new QLabel(tr("WindowTest2"));
    label3 =new QLabel(tr("WindowTest3"));
    stack =new QStackedWidget(this);
    //新建一个QStackedWidget堆栈窗体对象
    //将创建的三个QLabel标签控件依次插入堆栈窗体中
    stack->addWidget(label1);
    stack->addWidget(label2);
    stack->addWidget(label3);
    QHBoxLayout *mainLayout =new QHBoxLayout(this);
                                    //对整个对话框进行布局
    mainLayout->setMargin(5);		//设定对话框(或窗体)的边距为5
    mainLayout->setSpacing(5);		//设定各个控件之间的间距为5
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack,0,Qt::AlignHCenter);
    mainLayout->setStretchFactor(list,1);//(a) 设定可伸缩控件  第1个参数用于指定设置的控件;第二个参数大于0则此控件可伸缩
    mainLayout->setStretchFactor(stack,3);
    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));//(b)
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值