Qt布局管理

分割窗口类 QSplitter

使用流程如下:

建一个QSplitter类对象,作为主分割窗口,设定此分割窗口为水平分割窗口。

QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);

新建一个QTextEdit类对象,并将其插入主分割窗口中。

QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"),splitterMain);

设定TextEdit中文字的对齐方式

textLeft->setAlignment(Qt::AlignCenter);

新建一个QSplitter类对象,作为右分割窗口,设定此分割窗口为垂直分割窗口,并以主分割窗口为父窗口。

QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);

调用setOpaqueResize(bool)方法用于设定分割窗口的分割条在拖曳时是否为实时更新显示,若设为true则实时更新显示,若设为false则在拖曳时只显示一条灰色的粗线条,在拖曳到位并释放鼠标后再显示分割条。

splitterRight->setOpaqueResize(false);

调用setStretchFactor()方法用于设定可伸缩控件,它的第1个参数用于指定设置的控件序号,控件序号按插入的先后次序从0起依次编号;第2个参数为大于0的值,表示此控件为可伸缩控件。

splitterMain->setStretchFactor(1,1);


停靠窗口类 QDockWidget

使用流程如下:

创建一个QDockWidget对象的停靠窗体。

QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);

设置此停靠窗体的属性,通常调用setFeatures()及setAllowedAreas()两种方法。

void setFeatures(DockWidgetFeatures features);
/*参数QDockWidget::DockWidgetFeatures指定停靠窗体的特性,包括以下几种参数。
① QDockWidget::DockWidgetClosable:停靠窗体可关闭。
② QDockWidget::DockWidgetMovable:停靠窗体可移动。
③ QDockWidget::DockWidgetFloatable:停靠窗体可浮动。
④ QDockWidget::AllDockWidgetFeatures:此参数表示拥有停靠窗体的所有特性。
⑤ QDockWidget::NoDockWidgetFeatures:不可移动、不可关闭、不可浮动。*/

void setAllowedAreas(Qt::DockWidgetAreas  areas);
/*参数Qt::DockWidgetAreas指定了停靠窗体可停靠的区域,包括以下几种参数。
① Qt::LeftDockWidgetArea:可在主窗口的左侧停靠。
② Qt::RightDockWidgetArea:可在主窗口的右侧停靠。
③ Qt::TopDockWidgetArea:可在主窗口的顶端停靠。
④ Qt::BottomDockWidgetArea:可在主窗口的底部停靠。
⑤ Qt::AllDockWidgetArea:可在主窗口任意(以上四个)部位停靠。
⑥ Qt::NoDockWidgetArea:只可停靠在插入处。
*/

新建一个要插入停靠窗体的控件,常用的有QListWidget和QTextEdit。

QTextEdit *te1 =new QTextEdit();
te1->setText(tr("Window1,The dock widget can be moved between docks by the user" ""));

将控件插入停靠窗体,调用QDockWidget的setWidget()方法。

dock->setWidget(te1);

使用addDockWidget()方法在MainWindow中加入此停靠窗体。

addDockWidget(Qt::RightDockWidgetArea,dock);


堆栈窗体类 QStackedWidget

使用流程如下:

设置布局

    QHBoxLayout *mainLayout =new QHBoxLayout(this);
    mainLayout->setMargin(5);
    mainLayout->setSpacing(5);

创建列表控件

    list =new QListWidget(this);
    list->insertItem(0,tr("Window1"));
    list->insertItem(1,tr("Window2"));
    list->insertItem(2,tr("Window3"));

创建堆栈窗体并逐个加入标签控件

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

将列表和堆栈窗体加入布局

mainLayout->addWidget(list);
mainLayout->addWidget(stack,0,Qt::AlignHCenter);

设定可伸缩控件,第1个参数用于指定设置的控件(序号从0起编号),第2个参数的值大于0则表示此控件为可伸缩控件。

mainLayout->setStretchFactor(list,1):
mainLayout->setStretchFactor(stack,3);

QListWidget的currentRowChanged()信号与堆栈窗体的setCurrentIndex()槽函数连接起来,实现按选择显示窗体。此处的堆栈窗体index按插入的顺序从0起依次排序,与QListWidget的条目排序相一致。

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


基本布局

addWidget()方法用于加入需要布局的控件,方法原型如下:

void addWidget
(
	QWidget *widget,           			//需要插入的控件对象
	int  fromRow,              			//插入的行
	int  fromColumn,           			//插入的列
	int  rowSpan,              			//表示占用的行数
	int  columnSpan,           			//表示占用的列数
	Qt::Alignment  alignment=0  		//描述各个控件的对齐方式
)

addLayout()方法用于加入子布局,方法原型如下:

void addLayout
(
	QLayout *layout,              		//表示需要插入的子布局对象
	int row,                      		//插入的起始行
	int column,                  		//插入的起始列
	int rowSpan,                  		//表示占用的行数
	int columnSpan,               		//表示占用的列数
	Qt::Alignment alignment=0      	//指定对齐方式
)

使用流程如下:

  • 创建控件并进行设置;
    • 文本
    • 风格:setFrameStyle
    • 选项:addItem
  • 创建子布局(QHBoxLayout、QVBoxLayout)并进行设置;
    • 列宽:setColumnStretch
    • 列距:setSpacing
    • 行距:setMargin
  • 将控件加入子布局;
    • 加入:addWidget
    • 占位:addStretch
  • 创建主布局(QGridLayout)并进行设置;
  • 将子布局加入主布局;
    • 加入:addLayout


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值