Qt 界面上字體自適應控件大小 - 隨控件縮放
- 引言
- 一、設計思路
- 二、進階版大致思路
- 三、參考鏈接
引言
Qt控件自適應字體大小可以用adjustSize()
函數,但字體自適應控件大小并沒有現成的函數可調. - 本文實現了按鈕上的字體隨按鈕大小變化而變化 (如上圖所示) - 其他控件同理。
- 核心思路:
根據控件的大小變化,同步調整字體的大小
- 重寫resizeEvent
函數
一、設計思路
本意是字體隨按鈕變化,實際上實現的是字體隨窗體變化,由于按鈕也隨窗體變化,可以說是近似等價的實現 - 想變成隨按鈕變化也簡單,將窗體高和寬換成按鈕的即可:
-
- 在頭文件聲明高、寬和字體大小,并在構造函數中初始化 (
記錄,以便后續對比
)
- 在頭文件聲明高、寬和字體大小,并在構造函數中初始化 (
this->width = this->size().width();this->height = this->size().height();this->fontsize = ui->pushButton->font().pointSize();
-
- 在窗體
resizeEvent
函數中,對比窗體高和寬的變化率,按照最小的變化率 (保證字體顯示完整) 來控制字體大小。
- 在窗體
void Widget::resizeEvent(QResizeEvent *event)
{int w = event->size().width();int h = event->size().height();double scale = 1.0;scale = 1.0 * w/this->width;if(scale < 1.0 * h/this->height){scale = 1.0 * h/this->height;}QFont font = ui->pushButton->font();int new_fontsize = scale * this->fontsize;if(new_fontsize != ui->pushButton->font().pointSize()){font.setPointSize(new_fontsize);ui->pushButton->setFont(font);qDebug()<< this->fontsize << " " << new_fontsize;}
}
二、進階版大致思路
-
- 繼承現有控件,重寫每一個控件的
resizeEvent
函數,實現字體大小變換
各個控件需保存自己的原始的大小和字體大小信息,根據原始信息和resize后的信息調整字體。 – 略繁瑣,通用性較差
- 繼承現有控件,重寫每一個控件的
-
- 寫一個函數或類 (
推薦類,方便存儲原始數據
),遍歷界面上的控件 (或將需要調整字體的控件提前加入類中的一個list中,在父窗體上resizeEvent
函數中遍歷list,調整其中控件字體大小即可)。-- 通用性強,較難實現
- 寫一個函數或類 (
已經有大佬寫了工具:QT界面自適應:https://blog.csdn.net/qq_45280097/article/details/134738567
三、參考鏈接
Qt 控件自適應字體大小:https://blog.csdn.net/lxj362343/article/details/108245226
Qt學習之路——字體跟隨控件自適應(筆記):https://blog.csdn.net/qq_39020917/article/details/131911691
Qt Windows高清DPI自適應分辨率縮放,比較完美的解決方案:https://blog.csdn.net/startl/article/details/105862817