Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt布局系统(QTextEdit的最小尺寸为';t)_C++_Qt - Fatal编程技术网

C++ Qt布局系统(QTextEdit的最小尺寸为';t)

C++ Qt布局系统(QTextEdit的最小尺寸为';t),c++,qt,C++,Qt,我有问题的Qt布局系统。第一张照片是我得到的,第二张是我想要的。 我有一个垂直拆分器和两个小部件在里面。第一个小部件的扩展策略和拉伸因子为1。第二个具有最小高度策略、最小高度100和拉伸系数0。开始后的结果应该是第二张图片,但实际上它是第一张图片,我需要手动拖动拆分器下来。问题在哪里 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->

我有问题的Qt布局系统。第一张照片是我得到的,第二张是我想要的。 我有一个垂直拆分器和两个小部件在里面。第一个小部件的扩展策略和拉伸因子为1。第二个具有最小高度策略、最小高度100和拉伸系数0。开始后的结果应该是第二张图片,但实际上它是第一张图片,我需要手动拖动拆分器下来。问题在哪里

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);