#include "ffontsetting.h" #include "filemanager.h" #include "qdebug.h" #include "qdir.h" #include "ui_ffontsetting.h" #include #include 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); } }