我有几个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中的小部件附近。也就是说,水平布局之间每行小部件之间有很多空间。
调整窗口大小时,窗口小部件必须具有最小尺寸才能超越。但是当调整大小时,它们会均匀分布。
如果我调整窗口大小,我可以让它看起来像我想要的那样。但我不知道如何首先以编程方式将窗口初始化为正确的大小。当我启动我的应用程序时,我必须通过调整窗口大小来最小化以使小部件显得很好。
思想?
答案 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