原创文章,欢迎转载。转载请注明:转载自 祥的博客
原文链接:https://cloud.tencent.com/developer/article/1596457
- @[toc]1.使得Qt界面的控件随窗口的变化而变化1.1. 目的1.2. 代码Qt窗口大小和位置
Qt窗口大小、位置及其大小改变引起的事件QResizeEvent
要将Matlab Command Window
嵌入到一个QDialog
中,使得这个窗口控件随着窗口大小的改变而改变。这就要重写resizeEvent(QResizeEvent *event)
函数。
首先我设置了一个QLabel
,设置这个QLabal
的布局(不管是水平布局、垂直布局或是栅格布局
都OK,因为只有这一个控件),目的是让这个QLabel
铺满整个客户区Client Area(为了简单的获取客户区的大小
)
希望效果
//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窗口
有个大致的了解。
相关函数 | 解释 | |
---|---|---|
frameGeometry() | 几何尺寸**(位置+大小)** | 对于窗口,包含窗口装饰器 |
x()、y()、pos() | 只包含位置信息(左上角坐标) | 对于窗口,包含窗口装饰器 |
move() | 只移动位置 | 对于窗口,包含窗口装饰器 |
geometry() | 几何尺寸**(位置+大小)** | 不包含窗口装饰器 |
width()、height()、rect()、size() | 只包含大小信息 | 不包含窗口装饰器 |
setGeometry() | 改变位置和大小 | 不包含窗口装饰器 |
resize() | 只改变大小 | 不包含窗口装饰器 |
另外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)
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有