一、简介
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、运行结果
致谢