106 lines
3.4 KiB
C++
106 lines
3.4 KiB
C++
#include "ffontsetting.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 fontsPath = "fonts";
|
|
QDir fontsDir(fontsPath);
|
|
|
|
if (fontsDir.exists()) {
|
|
QStringList fontFiles = fontsDir.entryList(QStringList() << "*.ttf" << "*.otf" << "*.ttc",
|
|
QDir::Files);
|
|
|
|
|
|
foreach (const QString &fontFile, fontFiles) {
|
|
QString fontPath = fontsDir.absoluteFilePath(fontFile);
|
|
int fontId = QFontDatabase::addApplicationFont(fontPath);
|
|
|
|
if (fontId != -1) {
|
|
QStringList fontFamilies = QFontDatabase::applicationFontFamilies(fontId);
|
|
} else {
|
|
}
|
|
}
|
|
|
|
// ОБНОВЛЯЕМ СПИСОК ШРИФТОВ В КОМБОБОКСЕ
|
|
ui->cbFontStyle->clear(); // Очищаем старый список
|
|
|
|
// Получаем все шрифты через объект QFontDatabase
|
|
QFontDatabase fontDatabase;
|
|
QStringList fontFamilies = fontDatabase.families(); // Получаем все шрифты
|
|
|
|
// ИЛИ используйте статический метод с параметром:
|
|
// QStringList fontFamilies = QFontDatabase::families(QFontDatabase::Any);
|
|
|
|
ui->cbFontStyle->addItems(fontFamilies); // Добавляем все шрифты
|
|
|
|
// Устанавливаем шрифт по умолчанию
|
|
int defaultIndex = ui->cbFontStyle->findText("Arial");
|
|
if (defaultIndex >= 0) {
|
|
ui->cbFontStyle->setCurrentIndex(defaultIndex);
|
|
}
|
|
|
|
// Показываем количество доступных шрифтов
|
|
} else {
|
|
|
|
// Загружаем системные шрифты, если папки нет
|
|
QFontDatabase fontDatabase;
|
|
QStringList fontFamilies = fontDatabase.families();
|
|
ui->cbFontStyle->clear();
|
|
ui->cbFontStyle->addItems(fontFamilies);
|
|
|
|
int defaultIndex = ui->cbFontStyle->findText("Arial");
|
|
if (defaultIndex >= 0) {
|
|
ui->cbFontStyle->setCurrentIndex(defaultIndex);
|
|
}
|
|
|
|
// Проверяем альтернативные пути
|
|
QString appDir = QApplication::applicationDirPath();
|
|
QString altPath = appDir + "/fonts";
|
|
}
|
|
}
|