您的位置:首页 > 编程语言 > Qt开发

Qt布局管理

2016-06-28 18:12 453 查看

Qt布局管理

By Xchen 20160628

分割窗口

类QSplitter

先看一个实例

example01:

#include "mainwindow.h"
#include <QApplication>
#include <QSplitter>
#include <QTextEdit>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QFont font("ZYSong18090",12);
a.setFont(font);

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);

splitterMain->setStretchFactor(1,1);//设置右窗口为可伸缩控件,即在整个对话框大小改变时右窗口大小随之改变
splitterMain->setWindowTitle(QObject::tr("Splitter"));
splitterMain->show();
//MainWindow w;
//w.show();

return a.exec();
}


对于上面的例子,一定要在main()函数中建立QSplitter对象,这样可以直接将窗口分割,所以QSplitter对象相当于一个控件并且可以直接显示。

停靠窗口

类QDockWidget

example02:

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setWindowTitle(tr("DockWindows"));
QTextEdit *text=new QTextEdit(this);
text->setText(tr("Main Window"));
text->setAlignment(Qt::AlignCenter);
setCentralWidget(text);

QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);
dock->setFeatures(QDockWidget::DockWidgetMovable);
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
QTextEdit *text1=new QTextEdit();
text1->setText(tr("this is dockwindow1"));
dock->setWidget(text1);
addDockWidget(Qt::RightDockWidgetArea,dock);

dock=new QDockWidget(tr("DockWindow2"),this);
dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
QTextEdit *text2=new QTextEdit();
text2->setText(tr("this is dockwindow2"));
dock->setWidget(text2);
addDockWidget(Qt::RightDockWidgetArea,dock);

dock=new QDockWidget(tr("DockWindow3"),this);
dock->setFeatures(QDockWidget::AllDockWidgetFeatures);
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
QTextEdit *text3=new QTextEdit();
text3->setText(tr("this is dockwindow1"));
dock->setWidget(text3);
addDockWidget(Qt::RightDockWidgetArea,dock);
}


在这个例子中可以看出停靠窗口QDockWidget的使用步骤为:

1、创建QDockWidget对象的停靠窗口

2、设置窗口属性

QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);
dock->setFeatures(QDockWidget::DockWidgetMovable);
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);


3、新建控件

QTextEdit *text1=new QTextEdit();
text1->setText(tr("this is dockwindow1"));


4、将控件插入停靠窗体

dock->setWidget(text1);


5、将停靠窗口加入MainWindow

addDockWidget(Qt::RightDockWidgetArea,dock);


堆栈窗口

类QStackedWidget

example03:

Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
setWindowTitle(tr("StackedWidget"));
list=new QListWidget(this);
list->insertItem(0,tr("window1"));
list->insertItem(1,tr("window2"));
list->insertItem(2,tr("window3"));

label1=new QLabel(tr("this is window1"));
label2=new QLabel(tr("this is window2"));
label3=new QLabel(tr("this is window3"));

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->setStretchFac
a698
tor(stack,3);
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
}


堆栈窗口的使用多与QListWidget和QComboBox配合使用。例子中是让堆栈窗口与QListWidget配合使用。

基本布局

类QLayout

它们的继承关系:



可以在布局中常用的方法为addWidget()和addLayout()就可以将指定控件加入到布局中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt 布局