Почему виджеты «трясутся» при изменении размера окна?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Почему виджеты «трясутся» при изменении размера окна?

Сообщение Anonymous »


Изображение

В моем дизайне пользовательского интерфейса мне нужно четыре QPushButton оставайтесь в правой части окна. Поэтому я создаю HBoxLayout для CentralWidget и добавляю к нему QWidget и VBoxLayout(который содержит четыре кнопки). Коэффициент растяжения для VBoxLayout установлен на 0, поэтому он остается с правой стороны с минимальной шириной.
Однако, когда я пытаюсь изменить размер окна с слева мои QPushButtons как бы «трясутся» во время изменения размера, что очень плохо выглядит.
Так в чем может быть правильная причина этого? Есть ли какое-нибудь решение, позволяющее избежать такой «тряски»?
Воспроизводимый пример:
mainwindow.ui:


MainWindow



0
0
800
600



MainWindow













PushButton












0
0
800
23









Или сгенерированный файл ui_mainwindow.h:
/********************************************************************************
** Form generated from reading UI file 'mainwindow.ui'
**
** Created by: Qt User Interface Compiler version 5.15.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MAINWINDOW_H
#define UI_MAINWINDOW_H

#include
#include
#include
#include
#include
#include
#include
#include
#include

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
public:
QWidget *centralwidget;
QHBoxLayout *horizontalLayout_2;
QHBoxLayout *horizontalLayout;
QWidget *widget;
QVBoxLayout *verticalLayout_2;
QPushButton *pushButton;
QMenuBar *menubar;
QStatusBar *statusbar;

void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(800, 600);
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
horizontalLayout_2 = new QHBoxLayout(centralwidget);
horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
horizontalLayout = new QHBoxLayout();
horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
widget = new QWidget(centralwidget);
widget->setObjectName(QString::fromUtf8("widget"));

horizontalLayout->addWidget(widget);

verticalLayout_2 = new QVBoxLayout();
verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
pushButton = new QPushButton(centralwidget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));

verticalLayout_2->addWidget(pushButton);

horizontalLayout->addLayout(verticalLayout_2);

horizontalLayout->setStretch(0, 1);

horizontalLayout_2->addLayout(horizontalLayout);

MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
menubar->setObjectName(QString::fromUtf8("menubar"));
menubar->setGeometry(QRect(0, 0, 800, 23));
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName(QString::fromUtf8("statusbar"));
MainWindow->setStatusBar(statusbar);

retranslateUi(MainWindow);

QMetaObject::connectSlotsByName(MainWindow);
} // setupUi

void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
pushButton->setText(QCoreApplication::translate("MainWindow", "PushButton", nullptr));
} // retranslateUi

};

namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MAINWINDOW_H

mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp:
#include "mainwindow.h"
#include "./ui_mainwindow.h"

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

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

main.cpp:
#include "mainwindow.h"

#include

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}


Подробнее здесь: https://stackoverflow.com/questions/628 ... ng-resized
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»