当前位置:   article > 正文

qt用代码实现组件自适应窗口大小_qt页面布局调整不了窗口大小

qt页面布局调整不了窗口大小

之前做软件课设的时候,发现了一个问题,界面无法放大,也就是无法适应窗口的大小变化,对于用户来说很不友好。后来我在网上找了很多资料,但是发现大部分都是使用qt自带的布局或者加入弹簧来实现的组件自适应窗口大小,但这样做有一个缺点,就是界面设计中用布局的话会导致整个页面都被组件覆盖,使用弹簧的话会发现组件并不会变大只是位置不变。因此我们这里选择通过重写resizeEvent函数的方式来获取窗口大小变化的比例,从而确定组件随窗口大小变化后的位置和大小。

代码如下:

比如我下面这个是login.h文件

  1. #pragma execution_character_set("utf-8")
  2. #ifndef LOGIN_H
  3. #define LOGIN_H
  4. #include <QWidget>
  5. #include "ui_login.h"
  6. #include <QResizeEvent>
  7. #include <QRect>
  8. namespace Ui {
  9. class login;
  10. }
  11. class login : public QWidget
  12. {
  13. Q_OBJECT
  14. public:
  15. explicit login(QWidget *parent = 0);
  16. static QString number;
  17. static int id;
  18. ~login();
  19. void resizeEvent(QResizeEvent* event);
  20. private slots:
  21. void on_loginButton_clicked();
  22. void on_EditButton_clicked();
  23. void on_exitButton_clicked();
  24. private:
  25. Ui::login *ui;
  26. QList<QWidget*> m_Widget; //存储所有的子控件
  27. QMap<QWidget*, QRect> m_WidgetRect; //保存每个子控件的初始大小
  28. };
  29. #endif // LOGIN_H

下面是需要加在login.c文件里的东西

构造函数里面这样写

  1. login::login(QWidget *parent) :
  2. QWidget(parent),
  3. ui(new Ui::login)
  4. {
  5. ui->setupUi(this);
  6. this->setWindowTitle(QStringLiteral("登录"));
  7. //获取所有的控件
  8. m_Widget = this->findChildren<QWidget*>(QString(), Qt::FindDirectChildrenOnly);
  9. //遍历控件获取大小和位置
  10. foreach(auto widget, m_Widget)
  11. {
  12. m_WidgetRect.insert(widget, QRect(widget->x(), widget->y(), widget->width(), widget->height()));
  13. }
  14. }

然后重写resizeEvent函数

  1. void login::resizeEvent(QResizeEvent* event) //控件大小和代码
  2. {
  3. float width = this->width() * 1./ 524;
  4. float height = this->height() * 1./340;
  5. for ( auto it= m_WidgetRect.begin(); it != m_WidgetRect.end(); it++ )
  6. {
  7. it.key()->setGeometry(it.value().x() * width, it.value().y() * height, it.value().width() * width, it.value().height() * height);
  8. }
  9. QWidget::resizeEvent(event);
  10. }

这样写完就能实现组件自适应窗口大小了

放大前:

放大后:

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/94850
推荐阅读
相关标签
  

闽ICP备14008679号