TTW_Bot/ffontsetting.cpp

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);
}
}