如何以打包的方式初始化布局,减少布局之间的space?
How to initialize layouts in a packed way, reducing space between layouts?
我有几个 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 中的小部件。即,水平布局之间的每行小部件之间有很多 space。
调整 window 大小时,需要有一个小部件不会超出的最小尺寸。但是当调整大小时,它们会均匀分布。
如果我调整 window 的大小,我可以让它看起来像我想要的那样。但我不知道如何首先以编程方式将 window 初始化为正确的大小。当我启动我的应用程序时,我必须通过调整 window 的大小来最小化以使小部件看起来包装得很好。
想法?
programmatically initialize the window to the right size in the first place.
使用 adjustSize();
设置 window 适合您的小部件的尺寸。
What I'm trying to do is pack the widgets within each QHBoxLayout
closer to the widgets in the QHBoxLayout next down.
QVBoxLayout
不会直接这样做..,而是使用 QFormLayout
,这些行不会 单独展开 ,这些行只是扩展到他们的内容。您可以将行之间的 间距 调整为合适的 int
值,QFormLayout::setVerticalSpacing(40);
.. 以及列之间 QFormLayout::setHorizontalSpacing(40);
而且,恕我直言,每次 window 调整大小时 操纵 小部件的大小或行间距没有意义.. 如果你的 window 有一些小部件 .. 它看起来会如您所愿。
样本:
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
我有几个 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 中的小部件。即,水平布局之间的每行小部件之间有很多 space。
调整 window 大小时,需要有一个小部件不会超出的最小尺寸。但是当调整大小时,它们会均匀分布。
如果我调整 window 的大小,我可以让它看起来像我想要的那样。但我不知道如何首先以编程方式将 window 初始化为正确的大小。当我启动我的应用程序时,我必须通过调整 window 的大小来最小化以使小部件看起来包装得很好。
想法?
programmatically initialize the window to the right size in the first place.
使用 adjustSize();
设置 window 适合您的小部件的尺寸。
What I'm trying to do is pack the widgets within each QHBoxLayout closer to the widgets in the QHBoxLayout next down.
QVBoxLayout
不会直接这样做..,而是使用 QFormLayout
,这些行不会 单独展开 ,这些行只是扩展到他们的内容。您可以将行之间的 间距 调整为合适的 int
值,QFormLayout::setVerticalSpacing(40);
.. 以及列之间 QFormLayout::setHorizontalSpacing(40);
而且,恕我直言,每次 window 调整大小时 操纵 小部件的大小或行间距没有意义.. 如果你的 window 有一些小部件 .. 它看起来会如您所愿。
样本:
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