1、QSplittle类的使用
用于分割窗口
#include "lqsplitter.h"
#include <QApplication>
#include<Qsplitter>
#include<QTextEdit>
#include <QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFont Main_font("ZYSong18030",12);
a.setFont(Main_font); //设置窗口的字体
QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0); //创建一个分割类
QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"), splitterMain);//创建一个文本编辑,父类是splitterMain
textLeft->setAlignment(Qt::AlignCenter);//文本以中心对齐
QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);//创建一个右边的分割类,父类指向splitterMain
splitterRight->setOpaqueResize(false); //设置窗口在进行拖曳的时候,分割条是否要实时更新,这里不进行实时更新
QTextEdit *textUp =new QTextEdit(QObject::tr("Top Widget"), splitterRight);//右边创建一个文本编辑类1
textUp->setAlignment(Qt::AlignCenter);
QTextEdit *textBottom =new QTextEdit(QObject::tr("Bottom Widget"), splitterRight);//右边创建一个文本编辑类2
textBottom->setAlignment(Qt::AlignCenter);
/*
* 第一个参数控件的序号,第二个参数表示拉伸系数,
* 这个语句表示在拉伸的时候,左边的窗口不变,(注:因为左边的窗口的序号是0)
*右边的窗口进行拉伸
*/
splitterMain->setStretchFactor(1,1);
splitterMain->setWindowTitle(QObject::tr("Splitter"));
splitterMain->show();
//LQsplitter w;
//w.show();
return a.exec();
}
知识点:
1.1)、设置字体
QFont Main_font(“ZYSong18030”,12);
a.setFont(Main_font); //设置窗口的字体
1.2)、设置文本的对齐方式
textLeft->setAlignment(Qt::AlignCenter);//文本以中心对齐
参数:
QT::AlignLeft:左对齐
QT::AlignRight:右对齐
QT::AlignCenter:文字居中对齐
QT::AlignUp 文字与顶端对齐
Qt::AlignBottom 文字与底部对齐
1.3) QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0); //创建一个分割类
参数1:
Qt::Horizontal 水平布局
Qt::Vertical 垂直布局
参数2:
指定父指针
1.4)splitterRight->setOpaqueResize(bool)
设置窗口在进行拖曳的时候,分割条是否要实时更新,1:实时更新。
1.5).
QObject::tr(“Bottom Widget”):被它处理的 字符串可以 使用工具提 取出来翻译 成其他语言, 也就是做国际化使用。
1.6)splitterMain->setStretchFactor(1,1);
/*
* 第一个参数控件的序号,第二个参数表示拉伸系数,
* 这个语句表示在拉伸的时候,左边的窗口不变,(注:因为左边的窗口的序号是0)
*右边的窗口进行拉伸
*/
2、停靠窗口QDockWidget
#include "dockwindows.h"
#include<QTextEdit>
#include<QDockWidget>
DockWindows::DockWindows(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(tr("DockWindows")); //设置主窗口的标题栏文字
QTextEdit *te=new QTextEdit(this); //定义一个QTextEdit对象作为主窗口
te->setText(tr("Main Window"));
te->setAlignment(Qt::AlignCenter);
setCentralWidget(te); //将此编辑框设为主窗口的中央窗体
//停靠窗口1
QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);
//可移动
dock->setFeatures(QDockWidget::DockWidgetMovable); //(a)
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); //(b)
QTextEdit *te1 =new QTextEdit();
te1->setText(tr("Window1,The dock widget can be moved between docks by the user" ""));
dock->setWidget(te1);
addDockWidget(Qt::RightDockWidgetArea,dock);
//停靠窗口2
dock=new QDockWidget(tr("DockWindow2"),this);
dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); //可关闭、可浮动
QTextEdit *te2 =new QTextEdit();
te2->setText(tr("Window2,The dock widget can be detached from the main window,""and floated as an independent window, and can be closed"));
dock->setWidget(te2);
addDockWidget(Qt::RightDockWidgetArea,dock);
//停靠窗口3
dock=new QDockWidget(tr("DockWindow3"),this);
dock->setFeatures(QDockWidget::AllDockWidgetFeatures); //全部特性
QTextEdit *te3 =new QTextEdit();
te3->setText(tr("Window3,The dock widget can be closed, moved, and floated"));
dock->setWidget(te3);
addDockWidget(Qt::RightDockWidgetArea,dock);
}
2.1)setCentralWidget(QWidget *widget)
用来设置主体窗口,在这里如果不设置的话,该界面会被覆盖掉
2.2)QDockWidget::setFeatures(DockWidgetFeatures features)
QDockWidget::DockWidgetMovable 停靠窗体可移动
QDockWidget::DockWidgetClosable 停靠窗体可关闭
QDockWidget::DockWidgetFloatable 停靠窗体可移动
QDockWidget::ALLDockWidgetFeatures 停靠窗体可移动
QDockWidget::NoDockWidgetFeatures 停靠窗体可移动
2.3)void QDockWidget::setWidget(QWidget *widget)
在停靠窗口哪里创建一个控件
2.4)QMainWindow::addDockWidget(Qt::DockWidgetArea area, QDockWidget *dockwidget)
第一个参数:设定窗口的停靠区域
Qt::RightDockWidgetArea – 主窗口右边
Qt::LeftDockWidgetArea – 主窗口左边
Qt::TopDockWidgetArea – 主窗口顶部
Qt::BottomDockWidgetArea – 主窗口底部
Qt::AllDockWidgetArea – 主窗口任意位置
Qt::NoDockWidgetArea – 只可停靠在插入出
3、堆栈窗体QStackedWidget类
StackDlg::StackDlg(QWidget *parent)
: QDialog(parent)
{
setWindowTitle(tr("StackedWidget"));
list =new QListWidget(this); //新建一个QListWidget控件对象
//在新建的QListWidget控件中插入三个条目,作为选择项
list->insertItem(0,tr("Window1"));
list->insertItem(1,tr("Window2"));
list->insertItem(2,tr("Window3"));
//创建三个QLabel标签控件对象,作为堆栈窗口需要显示的三层窗体
label1 =new QLabel(tr("WindowTest1"));
label2 =new QLabel(tr("WindowTest2"));
label3 =new QLabel(tr("WindowTest3"));
stack =new QStackedWidget(this);
//新建一个QStackedWidget堆栈窗体对象
//将创建的三个QLabel标签控件依次插入堆栈窗体中
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
QHBoxLayout *mainLayout =new QHBoxLayout(this);
//对整个对话框进行布局
mainLayout->setMargin(5); //设定对话框(或窗体)的边距为5
mainLayout->setSpacing(5); //设定各个控件之间的间距为5
mainLayout->addWidget(list);
mainLayout->addWidget(stack,0,Qt::AlignHCenter);
mainLayout->setStretchFactor(list,1); //(a)
mainLayout->setStretchFactor(stack,3);
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));//(b)
}
3.1)void QListWidget::insertItem(int row, const QString &label)
row :控件的序号,QString &label 控件的ID
3.2)int QStackedWidget::addWidget(QWidget *widget)
往栈窗口中添加窗口
3.3)QHBoxLayout用于水平布局(注QVBoxLayout用于垂直布局)
void QHBoxLayout::setMargin(int margin) 设置对话框的边距
void QHBoxLayout::setSpacing(int spacing) 设置空间间的距离
3.4)void QBoxLayout::addWidget(QWidget *widget, int stretch = 0, Qt::Alignment alignment = Qt::Alignment())
QWidget *widget 插入的控件窗口
int stretch 拉伸系数
Qt::Alignment alignment 对齐方式
4、常见布局