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

文章目录

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

1.1. 目的

1.2. 代码

2. Qt窗口大小和位置

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

1.1. 目的

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

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

希望效果

本文福利, 免费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT图像,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

 

1.2. 代码 

//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种方式:

用frameGeometry().size():窗口会显示不全,滚动条显示不了;

用geometry().size():滚动条显示一半,显示的不好;

用ui.lab_central->size():显示效果最佳。

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

2. Qt窗口大小和位置

 

 另外3个有用的函数:

//设备相关的屏幕尺寸信息
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)

如果你对QT开发感兴趣,觉得文章对您有帮助,别忘了点赞、收藏哦!或者对本文的一些阐述有自己的看法,有任何问题,欢迎在下方评论区讨论!

本文福利, 免费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT图像,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击免费领取↓↓

  • 0
    点赞
  • 1
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论

打赏作者

音视频开发老舅

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值