页面大小改变大小的子窗口
时间: 2024-02-06 08:12:37 浏览: 25
如果你想让窗口大小改变时,子窗口也随之自动调整大小,可以使用QWidget的resizeEvent()方法。该方法会在窗口大小改变时被调用,你可以在该方法中处理子控件的大小和位置。
以下是一个简单的示例代码,演示如何在Qt中使用resizeEvent()方法实现子窗口随页面大小改变:
```cpp
#include <QApplication>
#include <QMainWindow>
#include <QLabel>
#include <QPushButton>
#include <QVBoxLayout>
class MyWidget : public QWidget
{
public:
MyWidget(QWidget *parent = nullptr)
: QWidget(parent)
{
QVBoxLayout *layout = new QVBoxLayout();
label = new QLabel("Hello World!", this);
button = new QPushButton("Click me!", this);
layout->addWidget(label);
layout->addWidget(button);
setLayout(layout);
}
protected:
void resizeEvent(QResizeEvent *event) override
{
QWidget::resizeEvent(event);
// 在窗口大小改变时调整子控件的大小和位置
int width = event->size().width();
int height = event->size().height();
int buttonWidth = 100;
int buttonHeight = 30;
int labelWidth = width - buttonWidth;
int labelHeight = height - buttonHeight;
label->setGeometry(0, 0, labelWidth, labelHeight);
button->setGeometry(labelWidth, labelHeight, buttonWidth, buttonHeight);
}
private:
QLabel *label;
QPushButton *button;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建主窗口
QMainWindow mainWindow;
mainWindow.setWindowTitle("My Application");
// 创建子控件
MyWidget *myWidget = new MyWidget();
// 设置子控件为中央控件
mainWindow.setCentralWidget(myWidget);
// 显示主窗口
mainWindow.show();
return app.exec();
}
```
在上面的示例代码中,我们创建了一个自定义的QWidget子类MyWidget,它包含一个QLabel和一个QPushButton。在MyWidget类中,我们重写了resizeEvent()方法,在该方法中处理QLabel和QPushButton的大小和位置。具体来说,我们在resizeEvent()方法中获取窗口的大小,然后根据窗口大小计算出QLabel和QPushButton的大小和位置,并使用setGeometry()方法设置它们的大小和位置。
最后,我们将MyWidget对象设置为主窗口的中央控件,并显示主窗口。当你调整窗口大小时,QLabel和QPushButton将会随之自动调整大小和位置。