單件模式使用小技巧

bluekrystal發表於2017-09-07

為了使QT應用程式介面自適應螢幕的解析度,要使QT介面上的所有控制元件根據一定的比例進行變大或者縮小。為了避免介面放大時圖片失真,針對QT介面上的所有控制元件的背景圖設計了兩套。為了縮短程式碼量可以將兩套圖片的名稱設定為一模一樣。然後存放在兩個資料夾中,這兩個資料夾分別命名為1024和1366。這時可以定義一個系統引數QString dpi,在開始獲取螢幕解析度的時候進行判斷,如果螢幕解析度為4:3,則Parameter::getInstance()->dpi=1024;如果螢幕解析度為16:9,則Parameter::getInstance()->dpi=1366。給每個控制元件新增背景圖寫在一個函式中。例如:

void photo()
{
       ui.frame->setStyleSheet("#frame{border-  image:url(:/"+Parameter::getInstance()>dpi+"/image/"+Parameter::getInstance()->dpi+"/background.png);}");
}

Parameter.cpp

#include "Parameter.h"
Parameter * Parameter::m_Parameter = NULL;
Parameter::Parameter()
{
}
Parameter::~Parameter()
{
}
Parameter *Parameter::getInstance()
{
    if (m_Parameter == NULL)
    {
        m_Parameter = new Parameter();
    }
    return m_Parameter;
}
void Parameter::initParameter(){
    dpi ="";
}

Parameter.h

#pragma once
#include <QString>
class Parameter
{
public:
    static Parameter* getInstance();
    QString dpi;   //螢幕解析度 
    static Parameter *m_Parameter;
    void initParameter();
    Parameter();
    ~Parameter();
};

此時Parameter::getInstance()->dpi必須用/+ +/進行隔開,不然程式會以為Parameter::getInstance()->dpi為路徑名。這樣就不用寫兩個函式來設定控制元件的背景圖片。這裡面使用了一個單件模式。

相關文章