QT(6)Basic Layout学习

  资料来源:http://doc.qt.nokia.com/latest/layouts-basiclayouts.html,在这里,我们学习下面几个方面:

  1. 以QDialog或其继承为主体,建立程序
  2. 菜单menu的建立
  3. GroupBox的使用,加入水平摆放的QHBoxLayout和格子摆放的QGridLayout、QFormLayout
  4. QDialogButtonBox的使用

以QDialog建立程序主体框架

  如果我们不采用QWidget的方式,直接采用QDialog(是QWidget的一个subclass),对于创建一个Dialog,其架构可以简单为:

int main(int argc, char * argv[])
{
QApplication app(argc,argv);

Dialog dialog;
return dialog.exec();
}

  创建一个Dialog的类,使用dialog.hdialog.cpp。在*.h中

class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog();
}

  在*.cpp中创建函数为

Dialog::Dialog()
{
QVBoxLayout * mainLayout = new QVBoxLayout;
// ... ... 纵向排放各个widget
setLayout(mainLayout);
setWindowTitle(tr("Basic Layout Test!"));
}

建立菜单Menu

  在dialog上加一个菜单,该菜单为QMenuBar,在菜单栏中加入QMenu菜单,菜单中单元为QAction,也允许潜入QMenu。下面是例子:

QMenuBar * menuBar = new QMenuBar; //创建QMenuBar
QMenu * fileMenu = new QMenu(tr("&File"),this); //创建QMenu
QAction * exitAction = fileMenu -> addAction(tr("E&xit")); //在QMenu中加入entry,并获得返回值Action,用于我们建立connect。也可以通过fileMenu->addMenu(**)方式,支持多成菜单,通过fileMenu->addSeperator方式加入分割。
menuBar -> addMenu(fileMenu); //将QMenu加入QMenuBar中,可以加入多个
connect(exitAction,SIGNAL(triggered()),this,SLOT(accept()));//对QAction的点击(trigger),这里出发Dialog的accpet(hide dialog并返回QDialog::Accepted的值)。
mainLayout -> setMenuBar(menuBar); //加入dialog(QDialog是QWidget的一个子类)

QT(6)Basic Layout学习

GroupBox的使用:加入水平摆放的QHBoxLayout

  这里给出一个采用水平Layout的GroupBox的例子,如图:

QGroupBox horizontalGroupBox = new QGroupBox(tr("Horizontal Layout"));
QHBoxLayout * layout = new QHBoxLayout;
... ... // layout->addWidget(buttons1);分别加入4个button
horizontalGroupBox->setLayout(layout);
mainLayout -> addWidget(horizontalGroupBox);

GroupBox的使用:加入QGridLayout

  加入QGridLayout的方法同QHBoxLayout没什么不同,不过在这里我们希望有一个元素占据多个Grid的格子,例如我们计划要一个4*3尺寸的gride,我们希望有一个QTextEdit占据最后一列,我们可以使用:layout->addWidget(editor,0,2,4,1); 其中 0,2表示位于第0行和第2列,4表示纵向延伸,共占4行,1表示共占1列。

  我们还需要注意到的是GridLayout并没有说是各行各列的大小均等,我们使用addColumnStretch来设置伸展因子,例如我们要求这个例子中第2列是第1列宽度的两倍。可以使用layout->setColumnStretch(1,10);layout->setColumnStretch(2,20);将它们的伸展因素设置为10和20。

GroupBox的使用,加入QFormLayout

  QFormLayout和QGridLayout类似,作为表格方式,通常是N行2列,第0列为QLabel或者QString,实际都是摆放一个QString,第1列为组建。并前将第一列的QLabel和第1列的组件进行了setBuddy,也就是QLabel如果定义了快捷方式,就会直接定位到组建上去。例如layout->addRow(tr("Line &1:"),new QLineEdit);相当于在QGridLayout的某个顺序位置上,加上一个QLable,其中快捷键为“1”,以及一个QLineEdit的widget。

formGroupBox = new QGroupBox(tr("Form Layout"));
QFormLayout * layout = new QFormLayout;

layout->addRow(tr("Line &1:"),new QLineEdit);
layout->addRow(tr("Line &2,long text:"),new QComboBox);
layout->addRow(tr("Line &3:"),new QSpinBox);
formGroupBox -> setLayout(layout);
mainLayout -> addWidget(formGroupBox);

QDialogButtonBox的使用

  在dialog中,我们可以使用自带的button,通才是OK,Cancel。在按这些键的时候,对应的singal为accepted和rejected,我们可以和具体SLOT函数对应起来,在这里我们简单地和系统默认函数对应达到关闭的效果。

buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok |QDialogButtonBox::Cancel);
connect(buttonBox,SIGNAL(accepted()),this,SLOT(accept()));
connect(buttonBox,SIGNAL(rejected()),this,SLOT(reject()));
mainLayout -> addWidget(buttonBox);

相关链接:我的MeeGo/Moblin相关文章

你可能感兴趣的:(layout)