Qt:在这种情况下,应该使用什么布局或布局组合?
我正在从事一个Qt项目,为此项目,我需要设计如下内容: 到目前为止,我已经在Qt Creator中进行了设计,并且我已经准备好了组件,但是当我尝试在不同的布局中添加小部件时,我没有得到我想要的形状。我应该怎么做才能调整我的应用程序的大小 捕获:Qt:在这种情况下,应该使用什么布局或布局组合?,qt,qwidget,qlayout,Qt,Qwidget,Qlayout,我正在从事一个Qt项目,为此项目,我需要设计如下内容: 到目前为止,我已经在Qt Creator中进行了设计,并且我已经准备好了组件,但是当我尝试在不同的布局中添加小部件时,我没有得到我想要的形状。我应该怎么做才能调整我的应用程序的大小 捕获: 边栏有固定的宽度,这意味着对于窗口大小的水平增量,边栏的水平宽度不会增加。边栏本身就是一个小部件 上横杆的垂直宽度是固定的(如果可能)。这意味着,在垂直窗口大小增加期间,上横杆不能垂直变宽。它本身也是一个小部件 侧边栏旁边的小部件位于qstacked
- 边栏有固定的宽度,这意味着对于窗口大小的水平增量,边栏的水平宽度不会增加。边栏本身就是一个小部件
- 上横杆的垂直宽度是固定的(如果可能)。这意味着,在垂直窗口大小增加期间,上横杆不能垂直变宽。它本身也是一个小部件
- 侧边栏旁边的小部件位于
中qstackedwidget
- 第1步:V(W1,W2)=L1
- 第二步:H(W3,L1)=L2
- 第三步:V(W4,L2)=L3
- 步骤4:将L3设置为StackedWidget的当前页面的布局
- 步骤5:H(W5,StackedWidget)=L4
- 第6步:H(W6,一个间隔垫圈,W7)=L5
- 第7步:V(L5、L4)
下面是层次结构:
只是为了好玩,代码版本,使用最少的优化代码
#include "mainwindow.h"
#include <QBoxLayout>
#include <QLabel>
#include <QStackedWidget>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// Ingredients (taken from the mockup from top-left to bottom-right)
QFrame *upperBar = new QFrame;
QLabel *upperIcon = new QLabel("icon");
QLabel *profilePicture = new QLabel("profile picture");
QFrame *sideBar = new QFrame;
QLabel *sideItemA = new QLabel("Item A");
QLabel *sideItemB = new QLabel("Item B");
QStackedWidget *contentStack = new QStackedWidget;
QFrame *contentPage1 = new QFrame;
QLabel *page1WidgetA = new QLabel("I am widget A");
QLabel *page1WidgetB = new QLabel("I am widget B");
QLabel *page1WidgetC = new QLabel("I am widget C");
QLabel *page1WidgetD = new QLabel("I am widget D");
QWidget *centralWidget = new QWidget;
// The needed layouts:
QHBoxLayout *upperBarLayout = new QHBoxLayout;
QVBoxLayout *sideBarLayout = new QVBoxLayout;
QGridLayout *page1GridLayout = new QGridLayout;
QGridLayout *centralLayout = new QGridLayout;
// Let's connect the pieces:
/* First we setup the upperbar: */
upperBarLayout->addWidget(upperIcon, 1, Qt::AlignLeft);
upperBarLayout->addWidget(profilePicture, 3, Qt::AlignRight);
upperBar->setLayout(upperBarLayout);
upperBar->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
/* Then we setup the sidebar: */
sideBarLayout->addWidget(sideItemA);
sideBarLayout->addWidget(sideItemB);
sideBarLayout->addStretch();
sideBar->setLayout(sideBarLayout);
sideBar->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
/* Then we setup the content stacked widget */
page1GridLayout->addWidget(page1WidgetA, 0, 0, 3, 1);
page1GridLayout->addWidget(page1WidgetB, 0, 1, 1, 1);
page1GridLayout->addWidget(page1WidgetC, 1, 1, 2, 1);
page1GridLayout->addWidget(page1WidgetD, 3, 0, 1, 2);
contentPage1->setLayout(page1GridLayout);
contentStack->addWidget(contentPage1);
contentStack->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
/* Finally we setup the main elements into the central layout... */
centralLayout->addWidget(upperBar, 0, 0, 1, 2);
centralLayout->addWidget(sideBar, 1, 0, 1, 1);
centralLayout->addWidget(contentStack, 1, 1, 1, 1);
centralWidget->setLayout(centralLayout);
setCentralWidget(centralWidget);
/* Let's color it a little to better realize the positioning: */
setStyleSheet("QWidget {"
"border: 1px solid black;"
"color: red"
"}");
}
MainWindow::~MainWindow()
{
}
#包括“mainwindow.h”
#包括
#包括
#包括
主窗口::主窗口(QWidget*父窗口)
:QMainWindow(父级)
{
//成分(从左上到右下取自模型)
QFrame*上横杆=新QFrame;
QLabel*upperIcon=新的QLabel(“图标”);
QLabel*profilePicture=新的QLabel(“配置文件图片”);
QFrame*侧栏=新QFrame;
QLabel*sideItemA=新的QLabel(“项目A”);
QLabel*sideItemB=新的QLabel(“项目B”);
QStackedWidget*contentStack=新的QStackedWidget;
QFrame*contentPage1=新QFrame;
QLabel*page1WidgetA=新的QLabel(“我是小部件A”);
QLabel*page1WidgetB=新的QLabel(“我是小部件B”);
QLabel*page1WidgetC=新的QLabel(“我是小部件C”);
QLabel*page1WidgetD=新的QLabel(“我是widget D”);
QWidget*centralWidget=新的QWidget;
//所需的布局:
QHBoxLayout*upperBarLayout=新的QHBoxLayout;
QVBoxLayout*侧边栏布局=新的QVBoxLayout;
QGridLayout*page1GridLayout=新QGridLayout;
QGridLayout*centralLayout=新的QGridLayout;
//让我们把这些部分连接起来:
/*首先,我们设置上栏:*/
upperBarLayout->addWidget(upperIcon,1,Qt::AlignLeft);
upperBarLayout->addWidget(profilePicture,3,Qt::AlignRight);
upperBar->setLayout(upperBarLayout);
大写->设置策略(QSizePolicy::Expansing,QSizePolicy::Fixed);
/*然后我们设置侧边栏:*/
sideBarLayout->addWidget(sideItemA);
sideBarLayout->addWidget(sideItemB);
边栏布局->添加拉伸();
边栏->设置布局(边栏布局);
边栏->设置策略(QSizePolicy::固定,QSizePolicy::扩展);
/*然后我们设置内容堆叠小部件*/
page1GridLayout->addWidget(page1WidgetA,0,0,3,1);
page1GridLayout->addWidget(page1WidgetB,0,1,1,1);
page1GridLayout->addWidget(page1WidgetC,1,1,2,1);
page1GridLayout->addWidget(page1WidgetD,3,0,1,2);
contentPage1->setLayout(page1GridLayout);
contentStack->addWidget(contentPage1);
contentStack->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
/*最后,我们将主要元素设置到中心布局中*/
centralLayout->addWidget(上栏,0,0,1,2);
centralLayout->addWidget(边栏,1,0,1,1);
centralLayout->addWidget(contentStack,1,1,1);
centralWidget->setLayout(centralLayout);
setCentralWidget(centralWidget);
/*让我们将其涂上一点颜色,以便更好地实现定位:*/
setStyleSheet(“QWidget{”
“边框:1px纯黑;”
“颜色:红色”
"}");
}
MainWindow::~MainWindow()
{
}
结果如下:
有什么方法可以使widget_5具有固定大小?我可以让widget_1、widget_2、widget_3、widget_4成为堆栈窗口的一部分吗?什么是“堆栈窗口”呢?堆栈窗口应该是“堆叠的”,而在图片中,widget_1~4是“分开的”。@ShakibAhmed如果你试图制作一个新的布局,其中widget_1~4一起放置在堆栈窗口中,答案是肯定的。但是在你的问题中,你应该问堆叠窗口的版本,而不是当前的版本。对不起,首先对不起,因为我写了堆叠窗口,我指的是堆叠小部件。(犯错误是人类的)第二,是的,我应该在我的问题中写下这句话。很好的解释和我的ui工作!Qt布局第一次看起来很简单!我希望边栏的宽度至少是固定的。如果可能的话,上杆的宽度。我该怎么办?这种设计在web框架下很容易实现,QT可以做到吗?是的,QT可以做到。这使得我以前的答案完全过时了,我将对其进行编辑,也许您也应该删除以前的版本并将其清楚地表达出来,从而对您的问题进行编辑。你不应该再做这种事情了,这是一个非常糟糕的行为。我猜,非常抱歉,因为侧边栏通常是固定宽度的,我不必在这里明确提及。我错了。我已将我的答案更新为堆叠小部件的版本,请检查并查看是否有任何进一步的问题。此外,边栏应该提供一些相应的信号,以便在
QStackedWidget
的不同页面之间切换。