依法编程Autocodes
欢迎各位小伙伴关注”依法编程“,一起交流
目录
一、分割窗口QSplitter类 2
(一)例程功能 2
(二)项目设计 2
(三)程序解释 3
二、停靠窗口QDockWidget类 4
(一)例程功能 5
(二)项目设计 5
(三)程序解释 7
三、停靠窗口QDockWidget类 8
(一)例程功能 8
(二)项目设计 9
(三)程序解释 11
该文持续修正中,有错误请指出,不胜感激!
转载请注明出处!
微信公众号:依法编程
原作者保留使用权利,未经许可严禁用于个人商业用途!
一、分割窗口QSplitter类
(一)例程功能
一个简单的分割窗口功能,整个对话框由三个窗口组成,各个窗口之间的大小可随意拖曳改变,效果如图所示。
(二)项目设计
新建Qt Widgets Application,项目名称为“Splitter”,基类选择“QMainWindow”,取消“创建界面”复选框的选中状态。
main.cpp程序:
#include"mainwindow.h"
#include
#include
#include
#include
intmain(intargc,char*argv[])
{
QApplicationa(argc,argv);
//指定显示字体
QFontfont("ZYSong18030",12);
a.setFont(font);
//主分割窗口
QSplitter*splittermain=newQSplitter(Qt::Horizontal,);
QTextEdit*textLeft=newQTextEdit("LeftWidget",splittermain);
textLeft->setAlignment(Qt::AlignCenter);
//右部分分割窗口
QSplitter*splitterRight=newQSplitter(Qt::Vertical,splittermain);
splitterRight->setOpaqueResize(true);
QTextEdit*textUp=newQTextEdit("BottomWidget",splitterRight);
textUp->setAlignment(Qt::AlignCenter);
QTextEdit*textBottom=newQTextEdit("BottomWidget",splitterRight);
textBottom->setAlignment(Qt::AlignCenter);
splittermain->setStretchFactor(1,1);
splittermain->setWindowTitle("Splitter");
splittermain->show();
returna.exec();
}
(三)程序解释
1、QSplitter *splitterMain = new QSplitter(Qt::Horizontal, 0);
新建一个QSplitter类对象,作为主分割窗口,并且设定此窗口为水平分割窗口。
2、QTextEdit*textLeft = new QTextEdit("Left Widget",splitterMain);
新建一个QTextEdit类对象,并将其插入主分割窗口。
3、textLeft->setAlignment(Qt::AlignCenter);
设置TextEdit对象中文本的对齐方式。常用的对齐方式:
Qt::AlignLeft 左对齐
Qt::AlignRight 右对齐
Qt::AlignCenter 文字居中
Qt::AlignHCenter 水平居中
Qt::AlignVCenter 垂直居中
Qt::AlignUp 文字与顶端对齐
Qt::AlignBottom 文字与底端对齐
4、QSplitter *splitterRight = new QSplitter(Qt::Vertical, splitterMain);
新建一个QSplitter类对象,作为右分割窗口,并以主分割窗口作为父窗口。设定分割窗口为垂直分割窗口。
5、splitterRight->setOpaqueResize(true);
设定在拖拽分割条时,是否实时更新。若为true,则实时更新;否则在拖拽时显示一条虚线。
6、splitterMain->setStretchFactor(1,1);
此函数用于设定:控件是否可伸缩。第一个参数用于指定控件的序号,控件序号按插入的先后次序从0起依次编号,第二个函数大于0时,表示控件可伸缩,小于0时,表示控件不可伸缩。
二、停靠窗口QDockWidget类
停靠窗口QDockWidget类也是应用程序中经常用到的,设置停靠窗口的一般流程如下。
(1)创建一个QDockWidget对象的停靠窗体。
(2)设置此停靠窗体的属性,通常调用setFeatures()及setAllowedAreas()两种方法。
(3)新建一个要插入停靠窗体的控件,常用的有QListWidget和QTextEdit。
(4)将控件插入停靠窗体,调用QDockWidget的setWidget()方法。
(5)使用addDockWidget()方法在MainWindow中加入此停靠窗体。
(一)例程功能
停靠窗口QDockWidget类的使用:窗口1只可在主窗口的左边和右边停靠;窗口2只可在浮动和右部停靠两种状态间切换,并且不可移动;窗口3可实现停靠窗口的各种状态。
(二)项目设计
新建Qt Widgets Application,项目名称为“DockWindows”,基类选择“QMainWindow”,类名命名为“DockWindows”,取消“创建界面”复选框的选中状态。
mainwindow.cpp文件
#include"mainwindow.h"
#include
#include
MainWindow::MainWindow(QWidget*parent)
:QMainWindow(parent)
{
//设置主窗口的标题栏文字
setWindowTitle("DockWindows");
//定义一个QTextEdit对象作为主窗口
QTextEdit*te=newQTextEdit(this);
te->setText("MainWindow");
//设置TextEdit对象中文本的对齐方式
te->setAlignment(Qt::AlignCenter);
//将此编辑框设为主窗口的中央窗体
setCentralWidget(te);
//停靠窗口1
QDockWidget*dock=newQDockWidget("DockWindow1",this);
//设置停靠窗体的特性,可移动
dock->setFeatures(QDockWidget::DockWidgetMovable);
//设置停靠窗体可停靠的区域,只可以在左右两边停靠,上下悬浮均不可
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
//新建一个要插入停靠窗体的控件
QTextEdit*te1=newQTextEdit();
te1->setText("Window1,Thedockwidgetcanbemovedbetweendocksbytheuser");
//将控件插入停靠窗体
dock->setWidget(te1);
//在MainWindow中加入此停靠窗体
addDockWidget(Qt::RightDockWidgetArea,dock);
//停靠窗口2
dock=newQDockWidget("DockWindow2",this);
//可关闭,可浮动
dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);
//设置停靠窗体可停靠的区域,只可以在右边停靠
dock->setAllowedAreas(Qt::RightDockWidgetArea);
QTextEdit*te2=newQTextEdit();
te2->setText("Window2,Thedockwidgetcanbedetachedfromthemainwindow,""andfloatedasanindependentwindow,andcanbeclosed");
dock->setWidget(te2);
addDockWidget(Qt::RightDockWidgetArea,dock);
//停靠窗口3
dock=newQDockWidget("DockWindow3",this);
//全部特征
dock->setFeatures(QDockWidget::AllDockWidgetFeatures);
QTextEdit*te3=newQTextEdit();
te3->setText("Window3,Thedockwidgetcanbeclosed,moved,andfloated");
dock->setWidget(te3);
addDockWidget(Qt::RightDockWidgetArea,dock);
}
MainWindow::~MainWindow()
{
}
(三)程序解释
此处需要重点介绍的是设置停靠窗体状态的方法:
setAllowedAreas()和 setFeatures()。
1、其中,setAllowedAreas()方法设置停靠窗体可停靠的区域,原型如下:
voidsetAllowedAreas(Qt::DockWidgetAreasareas)
其中参数Qt::DockWidgetAreas指定了停靠窗体可停靠的区域,包括以下几种:
Qt::LeftDockWidgetArea//左侧停靠
Qt::RightDockWidgetArea//右侧停靠
Qt::TopDockWidgetArea//顶端停靠
Qt::BottomDockWidgetArea//底部停靠
Qt::AllDockWidgetAreas//任意(以上四个)部位停靠
Qt::NoDockWidgetArea//只可停靠在插入处
2、setFeatures()方法设置停靠窗体的特性,原型如下:
voidsetFeatures(DockWidgetFeaturesfeatures)
参数QDockWidget::DockWidgetFeatures指定停靠窗体的特性,包括以下几种:
QDockWidget::DockWidgetClosable//停靠窗可关闭
QDockWidget::DockWidgetMovable//停靠窗可移动
QDockWidget::DockWidgetFloatable//停靠窗可浮动
QDockWidget::AllDockWidgetFeatures//拥有停靠窗的所有特性
QDockWidget::NoDockWidgetFeatures//停靠窗不可移动、不可关闭、不可浮动
三、停靠窗口QDockWidget类
QStackedWidget继承自QFrame。
QStackedWidget类提供了多页面切换的布局,一次只能看到一个界面。
QStackedWidget可用于创建类似于QTabWidget提供的用户界面。
(一)例程功能
堆栈窗体QStackedWidget类的使用,当选择左侧列表框中不同的选项时,右侧显示所选的不同的窗体。在此使用列表框QListWidget,效果如图。
(二)项目设计
新建Qt Widgets Application,项目名称为“StackedWidget”,基类选择“QDialog”,类名命名为“StackDlg”,取消“创建界面”复选框的选中状态。
1、stackdlg.h文件
#ifndefSTACKDLG_H
#defineSTACKDLG_H
#include
#include
#include
#include
classStackDlg:publicQDialog
{
Q_OBJECT
public:
StackDlg(QWidget*parent=);
~StackDlg();
private:
QListWidget*list;
QStackedWidget*stack;
QLabel*label1;
QLabel*label2;
QLabel*label3;
};
#endif//STACKDLG_H
2、stackdlg.cpp文件
#include"stackdlg.h"
#include
StackDlg::StackDlg(QWidget*parent)
:QDialog(parent)
{
setWindowTitle("StackWidget");
//新建一个QListWidget列表框控件对象
list=newQListWidget(this);
//在新建的QListWidget控件中插入三个条目,作为选择项
list->insertItem(,"Window1");
list->insertItem(1,"Window2");
list->insertItem(2,"Window3");
//创建三个QLabel标签控件对象,作为堆栈窗口需要显示的三层窗体
label1=newQLabel("WindowTest1");
label2=newQLabel("WindowTest2");
label3=newQLabel("WindowTest3");
//新建一个QStackedWidget堆栈窗体对象
stack=newQStackedWidget(this);
//将创建的三个Label标签控件依次插入堆栈窗体中
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
//对整个对话框进行布局
QHBoxLayout*mainLayout=newQHBoxLayout(this);
mainLayout->setMargin(5);//设定对话框(或窗体)的边距为5
mainLayout->setSpacing(5);//设定各个控件之间的间距为5
mainLayout->addWidget(list);
mainLayout->addWidget(stack,,Qt::AlignHCenter);
mainLayout->setStretchFactor(list,1);
mainLayout->setStretchFactor(stack,3);
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
}
StackDlg::~StackDlg()
{
}
(三)程序解释
1、设置主窗体布局时,用到了布局管理器。这里用到的是水平排列窗体QHBoxLayout:
QHBoxLayout *mainLayout=new QHBoxLayout(this);
2、设定可伸缩控件
mainLayout->setStretchFactor(list,1);
mainLayout->setStretchFactor(stack,3);
设定可伸缩控件,第一个参数用于指定设置的控件(序号从0起编号),第2个参数的值大于0则表示此控件为可伸缩控件。这里对list和stack的参数为1和3,区别就在于拉伸时的变化率的大小。
3、连接信号与槽
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
这个连接函数将QListWidget的信号currentRowChange(int)和QStackedWidget的槽setCurrentIndex(int)连接在一起,所以才导致了堆栈窗口的切换。
领取专属 10元无门槛券
私享最新 技术干货