0
点赞
收藏
分享

微信扫一扫

QT(6)Basic Layout学习


在这里,我们学习下面几个方面:


  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的一个子类)

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

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

QT(6)Basic Layout学习_qt

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列。

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);


举报

相关推荐

0 条评论