qt布局
分割窗口
(1)新建Qt Widgets Application(详见1.3.1节),项目名称为“Splitter”,基类选择“QMainWindow”,取消“创建界面”复选框的选中状态。
(2)在上述工程的“main.cpp”文件中添加如下代码。
其中,
(a) QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0):新建一个QSplitter类对象,作为主分割窗口,设定此分割窗口为水平分割窗口。
(b) QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain):新建一个QTextEdit类对象,并将其插入主分割窗口中。
(c) textLeft->setAlignment(Qt::AlignCenter):设定TextEdit中文字的对齐方式,常用的对齐方式有以下几种。
(d) QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain):新建一个QSplitter类对象,作为右分割窗口,设定此分割窗口为垂直分割窗口,并以主分割窗口为父窗口。
(e) splitterRight->setOpaqueResize(false):调用setOpaqueResize(bool)方法用于设定分割窗口的分割条在拖曳时是否为实时更新显示,若设为true则实时更新显示,若设为false则在拖曳时只显示一条灰色的粗线条,在拖曳到位并释放鼠标后再显示分割条。
(f) splitterMain->setStretchFactor(1,1):调用setStretchFactor()方法用于设定可伸缩控件,它的第1个参数用于指定设置的控件序号,控件序号按插入的先后次序从0起依次编号;第2个参数为大于0的值,表示此控件为可伸缩控件。
QDockWidget停靠窗口
(a) setFeatures()方法设置停靠窗体的特性,原型如下:
void setFeatures(DockWidgetFeatures features)
参数QDockWidget::DockWidgetFeatures指定停靠窗体的特性,包括以下几种参数。
① QDockWidget::DockWidgetClosable:停靠窗体可关闭。
② QDockWidget::DockWidgetMovable:停靠窗体可移动。
③ QDockWidget::DockWidgetFloatable:停靠窗体可浮动。
④ QDockWidget::AllDockWidgetFeatures:此参数表示拥有停靠窗体的所有特性。
⑤ QDockWidget::NoDockWidgetFeatures:不可移动、不可关闭、不可浮动。
(b) setAllowedAreas()方法设置停靠窗体可停靠的区域,原型如下:
void setAllowedAreas(Qt::DockWidgetAreas areas)
参数Qt::DockWidgetAreas指定了停靠窗体可停靠的区域,包括以下几种参数。
① Qt::LeftDockWidgetArea:可在主窗口的左侧停靠。
② Qt::RightDockWidgetArea:可在主窗口的右侧停靠。
③ Qt::TopDockWidgetArea:可在主窗口的顶端停靠。
④ Qt::BottomDockWidgetArea:可在主窗口的底部停靠。
⑤ Qt::AllDockWidgetArea:可在主窗口任意(以上四个)部位停靠。
⑥ Qt::NoDockWidgetArea:只可停靠在插入处。
堆栈窗体QStackedWidget类(点击切换窗口)
QLayout
Horizontal 水平
vertical 垂直
layout,代码 E:\qt\workspace\space3\layout
main
#include "widget.h"
#include <QApplication>
#include <QSplitter>
#include <QTextEdit>
#include <QListWidget>
#include <QStackedWidget>
#include <QLabel>
#include <QHBoxLayout>
#include "userinfo.h"
#include "content.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFont font("ZYSong18030",12);
a.setFont(font);
QSplitter* splitter = new QSplitter(Qt::Horizontal,0);
splitter->setOpaqueResize(true);
QListWidget* list = new QListWidget(splitter);
list->insertItem(0,QObject::tr("基本信息"));
list->insertItem(1,QObject::tr("联系方式"));
list->insertItem(2,QObject::tr("详细资料"));
list->insertItem(3,QObject::tr("基本信息设计师"));
Content* content = new Content(splitter);
QObject::connect(list,SIGNAL(currentRowChanged(int)),content->getStack(),SLOT(setCurrentIndex(int)));//(b)
//设置主布局框即水平分割窗的标题
splitter->setWindowTitle(QObject::tr("修改用户资料"));
//设置主布局框即水平分割窗的最小尺寸
splitter->setMinimumSize(splitter->minimumSize());
//设置主布局框即水平分割窗的最大尺寸
splitter->setMaximumSize(splitter->maximumSize());
splitter->show(); //显示主布局框,其上面的控件一同显示
//content->show();
// Widget w;
// w.show();
return a.exec();
}
content
#include "content.h"
#include<QVBoxLayout>
Content::Content(QWidget *parent): QFrame(parent)
{
stack = new QStackedWidget(this);
stack->setFrameStyle(QFrame::Panel|QFrame::Raised);
userInfo1 = new userInfo();
contact = new Contact();
detail = new Detail();
baseInfo = new BaseInfo;
stack->addWidget(baseInfo);
stack->addWidget(contact);
stack->addWidget(detail);
stack->addWidget(userInfo1);
/* 创建两个按钮 */ //(b)
// AmendBtn =new QPushButton(tr("修改"));
// CloseBtn =new QPushButton(tr("关闭"));
QHBoxLayout *BtnLayout =new QHBoxLayout;
BtnLayout->addStretch(1);
// BtnLayout->addWidget(AmendBtn);
// BtnLayout->addWidget(CloseBtn);
/* 进行整体布局 */
QVBoxLayout *RightLayout =new QVBoxLayout(this);
RightLayout->setMargin(10);
RightLayout->setSpacing(6);
RightLayout->addWidget(stack);
RightLayout->addLayout(BtnLayout);
}
Content::~Content()
{
}
QStackedWidget *Content::getStack() const
{
return stack;
}
设计师也是很快的
仅此记录,qt5.12教程内容