1.Basic Layouts
使用过mfc编程,就知道控件需要自己拖放。当一个界面有很多小控件时,摆放这些控件特别麻烦。
但是qt编程中有布局(Layout),让系统来摆放控件。使整个控件有一致的外观和感觉,特别方便。
1.水平方向的布局 QHBoxLayout
思考:
简单的把控件添加到布局里面就ok了。
horizontalGroupbox = new QGroupBox("Horizontal Layout"); hlayout = new QHBoxLayout; QPushButton *button1 = new QPushButton("Button1"); QPushButton *button2 = new QPushButton("Button2"); QPushButton *button3 = new QPushButton("Button3"); QPushButton *button4 = new QPushButton("Button4"); hlayout->addWidget(button1); hlayout->addWidget(button2); hlayout->addWidget(button3); hlayout->addWidget(button4); horizontalGroupbox->setLayout(hlayout);
2.栅格布局。QGridLayout
思考:
1.grid layout是按行列来进行布局的。
2.这个布局有4行,3列。
3.第一行只有一个QTextEdit,但是它横跨4行。
4.第二列比第一列长,第三列比第二列长。原因是调用了 setRowStretch()函数。
gridGroupbox = new QGroupBox("Grid Layout"); gridLayout = new QGridLayout; label1 = new QLabel("Line1"); label2 = new QLabel("Line2"); label3 = new QLabel("Line3"); lineEdit1 = new QLineEdit; lineEdit2 = new QLineEdit; lineEdit3 = new QLineEdit; textEdit = new QTextEdit; textEdit->setPlainText(tr("This widget takes up two thirds of grid layout")); gridLayout->addWidget(textEdit, 0, 2, 4, 1); gridLayout->addWidget(label1, 1, 0); gridLayout->addWidget(label2, 2, 0); gridLayout->addWidget(label3, 3, 0); gridLayout->addWidget(lineEdit1, 1, 1); gridLayout->addWidget(lineEdit2, 2, 1); gridLayout->addWidget(lineEdit3, 3, 1); gridLayout->setRowStretch(1, 10); gridLayout->setRowStretch(2, 20); gridGroupbox->setLayout(gridLayout);
3.表单布局 QFormLayout
思考:
1.表单布局是一种只有2列的布局。
2.表单布局可以用gridlayout实现,但是表单布局简单一些。
3.addRow方法,直接添加label 和 widget。
formGroupBox = new QGroupBox("Form Layout"); formLayout = new QFormLayout; formLineEdit = new QLineEdit; comboBox = new QComboBox; spinBOx = new QSpinBox; formLayout->addRow(tr("Line1"), formLineEdit); formLayout->addRow(tr("Line2,Long Text:"), comboBox); formLayout->addRow(tr("Line3"), spinBOx); formGroupBox->setLayout(formLayout);
4.竖直方向布局。
把刚才布局都添加到竖直布局,就是我们整个程序
mainLayout = new QVBoxLayout; mainLayout->addWidget(horizontalGroupbox); mainLayout->addWidget(gridGroupbox); mainLayout->addWidget(formGroupBox); mainLayout->addWidget(bigTextEdit); mainLayout->addWidget(buttonBox, 0, Qt::AlignRight);