-2
我正在爲我的學位項目工作,並且我遇到了GUI問題。Qt:setGeometry不在應用程序的調整中調整大小
我已經測試了不同部件在獨立項目上的位置以簡化我嘗試的代碼。
這是我的問題: 我創建了一個超載的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);
}
我試圖找到一個解決方案,以使窗口小部件以及從一開始就大小
UPDATE這裏有兩張圖片:
之前調整
調整後
的問題是,當裏面有什麼,該QGroupBox只取按鈕的大小,在它旁邊,我希望它從一開始就更大
我強烈建議不要覆蓋'resizeEvent',在整個大型項目中看到這一點,並導致各種問題。相反,嘗試通過佈局和間隔條來完成所需的外觀,這通常是可能的,並且最終更平滑。如果您將包含初始和期望外觀的屏幕截圖,那麼也可以有人幫助您。 – Bowdzone
我同意,但我不認爲這裏的問題是resizeevent,因爲它調整我的窗口時,它工作得很好。我已經覆蓋了它,因爲我的不同佈局的大小取決於它們中哪些隱藏或可見。我在這裏遇到的問題是,在啓動應用程序時,即使它是構造函數的結尾,setGeometry也不會執行。我試圖在窗口中爲QCoreApplication :: processEvent或widget.update添加一些行,但沒有任何反應。 –
是的,但它仍然是一個XY問題。小部件的幾何形狀取決於其他小部件,這意味着在我可以想到調整大小之前,所有東西都必須繪製一次。所以我會找到另一種解決方法,讓你不必頭疼。 – Bowdzone