qt布局

qt布局

分割窗口

qt布局_第1张图片

(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停靠窗口

qt布局_第2张图片

(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类(点击切换窗口)

qt布局_第3张图片

QLayout

qt布局_第4张图片

Horizontal 水平

vertical 垂直

layout,代码 E:\qt\workspace\space3\layout

main

#include "widget.h"

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#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
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;
}

设计师也是很快的

qt布局_第5张图片

仅此记录,qt5.12教程内容

你可能感兴趣的:(qt,c++)