QT开发应用程序(8)--布局管理QSplitter, QDockWidget,QStackWidget,QLayout

1、QSplitter的使用


#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,NULL/*parent*/);
    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);

    splitterMain->setStretchFactor(1,1);
    splitterMain->setWindowTitle(QObject::tr("Splitter  "));
    splitterMain->show();
    
    return a.exec();
}

运行效果:
在这里插入图片描述

2、QDockWidget的使用

DockWindows::DockWindows(QWidget *parent)
    : QMainWindow(parent)
{
    setWindowTitle(tr("Dock窗口  "));	//设置主窗口的标题栏文字
    QTextEdit *te=new QTextEdit(this);	//定义一个QTextEdit对象作为主窗口
    te->setText(tr("main window"));
    te->setAlignment(Qt::AlignCenter);
    setCentralWidget(te);               //将此编辑框设为主窗口的中央窗体
    //停靠窗口1
    QDockWidget *dock=new QDockWidget(tr("Dock窗体  "),this);
    dock->setFeatures(QDockWidget::DockWidgetMovable);            //可移动
    dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
    QTextEdit *te1 =new QTextEdit();
    te1->setText(tr("窗体1,可以在Dock窗体之间移动" "  "));
    dock->setWidget(te1);
    addDockWidget(Qt::RightDockWidgetArea,dock);
    //停靠窗口2
    dock=new QDockWidget(tr("Dock窗体  "),this);
    dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); //可关闭、可浮动
    QTextEdit *te2 =new QTextEdit();
    te2->setText(tr("窗体2,可从主窗体独立浮动为独立窗体,也可关闭  ""  "));
    dock->setWidget(te2);
    addDockWidget(Qt::RightDockWidgetArea,dock);
    //停靠窗口3
    dock=new QDockWidget(tr("Dock窗体  "),this);
    dock->setFeatures(QDockWidget::AllDockWidgetFeatures);     //全部特性
    QTextEdit *te3 =new QTextEdit();
    te3->setText(tr("窗体3,可关闭移动和浮动  "));
    dock->setWidget(te3);
    addDockWidget(Qt::RightDockWidgetArea,dock);
}

运行结果:
在这里插入图片描述

3、QStackWidget的使用

QStackWidget可以用来切换页面(窗体)。

StackDlg::StackDlg(QWidget *parent)
    : QDialog(parent)
{
    setWindowTitle(tr("StackedWidget  "));
    list =new QListWidget(this);
    list->insertItem(0,tr("List Item1  "));
    list->insertItem(1,tr("List Item2  "));
    list->insertItem(2,tr("List Item3  "));

    label1 =new QLabel(tr("QStackedWidget Page1  "));
    label2 =new QLabel(tr("QStackedWidget Page2  "));
    label3 =new QLabel(tr("QStackedWidget Page3  "));

    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::AlignHCenter);
    mainLayout->setStretchFactor(list,1);
    mainLayout->setStretchFactor(stack,2);
    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
}


运行效果:
在这里插入图片描述

4、QLayout的使用

QT提供了QHBoxLayout、QVBoxLayout、QGridBoxLayout等基本布局管理,分别为水平、垂直、网格布局管理。

在这里插入图片描述

    NationalLabel =new QLabel(tr("国家/地址:  "));
    NationalComboBox =new QComboBox;
    NationalComboBox->insertItem(0,tr("中国  "));
    NationalComboBox->insertItem(1,tr("美国  "));
    NationalComboBox->insertItem(2,tr("英国  "));

    ProvinceLabel =new QLabel(tr("省份:  "));
    ProvinceComboBox =new QComboBox;
    ProvinceComboBox->insertItem(0,tr("江苏省  "));
    ProvinceComboBox->insertItem(1,tr("山东省  "));
    ProvinceComboBox->insertItem(2,tr("浙江省  "));

    CityLabel =new QLabel(tr("城市:  "));
    CityLineEdit =new QLineEdit;

    IntroductLabel =new QLabel(tr("个人说明:  "));
    IntroductTextEdit =new QTextEdit;

   // 共4行2列
    mainLayout =new QGridLayout(this);
    mainLayout->setMargin(15);
    mainLayout->setSpacing(10);
    mainLayout->addWidget(NationalLabel,0,0); // 0行0列
    mainLayout->addWidget(NationalComboBox,0,1);// 0行1列
    mainLayout->addWidget(ProvinceLabel,1,0);// 1行0列
    mainLayout->addWidget(ProvinceComboBox,1,1);// 1行1列
    mainLayout->addWidget(CityLabel,2,0);// 2行0列
    mainLayout->addWidget(CityLineEdit,2,1);// 2行1列
    mainLayout->addWidget(IntroductLabel,3,0);// 3行0列
    mainLayout->addWidget(IntroductTextEdit,3,1);// 3行1列

在这里插入图片描述

发布了30 篇原创文章 · 获赞 9 · 访问量 933

猜你喜欢

转载自blog.csdn.net/x879014419/article/details/105136890