前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Qt]窗口大小、位置及其大小改变引起的事件QResizeEvent

[Qt]窗口大小、位置及其大小改变引起的事件QResizeEvent

作者头像
祥知道
发布2020-03-10 16:41:39
10.1K0
发布2020-03-10 16:41:39
举报
文章被收录于专栏:祥的专栏

原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:https://cloud.tencent.com/developer/article/1596457


文章目录

代码语言:txt
复制
- @[toc]1.使得Qt界面的控件随窗口的变化而变化1.1. 目的1.2. 代码Qt窗口大小和位置

Qt窗口大小、位置及其大小改变引起的事件QResizeEvent

1.使得Qt界面的控件随窗口的变化而变化

1.1. 目的

要将Matlab Command Window嵌入到一个QDialog中,使得这个窗口控件随着窗口大小的改变而改变。这就要重写resizeEvent(QResizeEvent *event)函数。

首先我设置了一个QLabel,设置这个QLabal的布局(不管是水平布局、垂直布局或是栅格布局都OK,因为只有这一个控件),目的是让这个QLabel铺满整个客户区Client Area(为了简单的获取客户区的大小

希望效果

1.2. 代码

代码语言:javascript
复制
//h文件
private:
	QWidget* m_Local_MatCmdWind = nullptr;//本程序的 Matlab Cmd窗口
protected:
	//将matlab窗口设置为随着窗口变化而变化
	virtual void resizeEvent(QResizeEvent *event) override;
	

//cpp文件
void MatlabCmdDlg::resizeEvent(QResizeEvent *event)
{
	if (nullptr != m_Local_MatCmdWind)
	{
		//不能显示滚动条
		//m_Local_MatCmdWind->resize(frameGeometry().size());
		
        //可以显示出滚动条,但是效果不是很好	
        //m_Local_MatCmdWind->resize(geometry().size());
        
		//可以显示出滚动条,显示效果也很好
		m_Local_MatCmdWind->resize(ui.lab_central->size());
	}	
}

其中:

  • m_Local_MatCmdWind就是要随着窗口变化而变化的一个QWidget窗体指针;
  • ui.lab_central就是中央的那个随窗口变化而变化的QLabel控件。

注意:

其中获取窗口大小有3种方式

  1. frameGeometry().size():窗口会显示不全,滚动条显示不了;
  2. geometry().size():滚动条显示一半,显示的不好;
  3. ui.lab_central->size():显示效果最佳。

那么问题来了,需要对Qt窗口有个大致的了解。

2. Qt窗口大小和位置

相关函数

解释

frameGeometry()

几何尺寸**(位置+大小)**

对于窗口,包含窗口装饰器

x()、y()、pos()

只包含位置信息(左上角坐标)

对于窗口,包含窗口装饰器

move()

只移动位置

对于窗口,包含窗口装饰器

geometry()

几何尺寸**(位置+大小)**

不包含窗口装饰器

width()、height()、rect()、size()

只包含大小信息

不包含窗口装饰器

setGeometry()

改变位置和大小

不包含窗口装饰器

resize()

只改变大小

不包含窗口装饰器

另外3个有用的函数:

代码语言:javascript
复制
//设备相关的屏幕尺寸信息
QDesktopWidget* desktopWidget = QApplication::desktop();
//得到客户区矩形
QRect clientRect = desktopWidget->availableGeometry();
//得到应用程序矩形
QRect applicationRect = desktopWidget->screenGeometry();


//关于 QDesktopWidget
//Properties
    primaryScreen : const int
    screenCount : const int
    virtualDesktop : const bool

//Public Functions
    const QRect	availableGeometry(int screen = -1) const
    const QRect	availableGeometry(const QWidget * widget) const
    const QRect	availableGeometry(const QPoint & p) const
    bool	isVirtualDesktop() const
    int	primaryScreen() const
    QWidget *	screen(int screen = -1)
    int	screenCount() const
    const QRect	screenGeometry(int screen = -1) const
    const QRect	screenGeometry(const QWidget * widget) const
    const QRect	screenGeometry(const QPoint & p) const
    int	screenNumber(const QWidget * widget = 0) const
    int	screenNumber(const QPoint & point) const

//Signals
    void	resized(int screen)
    void	screenCountChanged(int newCount)
    void	workAreaResized(int screen)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1.使得Qt界面的控件随窗口的变化而变化
    • 1.1. 目的
      • 1.2. 代码
      • 2. Qt窗口大小和位置
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档