zoukankan      html  css  js  c++  java
  • 3.1 Qt布局管理

    1. QSplitter 分割窗口

     

    代码:

    QSplitter *splitterMain=new QSplitter(Qt::Horizontal,0);
    QTextEdit *textLeft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);
    textLeft->setAlignment(Qt::AlignCenter);//文字对齐方式
    QSplitter *splitterRight=new QSplitter(Qt::Vertical,splitterMain);
    splitterRight->setOpaqueResize(false);//分隔条在拖拽时是否实时更新显示
    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);
    //设定可伸缩空间,第1个参数用于指定设置的控件序号,从0开始编号
    //第2个参数为大于0的值,表示此控件为可伸缩控件
    splitterMain->setStretchFactor(1,1);
    splitterMain->setWindowTitle(QObject::tr("Splitter"));
    splitterMain->show();

    2. 停靠窗口QDockWidget类

     

     代码:

    setWindowTitle("DockWindows");
    QTextEdit *te=new QTextEdit(this);
    te->setText("Main Windows");
    te->setAlignment(Qt::AlignCenter);//居中
    setCentralWidget(te);//将此编辑框设为主窗口的中央窗体
    QDockWidget *dock=new QDockWidget("DockWindow1",this);
    dock->setFeatures(QDockWidget::DockWidgetMovable);//可移动
    dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);//窗体可停靠区域的位置
    QTextEdit *te1=new QTextEdit();
    te1->setText("Window1,The dock widget can be moved between docks by the user");
    dock->setWidget(te1);
    addDockWidget(Qt::RightDockWidgetArea,dock);
    
    dock=new QDockWidget("DockWindow2",this);
    dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);//可关闭,可浮动
    QTextEdit *te2=new QTextEdit();
    te2->setText(tr("Window2, The dock can be detached from the mainwindow,""and floated as an independent window, and can be closed"));
    dock->setWidget(te2);
    addDockWidget(Qt::RightDockWidgetArea,dock);
    
    dock=new QDockWidget("DockWindow3",this);
    dock->setFeatures(QDockWidget::AllDockWidgetFeatures);//全部特性
    QTextEdit *te3=new QTextEdit();
    te3->setText(tr("Window3, The dock can be closed, moved, and floated"));
    dock->setWidget(te3);
    addDockWidget(Qt::RightDockWidgetArea,dock);

    3. 堆栈窗体QStackedWidget

    代码:

    setWindowTitle("StackedWidget");
    list=new QListWidget(this);
    list->insertItem(0,"Window1");
    list->insertItem(1,"Window2");
    list->insertItem(2,"Window3");
    label1=new QLabel("WindowTest1");
    label2=new QLabel("WindowTest2");
    label3=new QLabel("WindowTest3");
    stack=new QStackedWidget(this);
    stack->addWidget(label1);
    stack->addWidget(label2);
    stack->addWidget(label3);
    QHBoxLayout *mainLayout=new QHBoxLayout(this);
    
    mainLayout->setMargin(5);
    mainLayout->setSpacing(5);
    mainLayout->addWidget(list);
    mainLayout->addWidget(stack,0,Qt::AlignCenter);
    mainLayout->setStretchFactor(list,1);
    mainLayout->setStretchFactor(stack,3);
    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));

    4.基本布局(QLayout)

    代码:

    dialog.h

    #ifndef DIALOG_H
    #define DIALOG_H
    
    #include <QDialog>
    #include <QLabel>
    #include <QSplitter>
    #include <QLineEdit>
    #include <QComboBox>
    #include <QTextEdit>
    #include <QGridLayout>
    #include <QVBoxLayout>
    #include <QHBoxLayout>
    #include <QPushButton>
    #include <QPixmap>
    
    class Dialog : public QDialog
    {
        Q_OBJECT
    
    public:
        Dialog(QWidget *parent = 0);
        ~Dialog();
        void setDialog();
    private:
        //左侧
        QLabel *userNameLabel;
        QLabel *nameLabel;
        QLabel *sexLabel;
        QLabel *departmentLabel;
        QLabel *ageLable;
        QLabel *otherLabel;
        QLineEdit *usernameLineEdit;
        QLineEdit *nameLineEdit;
        QComboBox *sexCombox;
        QTextEdit *departmentTextEdit;
        QLineEdit *ageLineEdit;
        QGridLayout *leftLayout;
        //右侧
        QLabel *headLabel;
        QLabel *headIconLabel;
        QPushButton *updateHeadBtn;
        QHBoxLayout *topRightLayout;
        QLabel *introductionLabel;
        QTextEdit *introductionLineEdit;
        QVBoxLayout *rightLayout;
        //底部
        QPushButton *okBtn;
        QPushButton *cancelBtn;
        QHBoxLayout *buttomLayout;
    };
    
    #endif // DIALOG_H

    dialog.cpp

    #include "dialog.h"
    
    Dialog::Dialog(QWidget *parent)
        : QDialog(parent)
    {
        setDialog();
    }
    
    Dialog::~Dialog()
    {
    
    }
    void Dialog::setDialog(){
        userNameLabel=new QLabel("用户名:");
        usernameLineEdit=new QLineEdit;
        nameLabel=new QLabel("姓名:");
        nameLineEdit=new QLineEdit;
        sexLabel=new QLabel("性别:");
        sexCombox=new QComboBox;
        sexCombox->addItem("");
        sexCombox->addItem("");
        departmentLabel=new QLabel("部门:");
        departmentTextEdit=new QTextEdit;
        ageLable=new QLabel("年龄:");
        ageLineEdit=new QLineEdit;
        otherLabel=new QLabel("备注:");
        otherLabel->setFrameStyle(QFrame::Panel|QFrame::Sunken);//控件风格
        leftLayout=new QGridLayout();
        leftLayout->addWidget(userNameLabel,0,0);
        leftLayout->addWidget(usernameLineEdit,0,1);
        leftLayout->addWidget(nameLabel,1,0);
        leftLayout->addWidget(nameLineEdit,1,1);
        leftLayout->addWidget(sexLabel,2,0);
        leftLayout->addWidget(sexCombox,2,1);
        leftLayout->addWidget(departmentLabel,3,0);
        leftLayout->addWidget(departmentTextEdit,3,1);
        leftLayout->addWidget(ageLable,4,0);
        leftLayout->addWidget(ageLineEdit,4,1);
        leftLayout->addWidget(otherLabel,5,0,1,2);
        //设定两列分别占用的空间比例
        leftLayout->setColumnStretch(0,1);
        leftLayout->setColumnStretch(1,3);
        //右侧
        headLabel=new QLabel("头像:");
        headIconLabel=new QLabel;
        QPixmap icon(":/image/123.jpg");
        headIconLabel->setPixmap(icon);
        headIconLabel->resize(icon.width(),icon.height());
        updateHeadBtn=new QPushButton("更新");
    
        topRightLayout=new QHBoxLayout();
        topRightLayout->setSpacing(20);
        topRightLayout->addWidget(headLabel);
        topRightLayout->addWidget(headIconLabel);
        topRightLayout->addWidget(updateHeadBtn);
        introductionLabel=new QLabel("个人说明");
        introductionLineEdit=new QTextEdit;
        rightLayout=new QVBoxLayout();
        rightLayout->setMargin(10);
        rightLayout->addLayout(topRightLayout);
        rightLayout->addWidget(introductionLabel);
        rightLayout->addWidget(introductionLineEdit);
        okBtn=new QPushButton("确定");
        cancelBtn=new QPushButton("取消");
        buttomLayout=new QHBoxLayout();
        buttomLayout->addStretch();//在按钮之前插入一个占位符,使两个按钮能够靠右对齐
        buttomLayout->addWidget(okBtn);
        buttomLayout->addWidget(cancelBtn);
        QGridLayout *mainLayout=new QGridLayout(this);
        mainLayout->setMargin(15);
        mainLayout->setSpacing(10);
        mainLayout->addLayout(leftLayout,0,0);
        mainLayout->addLayout(rightLayout,0,1);
        mainLayout->addLayout(buttomLayout,1,0,1,2);
        mainLayout->setSizeConstraint(QLayout::SetFixedSize);//设定最优化显示,并且使用户无法改变对话框大小
    
    }

  • 相关阅读:
    Door Frames CodeForces
    POJ 3090 Visible Lattice Points (ZOJ 2777)
    从斐波那契到矩阵快速幂
    Recursive sequence (矩阵快速幂)2016ACM/ICPC亚洲区沈阳站
    c++ 类实现 AVL树容器(包含迭代器)
    c++ 链表类的实现(包含迭代器)
    HDU
    【几何+模拟】二次元变换 计蒜客
    【bfs+链式向前星】防御僵尸(defend)计蒜客
    deque in Python
  • 原文地址:https://www.cnblogs.com/xiaoaofengyue/p/12302879.html
Copyright © 2011-2022 走看看