当前位置: 首页 > news >正文

Qt 窗口的尺寸

默认尺寸

对于一个Qt的窗口(继承于QWidget),获取其窗体尺寸的方法size();

以一个Qt创建Qt Widgets Application项目的默认生成代码为基础,做如下测试

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{qDebug()<<"MainWindow::MainWindow:"<<this->size();this->resize(1200,800);qDebug()<<"MainWindow::MainWindow:"<<this->size();
}

第一个this->size()输出QSize(640, 480),即MainWindow具有默认的尺寸640*480

第二个this->size()输出QSize(1200, 800)

实际上,继承于QWidget的控件,例如QPushButton,QLineEdit等也会获得默认的尺寸640*480

    QWidget* page=new QWidget;qDebug()<<".."<<page->size();QPushButton* btn=new QPushButton;qDebug()<<".."<<btn->size();QLineEdit* edt=new QLineEdit;qDebug()<<".."<<edt->size();

以上输出都是QSize(640, 480)

布局之后的尺寸
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{qDebug()<<"MainWindow::MainWindow:"<<this->size();this->resize(1200,800);QWidget* page=new QWidget;qDebug()<<".."<<page->size();QVBoxLayout* layout=new QVBoxLayout(page);QPushButton* btn=new QPushButton;qDebug()<<".."<<btn->size();QLineEdit* edt=new QLineEdit;qDebug()<<".."<<edt->size();layout->addWidget(btn);layout->addWidget(edt);this->setCentralWidget(page);qDebug()<<".."<<page->size();qDebug()<<".."<<btn->size();qDebug()<<".."<<edt->size();qDebug()<<"MainWindow::MainWindow:"<<this->size();//当界面显示出来之后,点击按钮查看控件尺寸connect(btn,&QPushButton::clicked,[=]{qDebug()<<".."<<page->size();qDebug()<<".."<<btn->size();qDebug()<<".."<<edt->size();});
}

以上代码this->setCentralWidget(page);之后的三个打印对应的尺寸应该是多少?

依然还是 QSize(640, 480)

而connect()方法中的三个打印对应的值则分别为

.. QSize(1200, 800)
.. QSize(1178, 28)
.. QSize(1178, 24)

以上代码说明两个问题:

(1)将控件加入到布局,然后放入了父窗体中,则控件的尺寸会根据父窗体的布局重新设置

(2)控件尺寸的重新设置发生在窗体显示出来后(绘制时)

 固定尺寸

 以下代码实现在主窗体上布局多个按钮和子窗体,实现点击按钮切换每个子窗体的隐藏和可见。

但是存在问题:

(1)4个子窗体平分了主窗体的尺寸;

(2)隐藏一个子窗体后,其他的子窗体尺寸被更改(窗体重绘时会重新设置尺寸)

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{qDebug()<<"MainWindow::MainWindow:"<<this->size();this->resize(1200,800);QWidget* page=new QWidget;QVBoxLayout* layout=new QVBoxLayout(page);QScrollArea* contentArea=new QScrollArea;contentArea->setWidgetResizable(true);contentArea->setWidget(page);for(int i=0;i<4;i++){QWidget* p=new QWidget;//设置窗体背景色,使得区分背景,可见p->setStyleSheet("background-color:green");QPushButton* b=new QPushButton;layout->addWidget(b);layout->addWidget(p);connect(b,&QPushButton::clicked,[p]{//点击按钮后窗体切换显示和隐藏效果p->setVisible(!p->isVisible());});}this->setCentralWidget(contentArea);
}

如果需要设置子窗体在重绘时不改变尺寸,那么需要设置其尺寸

例如在QWidget* p=new QWidget;下方增加 p->setFixedHeight(300);

这样隐藏和显示一个子窗体不会对任意其他的子窗体的尺寸造成影响。

更改后会发现,当隐藏完所有的子窗体后,所有的按钮被均匀布局在了主窗体,如果想要的效果是按钮从主窗体从上往下紧密排列,可以在layout添加完所有的控件和窗口后,添加一个stretch,即在this->setCentralWidget(contentArea);上一行添加layout->addStretch();

http://www.lryc.cn/news/205631.html

相关文章:

  • 游戏数据分析对于运营游戏平台的重要性
  • 微信群发消息的正确打开方式,让你的社交更高效!
  • HTML5语义化标签 header 的详解
  • SpringCloud复习:(2)@LoadBalanced注解的工作原理
  • vue钩子函数以及例子
  • redis场用命令及其Java操作
  • UG\NX二次开发 同时设置多个对象的高亮状态 UF_DISP_set_highlights
  • Qt+树莓派4B 手动设置系统日期和时间
  • 用大顶堆和小顶堆实现优先队列
  • PDCA项目开发环境搭建说明
  • Git简明教程
  • 数据结构顺序表(C语言版)
  • 新手如何备考学习PMP?
  • [卷积神经网络]FasterNet论文解析
  • 知识图谱+推荐系统 文献阅读
  • shell_39.Linux参数测试
  • 3D模型格式转换工具HOOPS Exchange助力SIMCON搭建注塑项目
  • Linux_虚拟内存机制
  • 淘宝官方开放平台API接口获得店铺的所有商品、商品id、商品标题、销量参数调用示例
  • Java Spring 通过 AOP 实现方法参数的重新赋值、修改方法参数的取值
  • Real3D FlipBook jQuery Plugin 3.41 Crack
  • Pytorch:model.train()和model.eval()用法和区别,以及model.eval()和torch.no_grad()的区别
  • Linux CentOS 8(firewalld的配置与管理)
  • C复习-指针
  • Runnable和Thread的区别,以及如何调用start()方法
  • 云音乐Android Cronet接入实践
  • Linux dup和dup2
  • Spring Boot实战 | 如何整合高性能数据库连接池HikariCP
  • Spring依赖注入
  • Linux下Jenkins自动化部署SpringBoot应用