Qt:setGeometry在应用启动时不会调整大小

时间:2017-04-03 21:23:27

标签: c++ qt qwidget

我在我的学位课程中工作,我的GUI存在问题。

我已经在一个单独的项目中测试了不同小部件的位置,以简化我尝试的代码。

这是我的问题: 我创建了一个重载的resizeEvent来调整我的所有小部件的大小。除了一件事之外,它的效果很好:

在我的测试程序启动后,小部件的大小不合适,我需要手动调整窗口大小一次以强制调整大小,即使setGeometry调用在构造函数中,如下面的代码所示

·H

MainWindow.h
-------------
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QGridLayout>
#include <QGroupBox>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void resizeEvent ( QResizeEvent * event );

private:
    Ui::MainWindow *ui;

    QGroupBox *g1;
    QGroupBox *g2;
    QPushButton *but2;
    QGridLayout *lay;
};

#endif // MAINWINDOW_H

的.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    this->lay = new QGridLayout();
    this->g1 = new QGroupBox("g1");
    this->g2 = new QGroupBox("g2");
    this->but2 = new QPushButton("But2");
    this->lay->addWidget(g1, 0, 0, 1, 1);
    this->lay->addWidget(but2, 0, 1, 1, 1);
    this->lay->addWidget(g2, 1, 0, 1, 2);
    this->g1->setBaseSize(60, 60);
    this->g2->setBaseSize(60, 60);

    this->ui->centralWidget->setLayout(lay);
    this->ui->centralWidget->setMinimumSize(100, 100);

    this->but1->setHidden(true);

    this->g1->setGeometry(5, 1, (this->ui->centralWidget->width())55, (this->ui->centralWidget->height())-83);
    this->but2->setGeometry(this->g1->width()+10 , 6, 40, (this->ui->centralWidget->height())-88);
    this->g2->setGeometry(5, this->g1->height()+5, (this->ui->centralWidget->width())-10, 70);
 }

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::resizeEvent ( QResizeEvent * event )
{
    this->g1->setGeometry(5, 1, (this->ui->centralWidget->width())-55, (this->ui->centralWidget->height())-89);
    this->but2->setGeometry(this->g1->width()+10 , 6, 40, (this->ui->centralWidget->height())-88);
    this->g2->setGeometry(5, this->g1->height()+5, (this->ui->centralWidget->width())-10, 70);
}

我正在尝试找到一个解决方案,以便小部件从一开始就具有良好的大小

更新以下是两张图片:

调整大小之前

before resize

调整大小后

after resize

问题在于,当内部没有任何内容时,QGroupBox只需要按下它旁边按钮的大小,我希望它从一开始就更大

1 个答案:

答案 0 :(得分:0)

而不是interface IEntity { int Id { get; } } ,在将小部件添加到布局时(而且也可能在resizeEvent()中)应该使用拉伸因子,例如......

await _repo.GetAsync<Class2>(id, x => x.class1);

其他小部件的方式相同。