QT学习总结:分局管理中的Qsplitter类、QDockWidget类、QStackedWidget类、QLayout函数用法总结

it2023-09-04  68

一、Qsplitter类函数(主分割窗口) 1.设定主分割窗口且为水平主分割窗口

QSplitter *splittermain =new QSplitter(Qt::Horizontal,0); //Qt::Horizontal设定为水平分割窗口

2…建立一个QTextEdit类对象,将其插入主分割窗口

QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splittermain);//第一个控件表示为插入的文字,第二个为插入的对象

3.设置TextEdit中的文字的对齐方式

textLeft->setAlignment(Qt::AlignCenter); Qt::AlignLeft:左对齐 Qt::AlignRight 右对齐 Qt::AlignCenter 文字居中(Qt::AlignHCenter 水平居中,Qt::AlignVCenter 垂直居中) Qt::AlignUp 与顶部对齐 Qt::AlignBotton 文字与底部对齐

4.在主分割窗口插入其他窗口作为有窗口

QSplitter *splitterRight=new QSplitter(Qt::Vertical,splittermain);//第一个为垂直分割窗口,第二个插入的主窗口对象

5.和3一样在有窗口插入字体 6.设置是否为可伸缩空间

splittermain->setStretchFactor(1,1);//第一个为控件的序号(根据控件插入的顺序编号),第二个为大于零则可伸缩

7.设定分割窗口的分割条是否实时更新

splitter->setQpaqueResize(false);//false为灰色线条,true为动态线条

二、QDockWidget类 1.设置主窗口的文字

setWindowTitle(tr("DockWindows"));

2.设置主窗口

QTextEdit *text=new QTextEdit(this); text->setAlignment(Qt::AlignCenter);//设置文字对齐方式 text->setText("主窗口"); setCentralWidget(text);//将其作为主窗口的中央窗体

3.设置停靠窗口

QDockWidget *dock=new QDockWidget("我的dock窗口",this); dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);//可关闭或可浮动 QTextEdit *te1=new QTextEdit(); te1->setText("该dock窗口可关闭或可浮动");//在停靠窗口中插入文字 dock->setWidget(te1); addDockWidget(Qt::RightDockWidgetArea,dock);//添加停靠窗口

注意点(一): QDockWidget::DockWidgetClosable 0x01 窗口可关闭 QDockWidget::DockWidgetMovable 0x02 窗口可移动 QDockWidget::DockWidgetFloatable 0x04 停靠窗口可以与主窗口分离,作为独立窗口浮动 QDockWidget::DockWidgetVerticalTitleBar 0x08 停靠窗口在左侧显示垂直标题栏。 用于增加QMainWindow中的垂直空间。 QDockWidget::AllDockWidgetFeatures DockWidgetClosable /DockWidgetMovable / DockWidgetFloatable (不建议使用)可以关闭,移动和浮动停靠窗口 QDockWidget::NoDockWidgetFeatures 0x00 停靠窗口不可关闭、移动、浮动 注意点(二): Qt::LeftDockWidgetArea 左侧 Qt::RightDockWidgetArea 右侧 Qt::TopDockWidgetArea 顶部 Qt::BottomDockWidgetArea 底部 Qt::AllDockWidgetAreas 任意位置 Qt::NoDockWidgetArea 只能停靠在插入处 三、QStackedWidget类 1.建立一个QListWidget类对象,作为list选项框

list =new QListWidget(this);//新建一个QListWidget控件对象 //插入三个条目,作为选择项 list->insertItem(0,tr("Window1")); list->insertItem(1,tr("Window2")); list->insertItem(2,tr("Window3"));

2.建立一个栈窗体对象,用来和list对接

label1=new QLabel(tr("WindowTest1")); label2=new QLabel(tr("WindowTest2")); label3=new QLabel(tr("WindowTest3")); stack =new QStackedWidget(this);//新建一个堆栈窗体对象 stack->addWidget(label1); stack->addWidget(label2); stack->addWidget(label3);

3.将list和stack对应连接

connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));

4.布局函数在第四个里面详细讲述 5.设置比例

mainlayout->setStretchFactor(list,1); mainlayout->setStretchFactor(stack,3);//这里表示list和stack两者之间的比例,以上的例子是1:3

四、基本布局 1.常用到的布局类有:QHBoxLayout、QVBoxLayout、QGridLayout三种,分别是水平排列布局、垂直排列布局、表格排列布局。 常用的方法有addWidget()和addLayout()。addWidget()用于在布局中插入控件,addLayout()用于在布局中插入子布局。 两者配套使用。

QHBoxLayout *mainlayout; mainlayout=new QHBoxLayout(this);//垂直布局 mainlayout->addWidget(list); mainlayout->addWidget(stack,Qt::AlignHCenter); //先list,后stack //先定义,表格布局 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(SexComboBox,2,1); LeftLayout->addWidget(DepartmentLabel,3,0); LeftLayout->addWidget(DepartmentTextEdit,3,1); LeftLayout->addWidget(AgeLabel,4,0); LeftLayout->addWidget(AgeLineEdit,4,1); LeftLayout->addWidget(OtherLabel,5,0,1,2); LeftLayout->setColumnStretch(0,1); LeftLayout->setColumnStretch(1,3); //水平布局 OkBtn =new QPushButton(tr("确定")); CancelBtn =new QPushButton(tr("取消")); // ButtomLayout =new QHBoxLayout(); ButtomLayout->addStretch(); ButtomLayout->addWidget(OkBtn); ButtomLayout->addWidget(CancelBtn);

2.QLineEdit和QTextEdit的区别 前者开辟一行空格,后者开辟一片空格 3.设置控件距离

mainLayout->setMargin(15);//对话框距离 mainLayout->setSpacing(10);// 控件距离

4.保证两个按钮大小不变

OkBtn =new QPushButton(tr("确定")); CancelBtn =new QPushButton(tr("取消")); // ButtomLayout =new QHBoxLayout(); ButtomLayout->addStretch(); ButtomLayout->addWidget(OkBtn); ButtomLayout->addWidget(CancelBtn);

5.设置两列的比列

LeftLayout->setColumnStretch(0,1); LeftLayout->setColumnStretch(1,3); //设定两列分别占用空间的比例,本例设定为1:3,即使对话框大小改变了,两列之间的宽度比依然保存不变,设置的是第一个数字的比列,0和1列

6.最优化显示

mainLayout->setSizeConstraint(QLayout::SetFixedSize); //设置最优化显式,即使控件按其sizeHint()的大小显式,并且使用户无法改变对话框大小。

7.设定主布局窗口

QGridLayout *mainLayout =new QGridLayout(this);//有this就是主窗口
最新回复(0)