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列