2017-01-06 9 views
0

Я заметил, что шрифт Qt по умолчанию, используемый в Windows 7, немного отличается от системного шрифта.Как использовать шрифт Windows в приложении Qt

Это ясно видно на букву «О» в этом примере:

enter image description here   enter image description here

И вот мой код:

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QMainWindow mainWin; 

    QWidget* central = new QWidget(&mainWin); 
    central->setLayout(new QHBoxLayout); 

    QPushButton* ba = new QPushButton("Tool A", central); 
    central->layout()->addWidget(ba); 

    QPushButton* bb = new QPushButton("Tool B", central); 
    central->layout()->addWidget(bb); 

    mainWin.setCentralWidget(central); 
    mainWin.setWindowTitle("Tools"); 
    mainWin.show(); 
    return app.exec(); 
} 

Как я мог установить точно такой же шрифт в моем приложении как использует окна?

Версия Qt: 5.7.1

Спасибо!

+0

это два разных размера, а формы глифов при низких точечных размерах определенно растеризуются по-разному, так что вы сначала попробовали сопоставить размер, чтобы убедиться, что они действительно разные или нет? –

ответ

0

Мое решение работает только в Windows. Если это не предназначено, просто используйте препроцессоры!

Простым решением должно быть использование функций ОС. Этот код должен указывать имя шрифта.

//please note that this requires minimum Windows 7, for older versions a small change is needed over preprocessors 
#include<Windows.h> 
std::wstring getSystemDefaultFontName() { 
    NONCLIENTMETRICS ncm; 
    ncm.cbSize = sizeof(ncm); 
    HRESULT hr; 
    hr = SystemParametersInfo(SPI_GETNONCLIENTMETRICS, ncm.cbSize, &ncm, 0); 
    if (hr == 0) 
     return std::wstring(); 
    return std::wstring(ncm.lfMenuFont.lfFaceName); //There are different fonts for each section. I choose menu font but something else may be better? 
} 

Для Qt просто сказать:

QFont systemFont(QString::fromWCharArray(getSystemDefaultFontName().c_str()), 8, QFont::Bold, true); 
QApplication::setFont(systemFont); 

Однако, пожалуйста, имейте в виду, что шрифты могут еще немного отличаться, потому что Qt может сделать шрифты различных по сравнению с Windows.