转载自:QT事件之resizeEvent事件触发 - 代码先锋网 (codeleading.com)
用于个人收藏,未取得授权,如有不妥联系删之。
当QT运行时自动调用resize函数事件或者其他窗口控件大小发生变化产生resize事件。
假如你想拖动主窗口(或改变大小)的时候,能够让窗口中的组件随着窗口也能缩放的话,需要重写resizeEvent,原因在于,窗口构造结束之后,子窗口的大小就是固定的。而只有 resizeEvent 事件函数,可在此时获取到各控件正确的大小。
实际应用中要注意以下几点:
1、函数名字唯一
由于是QT固有事件函数,我们只是需要重写功能,丰富函数功能,而不是更改函数名称。头文件声明如下:
.h
protected:
void resizeEvent(QResizeEvent *event);
.cpp
#include<QResizeEvent>
void MainWindow::resizeEvent(QResizeEvent *event){
Q_UNUSED(event);
QRect rect=ui->tabWidget->geometry();
int width=rect.width();
int tabCount = ui->tabWidget->count();
int tabWidth = width/tabCount;
ui->tabWidget->setStyleSheet(QString("QTabBar::tab{width:%1px;font:10pt;}").arg(tabWidth));
int hig = ui->tabWidget_2->height();
int tabCount_2 = ui->tabWidget_2->count();
int tabheigth = hig/tabCount_2;
ui->tabWidget_2->setStyleSheet(QString("QTabBar::tab{height:%1px;font:12pt;}").arg(tabheigth));
}
可以在函数中实现你想要的事件,比如
void MainWindow::resizeEvent(QResizeEvent *event){
Q_UNUSED(event);
QRect rect=this->geometry();
int width=rect.width();
if(width>600)
{
qDebug<<"窗口宽度超过600了!"
}
else
{
qDebug<<"窗口宽度没超过600!"
}
}
我才知道有这么一个函数,之前一直都是单起一个线程不断或者窗口大小的,瞬间感觉自己特别傻