Qt下自适应分辨率
qt下自適應(yīng)分辨率應(yīng)該有兩種方法:通過(guò)柵格布局;通過(guò)縮放比。
本人采用的是縮放比來(lái)適應(yīng)不同的分辨率。首先定義一個(gè)類(lèi)實(shí)現(xiàn)屏幕分辨率和長(zhǎng)寬縮放比的獲取,由于該類(lèi)可能被多個(gè)ui界面使用,所以定義為一個(gè)單例模式。代碼如下:
screenresolution.h
screenresolution.cpp
#include "screenresolution.h" #include <QGuiApplication> #include <QScreen> #include <QMutex>screenResolution* screenResolution::m_screResolution = nullptr; screenResolution::screenResolution() {}screenResolution* screenResolution::getInstance() {static QMutex m_cLock;if(m_screResolution == nullptr){m_cLock.lock();m_screResolution = new screenResolution();m_cLock.unlock();}return m_screResolution; }QRect screenResolution::getScreenRadio() {QScreen *screenPrimary=QGuiApplication::primaryScreen();QRect screen =screenPrimary->availableGeometry();return screen; }stuScrResolution screenResolution::getHVScaleRatio() {QRect screen = getScreenRadio();outPut<<"屏幕分辨率:"<<screen.width()<<screen.height();stuScrResolution tempResolution;tempResolution.width = (qreal)BASE_W / screen.width();tempResolution.height = (qreal)BASE_H / screen.height(); // outPut<<"自適應(yīng)的縮放比:寬="<<tempResolution.width<<"高="<<tempResolution.height;return tempResolution; }使用的時(shí)候通過(guò)定義指向改類(lèi)的指針獲取該類(lèi)的對(duì)象,具體使用如下:
QRect rectTemp = screenResolution::getInstance()->getScreenRadio();qreal percentW = screenResolution::getInstance()->getHVScaleRatio().width;qreal percentH = screenResolution::getInstance()->getHVScaleRatio().height;resize(140 / percentW,174 / percentH);ui->frame->setGeometry(0,0,140 / percentW,174 / percentH);ui->fullScreenBtn->setGeometry(0,1 / percentH,140 / percentW,58 / percentH);ui->collectBtn->setGeometry(0,59 / percentH,140 / percentW,58 / percentH);ui->upScreenBtn->setGeometry(0,116 / percentH,140 /percentW,58 / percentH);獲取該分辨率下對(duì)應(yīng)的長(zhǎng)寬比,然后縮放。這是對(duì)于常規(guī)的控件的自適應(yīng)。對(duì)于一些動(dòng)態(tài)創(chuàng)建的不規(guī)則的按鈕,處理方式稍有不同。具體可參考如下:
m_sceneBtnGroup = new QPushButton(ui->firstbtnWidget);m_sceneBtnGroup->setCheckable(true); // outPut<<"設(shè)置按鈕位置前";m_sceneBtnGroup->setGeometry(i*108 / m_percentW,0,125 / m_percentW,30 / m_percentH); // outPut<<"設(shè)置按鈕位置后";m_sceneBtnGroup->setText(QString("屏幕組%1").arg(i+1));if(i == 0){outPut<<"第一個(gè)按鈕";pixmap.load(":/new/prefix1/淳中切圖/未選中-切換.png");pixmap = pixmap.scaled(QSize(125 / m_percentW,30 / m_percentH),Qt::KeepAspectRatio);m_sceneBtnGroup->setFixedSize(pixmap.size());bit = pixmap.mask();m_sceneBtnGroup->setMask(bit);if(screenRect.width() > BASE_W && screenRect.height() > BASE_H){m_sceneBtnGroup->setStyleSheet("QPushButton{border-image: url(:/new/prefix1/淳中切圖/未選中-切換.png);""border:none;font-size: 31px;font-family: Microsoft YaHei;""font-weight: 400;color: #FFFFFF;line-height: 18px;}""QPushButton:checked{border-image: url(:/new/prefix1/淳中切圖/選中-切換.png);""font-size: 31px;font-family: Microsoft YaHei;""font-weight: 400;color: rgba(255, 255, 255, 0.8);line-height: 18px;}");}else{m_sceneBtnGroup->setStyleSheet("QPushButton{border-image: url(:/new/prefix1/淳中切圖/未選中-切換.png);""border:none;font-size: 16px;font-family: Microsoft YaHei;""font-weight: 400;color: #FFFFFF;line-height: 18px;}""QPushButton:checked{border-image: url(:/new/prefix1/淳中切圖/選中-切換.png);""font-size: 16px;font-family: Microsoft YaHei;""font-weight: 400;color: rgba(255, 255, 255, 0.8);line-height: 18px;}");}不規(guī)則按鈕采用的是setMask()進(jìn)行實(shí)現(xiàn),所以對(duì)于不規(guī)則按鈕不光要實(shí)現(xiàn)位置自適應(yīng)還有控件的大小的自適應(yīng),這種情況下就需要將圖片進(jìn)行縮放,以達(dá)到想要的效果。對(duì)于控件上的文字采用的是不同分辨率下指定了特定的文字大小。
對(duì)于ui文件需要在ui文件中設(shè)置控件的屬性為最優(yōu),不能設(shè)置為固定值(即最大值和最小值相等),控件如果加載了背景圖片且不想再使用特定分辨率下指定的切圖,這時(shí)可以使用border-image將圖片進(jìn)行拉伸。
設(shè)置控件屬性:
本文只記錄了主要部分,以備后續(xù)使用。
總結(jié)
- 上一篇: Qt下Tcp通信的简单使用三
- 下一篇: java中的switch的规则_细细讲述