如何以打包的方式初始化布局,减少布局之间的空间?

时间:2018-03-30 22:27:00

标签: c++ qt qt5 qlayout qformlayout

我有几个QHBoxLayout都包含在QVBoxLayout中。

QHBoxLayout *hb1 = new QHBoxLayout;
// ...
QHBoxLayout *hb2 = new QHBoxLayout;
// ...

QWidget *hb1_layout = new QWidget;
hb1_layout->setLayout(hb1);

QWidget *hb2_layout = new QWidget;
hb2_layout->setLayout(hb2);

// ...

QVBoxLayout *ps = new QVBoxLayout;
ps->addWidget(hb1_layout);
ps->addWidget(hb2_layout);
ps->addWidget(hb3_layout);
ps->addWidget(hb4_layout);

我尝试做的是将每个QHBoxLayout中的小部件打包到下一个QHBoxLayout中的小部件附近。也就是说,水平布局之间每行小部件之间有很多空间。

调整窗口大小时,窗口小部件必须具有最小尺寸才能超越。但是当调整大小时,它们会均匀分布。

如果我调整窗口大小,我可以让它看起来像我想要的那样。但我不知道如何首先以编程方式将窗口初始化为正确的大小。当我启动我的应用程序时,我必须通过调整窗口大小来最小化以使小部件显得很好。

思想?

1 个答案:

答案 0 :(得分:1)

  

首先以编程方式将窗口初始化为正确的大小。

使用adjustSize();设置适合您小部件的窗口大小。

  

我想要做的是在每个QHBoxLayout中打包小部件   接下来接近QHBoxLayout中的小部件。

QVBoxLayout不会直截了当地......而是使用QFormLayout,这些行本身不会展开,这些行只会扩展为他们的内容。您可以将行之间的间距调整为合适的int值,QFormLayout::setVerticalSpacing(40); ..以及列QFormLayout::setHorizontalSpacing(40);之间

并且,恕我直言,没有点操纵小部件的大小或行间距每次窗口都会调整大小...如果你的窗口有一些小部件..它会看起来像你期望的那样。

样品:

  QFormLayout * const formlayout = new QFormLayout(this->ui->centralWidget);
  QHBoxLayout *hb1 = new QHBoxLayout;
  QHBoxLayout *hb2 = new QHBoxLayout;
  QHBoxLayout *hb3 = new QHBoxLayout;
  QLabel *hb1_layout = new QLabel("Short Text1");
  hb1_layout->setStyleSheet("background-color: rgb(212, 192, 255)");
  hb1_layout->setFixedSize(100,100);
  hb1->addWidget(hb1_layout);
  formlayout->addRow(hb1);
  //
  QLabel *hb2_layout = new QLabel("Long Long Long Text");
  hb2_layout->setFixedSize(200,200);
  hb2_layout->setStyleSheet("background-color: rgb(25, 255, 192)");
  hb2->addWidget(hb2_layout);
  formlayout->addRow(hb2);
  //
  QLabel *hb3_layout = new QLabel("Long Long Long Text too \n Long Long Long Text too \n Long Long Long Text too");
  hb3_layout->setStyleSheet("background-color: rgb(100, 25, 25)");
  hb3_layout->setFixedSize(300,300);
  hb3->addWidget(hb3_layout);
  formlayout->addRow(hb3);
  //
  formlayout->setHorizontalSpacing(40); // between columns
  formlayout->setVerticalSpacing(10); // between rows
  adjustSize(); // Window to contents