异想天开

What's the true meaning of light, Could you tell me why

Qt之界面布局

日期:2017-02-25 11:33:32
  
最后更新日期:2017-02-25 20:20:21
文章仅为入门笔记备忘,慎看
Qt 5.7布局可以通过界面设计器或通过代码自定义布局。界面设计器通过拖拽控件的方式生成xml的mainwindow.ui文件,而用Qt自动uic(Qt User Interface Compiler)工具将mainwindow.ui转化为.h的头文件,自动生成界面布局创建对象的代码。Qt设计器里面可以对控件命名,这样可以用名字对设计器的对象访问,如:
ui->pushButton->setGeometry(QRect(200,200, 500, 100));
一段设置widget的例子:
[code lang="cpp"]
QWidget *widget = new QWidget();
QLineEdit *lineEdit = new QLineEdit(widget);
QPushButton *pushButton = new QPushButton("Ok", widget);
lineEdit->setGeometry(QRect(100,100, 500, 100));
this->setCentralWidget(widget);
[/code]
这段代码设置MainWindow的CentralWidget为自定义的widget,定位使用了绝对定位。同时还可以使用layout布局和定位。将上面的代码稍微改动一下:
[code lang="cpp"]
QWidget *widget = new QWidget();
QLineEdit *lineEdit = new QLineEdit(widget);
QPushButton *pushButton = new QPushButton("Ok", widget);
QVBoxLayout *vLayout = new QVBoxLayout();
vLayout->addWidget(lineEdit);
vLayout->addWidget(pushButton);
widget->setLayout(vLayout);
lineEdit->setFixedSize(200, 100);
pushButton->setFixedSize(200, 100);
this->setCentralWidget(widget);
[/code]
QVBoxLayout竖直方向layout,layout会根据窗口的大小,自动调整widget的size,同时某些比如lineedit这种基于文本高度的widget,为了保持美观,不会调整高度。同时使用layout也对位置的设置进行了限制,需要设置位置,就没有必要使用layout布局了。