94 lines
2.7 KiB
C++
94 lines
2.7 KiB
C++
#include "ffontsetting.h"
|
|
#include "filemanager.h"
|
|
#include "qdebug.h"
|
|
#include "qdir.h"
|
|
#include "ui_ffontsetting.h"
|
|
#include <QFontDatabase>
|
|
#include <QApplication>
|
|
|
|
FFontSetting::FFontSetting(QWidget *parent)
|
|
: QWidget(parent)
|
|
, cbFontStyle(nullptr)
|
|
, cbFontColor(nullptr)
|
|
, sbFontSize(nullptr)
|
|
, ui(new Ui::FFontSetting)
|
|
{
|
|
ui->setupUi(this);
|
|
setupColorComboBox(ui->cbFontColor);
|
|
cbFontStyle = ui->cbFontStyle;
|
|
cbFontColor = ui->cbFontColor;
|
|
sbFontSize = ui->sbFontSize;
|
|
|
|
// Загружаем шрифты при создании виджета
|
|
loadFonts();
|
|
}
|
|
|
|
FFontSetting::~FFontSetting()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void FFontSetting::setupColorComboBox(QComboBox* comboBox)
|
|
{
|
|
comboBox->clear();
|
|
|
|
// Добавляем цвета
|
|
QStringList colorNames = QColor::colorNames();
|
|
foreach (const QString &name, colorNames) {
|
|
QColor color(name);
|
|
QPixmap pixmap(20, 20);
|
|
pixmap.fill(color);
|
|
comboBox->addItem(QIcon(pixmap), name, color);
|
|
}
|
|
|
|
// Устанавливаем первый цвет по умолчанию
|
|
if (comboBox->count() > 0) {
|
|
comboBox->setCurrentIndex(0);
|
|
}
|
|
}
|
|
|
|
void FFontSetting::loadFonts()
|
|
{
|
|
// Загружаем шрифты из пользовательской папки
|
|
QString userFontsPath = FileManager::instance().getPath(FileManager::Fonts);
|
|
QDir userFontsDir(userFontsPath);
|
|
|
|
|
|
// Список всех загруженных шрифтов
|
|
QStringList allFontFamilies;
|
|
|
|
// Загружаем пользовательские шрифты
|
|
if (userFontsDir.exists()) {
|
|
QStringList fontFiles = userFontsDir.entryList(QStringList() << "*.ttf" << "*.otf" << "*.ttc", QDir::Files);
|
|
|
|
foreach (const QString &fontFile, fontFiles) {
|
|
QString fontPath = userFontsDir.absoluteFilePath(fontFile);
|
|
int fontId = QFontDatabase::addApplicationFont(fontPath);
|
|
|
|
if (fontId != -1) {
|
|
QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);
|
|
allFontFamilies.append(fontFamilies);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Добавляем системные шрифты Windows
|
|
QFontDatabase fontDatabase;
|
|
QStringList systemFamilies = fontDatabase.families();
|
|
allFontFamilies.append(systemFamilies);
|
|
|
|
// Удаляем дубликаты
|
|
allFontFamilies.removeDuplicates();
|
|
allFontFamilies.sort();
|
|
|
|
// Заполняем ComboBox
|
|
ui->cbFontStyle->clear();
|
|
ui->cbFontStyle->addItems(allFontFamilies);
|
|
|
|
// Устанавливаем шрифт по умолчанию
|
|
int defaultIndex = ui->cbFontStyle->findText("Arial");
|
|
if (defaultIndex >= 0) {
|
|
ui->cbFontStyle->setCurrentIndex(defaultIndex);
|
|
}
|
|
}
|