当前位置: 代码迷 >> 综合 >> Qt--QLayout
  详细解决方案

Qt--QLayout

热度:43   发布时间:2023-12-28 15:11:49.0

一、简介

1、开发一个图形界面应用程序时,界面的布局和业务逻辑的设定,功能的实现一样重要。

2、开发的界面应该要有拓展性。界面设计之初要考虑到不同用户的屏幕大小、纵横比例、分辨路可能不同,界面还有缩放这类情况。

3、在 Qt 工程中,采用UI设计师模式来设计界面,并不能满足开发的全部需求,像部分界面的切换,就可能需要代码控件去实现,这个时候就需要考虑如何布局这些代码部件。而只采用setGeometry()方法定位控件的位置比较笨拙。

4、Qt 中提供了更好的方法布局控件,常用方法如下:

(1)使用水平布局类 QHBoxLayout;

(2)使用垂直布局类QVBoxLayout;

(3)使用网格布局类QGridLayout;

(4)使用表格布局类QFormLayout ;

这几种种方法可以嵌套使用

5、然而,只通过以上四种布局的组合似乎不太好用, 因此需要搭配分割器QSplitter, 在QSplitter中实现局部布局,最后再放进主布局中可以实现非常好的效果。

6、控件在布局时可以先不指定父窗口,最后交由Layout 统一指定

 

二、示例

1、代码

//
#include "widget.h"
#include <QApplication>
#include <QDialog>
#include <QPushButton>
#include <QLineEdit>
#include <QLayout>
#include <QLabel>int main(int argc, char *argv[])
{QApplication a(argc, argv);QDialog *mainWindow = new QDialog;QHBoxLayout *topLayout = new QHBoxLayout;QLabel *lbl = new QLabel(QWidget::tr("&Input:"), mainWindow);QLineEdit *lineEdt = new QLineEdit(mainWindow);
//    lbl->setBuddy(lineEdt);topLayout->addWidget(lbl);topLayout->addWidget(lineEdt);QHBoxLayout *bomLayout = new QHBoxLayout;QPushButton *btn_ok = new QPushButton(QWidget::tr("OK"), mainWindow);\btn_ok->setDefault(true);QPushButton *btn_cancel = new QPushButton(QWidget::tr("Cancel"), mainWindow);bomLayout->addStretch();bomLayout->addWidget(btn_ok);bomLayout->addStretch();bomLayout->addWidget(btn_cancel);bomLayout->addStretch();QVBoxLayout *mainLayout = new QVBoxLayout;mainLayout->addLayout(topLayout);mainLayout->addLayout(bomLayout);mainWindow->setLayout(mainLayout);mainWindow->resize(300, 100);mainWindow->setWindowTitle(QWidget::tr("Qt Test"));mainWindow->show();return a.exec();
}
//

2、运行结果

 

致谢

1、Qt入门-layout布局

2、Qt布局与分割器QSplitter--朝闻道