C++ Qt布局系统(QTextEdit的最小尺寸为';t)
我有问题的Qt布局系统。第一张照片是我得到的,第二张是我想要的。 我有一个垂直拆分器和两个小部件在里面。第一个小部件的扩展策略和拉伸因子为1。第二个具有最小高度策略、最小高度100和拉伸系数0。开始后的结果应该是第二张图片,但实际上它是第一张图片,我需要手动拖动拆分器下来。问题在哪里C++ Qt布局系统(QTextEdit的最小尺寸为';t),c++,qt,C++,Qt,我有问题的Qt布局系统。第一张照片是我得到的,第二张是我想要的。 我有一个垂直拆分器和两个小部件在里面。第一个小部件的扩展策略和拉伸因子为1。第二个具有最小高度策略、最小高度100和拉伸系数0。开始后的结果应该是第二张图片,但实际上它是第一张图片,我需要手动拖动拆分器下来。问题在哪里 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QSizePolicy sp;
QSplitter * splitter = new QSplitter(Qt::Vertical);
splitter->setHandleWidth(1);
splitter->setChildrenCollapsible(false);
sp.setHorizontalPolicy(QSizePolicy::Expanding);
sp.setVerticalPolicy(QSizePolicy::Expanding);
splitter->setSizePolicy(sp);
QWidget * topWidget = new QWidget(splitter);
sp.setVerticalStretch(1);
topWidget->setSizePolicy(sp);
topWidget->setMinimumHeight(200);
QWidget * bottomWidget = new QWidget(splitter);
sp.setVerticalStretch(0);
bottomWidget->setSizePolicy(sp);
QTextEdit * edit = new QTextEdit();
edit->setFrameStyle(QFrame::NoFrame);
edit->setMinimumSize(0, 100);
sp.setVerticalPolicy(QSizePolicy::Minimum);
edit->setSizePolicy(sp);
QVBoxLayout * bottomWidgetLayout = new QVBoxLayout(bottomWidget);
bottomWidgetLayout->addWidget(edit);
bottomWidget->setLayout(bottomWidgetLayout);
splitter->setStretchFactor(0, 1);
splitter->setStretchFactor(1, 0);
this->centralWidget()->layout()->addWidget(splitter);
}
正如您所看到的
QSizePolicy::Minimum
具有growtflag
,当您需要带有ShrinkFlag
的策略时,如果您想告诉小部件收缩,请尝试使用QSizePolicy::Maximum
。qspliter
在大小方面有一些非常奇怪的行为,但是,通过使用setSizes(const QList&)
函数,您可以在第二个屏幕截图中获得所需的外观。文件
文件对尺寸的处理方式有点不清楚(IMO),但以下引用是最重要的:
拆分器小部件的总体大小不受影响。相反,根据大小的相对权重,在小部件之间分配任何额外/缺少的空间
您可以利用这一点,结合第二个小部件的最小尺寸100像素,以实现一个比率(即3:2,其中顶部小部件比底部大50%),或者强制第二个小部件达到其最小尺寸
要获得大约3:2的比率,请将其替换为两个setStretchFactor()
调用:
QList<int> sizes;
sizes << 300 << 200;
splitter->setSizes(sizes);
QList大小;
大小我想要GrowFlag策略,但只有在用户需要时才通过拆分器,这就是为什么我要设置QSizePolicy::Minimum和stretch factor 0,然后如果有其他小部件具有QSizePolicy::Expandable和stretchFactor>0,它将获得整个“未使用”空间,所以我的文本编辑的高度应该只有100px。开始屏幕应该看起来像第二张图片Splite->setStretchFactor(0,1);拆分器->设置应力系数(1,0);这些线条看起来很糟糕
QList<int> sizes;
sizes << 100 << 1; //Really, the first size could be any large value you choose
splitter->setSizes(sizes);