Merge branch 'openkylin/nile' of gitee.com:openkylin/kylin-theme-builder into openkylin/nile
Signed-off-by: KevinDuan <duankaiwen@ubuntukylin.com>
This commit is contained in:
commit
8824ccc0ba
|
@ -7,6 +7,15 @@ ConfigFileManager::ConfigFileManager(QObject *parent) : QObject(parent)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 创建 JSON 文件
|
||||
*
|
||||
* 在指定的缓存目录中创建 JSON 文件。
|
||||
*
|
||||
* @param cachedir 缓存目录对象
|
||||
*
|
||||
* @return 如果成功创建 JSON 文件,则返回 true;否则返回 false。
|
||||
*/
|
||||
bool ConfigFileManager::createJson(QDir cachedir)
|
||||
{
|
||||
QString m_themePath = cachedir.absolutePath();
|
||||
|
@ -26,6 +35,15 @@ bool ConfigFileManager::createJson(QDir cachedir)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 创建配置文件
|
||||
*
|
||||
* 在给定的缓存目录中创建配置文件。
|
||||
*
|
||||
* @param cachedir 缓存目录对象
|
||||
*
|
||||
* @return 创建成功返回 true,否则返回 false
|
||||
*/
|
||||
bool ConfigFileManager::createConf(QDir cachedir)
|
||||
{
|
||||
QString m_themePath = cachedir.absolutePath();
|
||||
|
@ -45,6 +63,16 @@ bool ConfigFileManager::createConf(QDir cachedir)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 修改radius的json配置文件
|
||||
*
|
||||
* 根据给定的radius值,修改指定的json配置文件中的"Radius"字段的值。
|
||||
*
|
||||
* @param radius Radius值
|
||||
* @param jsonFilePath 配置文件路径
|
||||
*
|
||||
* @return 修改成功返回true,否则返回false
|
||||
*/
|
||||
bool ConfigFileManager::modifyRadiusJson(int radius,QString jsonFilePath)
|
||||
{
|
||||
QString confFilePath = jsonFilePath;
|
||||
|
@ -89,7 +117,16 @@ bool ConfigFileManager::modifyRadiusJson(int radius,QString jsonFilePath)
|
|||
emit updateInfo();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 修改配置文件中的强调色配置
|
||||
*
|
||||
* 将给定的强调色配置写入指定的配置文件中。
|
||||
*
|
||||
* @param accentcolor 强调色
|
||||
* @param confFilePath 配置文件路径
|
||||
*
|
||||
* @return 修改成功返回 true,否则返回 false
|
||||
*/
|
||||
bool ConfigFileManager::modifyAccentColorConf(QColor accentcolor,QString confFilePath)
|
||||
{
|
||||
|
||||
|
@ -127,6 +164,16 @@ bool ConfigFileManager::modifyAccentColorConf(QColor accentcolor,QString confFil
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 修改壁纸配置文件
|
||||
*
|
||||
* 从指定的配置文件路径读取文件内容,并修改其中的壁纸路径,然后将修改后的内容写回到文件中。
|
||||
*
|
||||
* @param wallpaperpath 壁纸路径
|
||||
* @param confFilePath 配置文件路径
|
||||
*
|
||||
* @return 修改成功返回 true,否则返回 false
|
||||
*/
|
||||
bool ConfigFileManager::modifyWallPaperConf(QString wallpaperpath,QString confFilePath)
|
||||
{
|
||||
|
||||
|
@ -161,6 +208,16 @@ bool ConfigFileManager::modifyWallPaperConf(QString wallpaperpath,QString confFi
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 修改透明度配置
|
||||
*
|
||||
* 读取指定的配置文件内容,并修改其中的透明度设置,最后将修改后的内容写回到文件中。
|
||||
*
|
||||
* @param transparency 透明度值
|
||||
* @param confFilePath 配置文件路径
|
||||
*
|
||||
* @return 修改成功返回 true,否则返回 false
|
||||
*/
|
||||
bool ConfigFileManager::modifyTransparencyConf(int transparency,QString confFilePath)
|
||||
{
|
||||
// 读取文件内容
|
||||
|
@ -192,6 +249,16 @@ bool ConfigFileManager::modifyTransparencyConf(int transparency,QString confFile
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 修改窗口半径配置
|
||||
*
|
||||
* 将指定的文件中的窗口半径配置进行修改,并保存到文件中。
|
||||
*
|
||||
* @param windowradius 窗口半径值
|
||||
* @param confFilePath 配置文件路径
|
||||
*
|
||||
* @return 修改成功返回 true,否则返回 false
|
||||
*/
|
||||
bool ConfigFileManager::modifywindowRadiusConf(int windowradius,QString confFilePath)
|
||||
{
|
||||
QFile file(confFilePath);
|
||||
|
@ -219,6 +286,16 @@ bool ConfigFileManager::modifywindowRadiusConf(int windowradius,QString confFile
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 复制文件内容到另一个文件
|
||||
*
|
||||
* 将源文件的内容复制到目标文件中。
|
||||
*
|
||||
* @param sourceFilePath 源文件路径
|
||||
* @param destinationFilePath 目标文件路径
|
||||
*
|
||||
* @return 复制成功返回 true,否则返回 false
|
||||
*/
|
||||
bool ConfigFileManager::copyFileContent(const QString &sourceFilePath, const QString &destinationFilePath)
|
||||
{
|
||||
QFile sourceFile(sourceFilePath);
|
||||
|
@ -247,6 +324,16 @@ bool ConfigFileManager::copyFileContent(const QString &sourceFilePath, const QSt
|
|||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将文件复制到缓存目录
|
||||
*
|
||||
* 将指定的文件复制到缓存目录中。如果文件已经存在于缓存目录中,则不会进行复制。
|
||||
*
|
||||
* @param map 存储键值对的映射
|
||||
* @param cachedir 缓存目录对象
|
||||
*
|
||||
* @return 复制是否成功的布尔值
|
||||
*/
|
||||
bool ConfigFileManager::copyIcontoCacheDir(QMap<QString, QString> *map, QDir cachedir)
|
||||
{
|
||||
bool success = true;
|
||||
|
@ -279,6 +366,15 @@ bool ConfigFileManager::copyIcontoCacheDir(QMap<QString, QString> *map, QDir cac
|
|||
return success;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将文件复制到缓存目录
|
||||
*
|
||||
* 将指定的文件复制到缓存目录中,根据不同的类型设置不同的目标文件名。
|
||||
*
|
||||
* @param destinationFilePath 目标文件路径
|
||||
* @param cachedir 缓存目录
|
||||
* @param type 类型
|
||||
*/
|
||||
void ConfigFileManager::copyPictoCacheDir(const QString &destinationFilePath, QDir cachedir, QString type)
|
||||
{
|
||||
QString sourceFilePath = destinationFilePath;
|
||||
|
@ -305,6 +401,14 @@ void ConfigFileManager::copyPictoCacheDir(const QString &destinationFilePath, QD
|
|||
qDebug() << "File copied successfully";
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 将文件复制到缓存目录
|
||||
*
|
||||
* 使用ffmpeg命令将指定的MP4文件复制到缓存目录中,并根据文件名生成相应的缓存文件。
|
||||
*
|
||||
* @param destinationFilePath 目标文件路径
|
||||
* @param cachedir 缓存目录
|
||||
*/
|
||||
void ConfigFileManager::copyMp4toCacheDir(const QString &destinationFilePath, QDir cachedir)
|
||||
{
|
||||
QStringList list;
|
||||
|
|
|
@ -6,6 +6,14 @@
|
|||
#include <QJsonDocument>
|
||||
#include <QJsonObject>
|
||||
|
||||
/**
|
||||
* @brief 构造函数,用于加载历史信息
|
||||
*
|
||||
* 根据给定的日期,创建一个 HistoryInfoLoad 对象,用于加载历史信息。
|
||||
*
|
||||
* @param date 日期
|
||||
* @param parent 父对象指针
|
||||
*/
|
||||
HistoryInfoLoad::HistoryInfoLoad(const QString &date, QObject *parent)
|
||||
{
|
||||
m_historyInfo.historytime = date;
|
||||
|
@ -17,6 +25,13 @@ HistoryInfoLoad::HistoryInfoLoad(const QString &date, QObject *parent)
|
|||
getWindowRadius();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取封面
|
||||
*
|
||||
* 从历史信息中获取封面的路径。
|
||||
*
|
||||
* @return 封面路径
|
||||
*/
|
||||
QString HistoryInfoLoad::getCover()
|
||||
{
|
||||
QString filePath = m_historyInfo.filepath + "/src/globalTheme/preview";
|
||||
|
@ -37,6 +52,13 @@ QString HistoryInfoLoad::getCover()
|
|||
return m_historyInfo.coverpath;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取主题名称
|
||||
*
|
||||
* 从指定的文件路径中读取主题名称并返回。
|
||||
*
|
||||
* @return 主题名称
|
||||
*/
|
||||
QString HistoryInfoLoad::getThemeName()
|
||||
{
|
||||
QString filePath = m_historyInfo.filepath + "/src/debian/control";
|
||||
|
@ -64,6 +86,13 @@ QString HistoryInfoLoad::getThemeName()
|
|||
return m_historyInfo.themename;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取主题类型
|
||||
*
|
||||
* 根据文件路径获取主题类型。
|
||||
*
|
||||
* @return 主题类型
|
||||
*/
|
||||
QString HistoryInfoLoad::getThemeType()
|
||||
{
|
||||
QString filePath = m_historyInfo.filepath + "/src";
|
||||
|
@ -85,6 +114,11 @@ QString HistoryInfoLoad::getThemeType()
|
|||
return m_historyInfo.themetype;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取半径
|
||||
*
|
||||
* 从给定的文件路径中加载半径信息,并保存在 HistoryInfo 对象的 radius 成员变量中。
|
||||
*/
|
||||
void HistoryInfoLoad::getRadius()
|
||||
{
|
||||
QString filePath = m_historyInfo.filepath + "/src/globalTheme/default.json";
|
||||
|
@ -114,6 +148,11 @@ void HistoryInfoLoad::getRadius()
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取壁纸
|
||||
*
|
||||
* 从指定的文件中读取壁纸路径。
|
||||
*/
|
||||
void HistoryInfoLoad::getWallpaper()
|
||||
{
|
||||
QString filePath = m_historyInfo.filepath + "/src/globalTheme/theme.conf";
|
||||
|
@ -146,6 +185,11 @@ void HistoryInfoLoad::getWallpaper()
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取强调色
|
||||
*
|
||||
* 从指定路径读取主题配置文件,并获取其中的强调色信息。
|
||||
*/
|
||||
void HistoryInfoLoad::getAccentColor()
|
||||
{
|
||||
QString filePath = m_historyInfo.filepath + "/src/globalTheme/theme.conf";
|
||||
|
@ -176,6 +220,11 @@ void HistoryInfoLoad::getAccentColor()
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取透明度
|
||||
*
|
||||
* 从指定的路径加载配置文件中获取透明度信息,并将其保存在 HistoryInfo 对象的 transparency 属性中。
|
||||
*/
|
||||
void HistoryInfoLoad::getTransparency()
|
||||
{
|
||||
QString filePath = m_historyInfo.filepath + "/src/globalTheme/theme.conf";
|
||||
|
@ -212,6 +261,11 @@ void HistoryInfoLoad::getTransparency()
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取窗口半径
|
||||
*
|
||||
* 从指定路径读取主题配置文件,并从中获取窗口半径值。
|
||||
*/
|
||||
void HistoryInfoLoad::getWindowRadius()
|
||||
{
|
||||
QString filePath = m_historyInfo.filepath + "/src/globalTheme/theme.conf";
|
||||
|
@ -248,12 +302,24 @@ void HistoryInfoLoad::getWindowRadius()
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取历史信息数据
|
||||
*
|
||||
* 返回包含历史信息的数据对象。
|
||||
*
|
||||
* @return 历史信息数据对象
|
||||
*/
|
||||
HistoryInfo HistoryInfoLoad::getInfoData()
|
||||
{
|
||||
qDebug()<<m_historyInfo.accentcolor<<m_historyInfo.wallpaperpath<<m_historyInfo.filepath<<m_historyInfo.windowradius;
|
||||
return m_historyInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新历史信息
|
||||
*
|
||||
* 更新历史信息的函数。
|
||||
*/
|
||||
void HistoryInfoLoad::updateHistoryInfo()
|
||||
{
|
||||
getCover();
|
||||
|
|
|
@ -2,6 +2,13 @@
|
|||
|
||||
|
||||
|
||||
/**
|
||||
* @brief MainInterface 构造函数
|
||||
*
|
||||
* MainInterface 的构造函数,用于初始化界面控件和建立信号连接。
|
||||
*
|
||||
* @param parent 父控件指针
|
||||
*/
|
||||
MainInterface::MainInterface(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
// this->setBackgroundRole(QPalette::Base);
|
||||
|
@ -55,11 +62,23 @@ MainInterface::MainInterface(QWidget *parent) : QWidget(parent)
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置是否启用历史记录
|
||||
*
|
||||
* 根据给定的布尔值设置是否启用历史记录。
|
||||
*
|
||||
* @param ishistory 是否启用历史记录
|
||||
*/
|
||||
void MainInterface::isHistory(bool ishistory)
|
||||
{
|
||||
m_ishistory = ishistory;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化主界面
|
||||
*
|
||||
* 初始化主界面,包括左侧栏、主题堆叠小部件等。
|
||||
*/
|
||||
void MainInterface::init()
|
||||
{
|
||||
|
||||
|
@ -120,6 +139,13 @@ void MainInterface::init()
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化左侧工具栏
|
||||
*
|
||||
* 创建一个QWidget作为左侧工具栏,并设置其最小和最大尺寸。然后创建一个QVBoxLayout来管理左侧工具栏的布局。
|
||||
* 创建一个QButtonGroup来管理多个按钮的选中状态。将多个按钮添加到按钮组中,并设置它们为可选中状态。
|
||||
* 将全局按钮和构建按钮添加到布局中,并设置构建按钮为普通按钮。最后将布局中的控件添加到左侧工具栏中。
|
||||
*/
|
||||
void MainInterface::initLeftBar()
|
||||
{
|
||||
m_navigationwidget = new QWidget(m_belowwidget);
|
||||
|
@ -244,26 +270,44 @@ void MainInterface::getThemeInfo(const HistoryInfo &InfoData)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取应用程序图标映射表
|
||||
*
|
||||
* 返回一个 QMap<QString, QString> 类型的指针,该指针指向应用程序图标映射表。
|
||||
*
|
||||
* @return 应用程序图标映射表指针
|
||||
*/
|
||||
QMap<QString, QString>* MainInterface::getAppIconsMap()
|
||||
{
|
||||
//资源文件的appiconmap
|
||||
return m_iconthemewidget->getAppIconsMap();
|
||||
}
|
||||
|
||||
QMap<QString, QString> *MainInterface::getSystemIconsMap()
|
||||
{
|
||||
//资源文件的systemiconmap
|
||||
return m_iconthemewidget->getSystemIconsMap();
|
||||
}
|
||||
|
||||
QMap<QString, QString> *MainInterface::getCurosrMap()
|
||||
{
|
||||
//资源文件的cursoriconmap
|
||||
return m_cursorthemewidget->getCursorMap();
|
||||
}
|
||||
|
||||
QMap<QString, QString> *MainInterface::getTimeCurosrMap()
|
||||
{
|
||||
//资源文件的timecursoriconmap
|
||||
return m_cursorthemewidget->getTimeCursorMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 刷新界面
|
||||
*
|
||||
* 根据传入的主题类型刷新界面。
|
||||
*
|
||||
* @param themeType 主题类型
|
||||
*/
|
||||
void MainInterface::refresh(QString themeType)
|
||||
{
|
||||
if("global" == themeType){
|
||||
|
@ -296,6 +340,13 @@ void MainInterface::updateButtonGroup(bool isGlobalTheme)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新缩略图
|
||||
*
|
||||
* 将指定的缩略图路径设置为 PlymouthThemeWidget 的缩略图图标。
|
||||
*
|
||||
* @param thumbnailPath 缩略图路径
|
||||
*/
|
||||
void MainInterface::updateThumbnail(QString thumbnailPath)
|
||||
{
|
||||
m_plymouththemewidget->setThumbnailIcon(thumbnailPath);
|
||||
|
|
|
@ -46,6 +46,9 @@ MainWindow::~MainWindow()
|
|||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化界面
|
||||
*/
|
||||
void MainWindow::initUI()
|
||||
{
|
||||
QPalette palette;
|
||||
|
@ -211,6 +214,11 @@ void MainWindow::initUI()
|
|||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化入口
|
||||
*
|
||||
* 初始化各个按钮的入口,并设置相应的图标和提示信息。
|
||||
*/
|
||||
void MainWindow::initEntry()
|
||||
{
|
||||
m_globalbtn = new EntryButton();
|
||||
|
@ -241,6 +249,11 @@ void MainWindow::refresh()
|
|||
// m_maininterface->refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 点击"GoHome"按钮后执行的函数
|
||||
*
|
||||
* 当用户点击"GoHome"按钮后,执行该函数。
|
||||
*/
|
||||
void MainWindow::onGoHomeClicked()
|
||||
{
|
||||
//返回主界面判断,是否在主界面点击返回按钮
|
||||
|
@ -281,6 +294,14 @@ void MainWindow::onGoHomeClicked()
|
|||
// refresh();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置入口按钮的图标和文本
|
||||
*
|
||||
* 设置入口按钮的图标和文本。
|
||||
*
|
||||
* @param icon QIcon 对象,表示要设置的图标
|
||||
* @param text QString 对象,表示要设置的文本
|
||||
*/
|
||||
void EntryButton::setEntry(const QIcon &icon, const QString &text)
|
||||
{
|
||||
QFont font("Arial", 18);
|
||||
|
@ -293,6 +314,13 @@ void EntryButton::setEntry(const QIcon &icon, const QString &text)
|
|||
textLabel->setFont(QFont("Arial" , 18));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置提示文字
|
||||
*
|
||||
* 设置 EntryButton 控件的提示文字。
|
||||
*
|
||||
* @param text 提示文字
|
||||
*/
|
||||
void EntryButton::setTip(const QString &text)
|
||||
{
|
||||
tipLabel->setText(text);
|
||||
|
@ -303,6 +331,13 @@ void EntryButton::setTip(const QString &text)
|
|||
tipLabel->setWordWrap(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 构造函数
|
||||
*
|
||||
* 创建一个 EntryButton 对象,继承自 QPushButton。
|
||||
*
|
||||
* @param parent 父对象指针
|
||||
*/
|
||||
EntryButton::EntryButton(QWidget *parent): QPushButton(parent)
|
||||
{
|
||||
this->setFixedSize(240,280);
|
||||
|
@ -319,23 +354,45 @@ EntryButton::EntryButton(QWidget *parent): QPushButton(parent)
|
|||
layout->addWidget(tipLabel);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 鼠标按下事件处理函数
|
||||
*
|
||||
* 当鼠标左键按下时,执行该函数。
|
||||
*
|
||||
* @param event 鼠标事件指针
|
||||
*/
|
||||
void MainWindow::mousePressEvent(QMouseEvent *event)
|
||||
{
|
||||
// 判断是否按下左键
|
||||
if (event->button() == Qt::LeftButton) {
|
||||
// 设置拖动标志为真
|
||||
this->m_drag = true;
|
||||
// 记录按下位置的坐标
|
||||
this->dragPos = event->pos();
|
||||
// 记录全局位置
|
||||
this->resizeDownPos = event->globalPos();
|
||||
// 记录按下时窗口的矩形大小
|
||||
this->mouseDownRect = this->rect();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 鼠标移动事件
|
||||
*
|
||||
* 当鼠标移动时,该函数会被调用。
|
||||
*
|
||||
* @param event 鼠标事件指针
|
||||
*/
|
||||
void MainWindow::mouseMoveEvent(QMouseEvent * event)
|
||||
{
|
||||
if (resizeRegion != Default)
|
||||
{
|
||||
// 处理调整窗体大小的操作
|
||||
handleResize();
|
||||
return;
|
||||
}
|
||||
if(m_move) {
|
||||
// 移动窗体
|
||||
move(event->globalPos() - dragPos);
|
||||
return;
|
||||
}
|
||||
|
@ -343,21 +400,34 @@ void MainWindow::mouseMoveEvent(QMouseEvent * event)
|
|||
QRect r = this->rect();
|
||||
QRect resizeInnerRect(resizeBorderWidth, resizeBorderWidth, r.width() - 2*resizeBorderWidth, r.height() - 2*resizeBorderWidth);
|
||||
if(r.contains(clientCursorPos) && !resizeInnerRect.contains(clientCursorPos)) { //调整窗体大小
|
||||
// 获取窗体的可调整大小区域
|
||||
ResizeRegion resizeReg = getResizeRegion(clientCursorPos);
|
||||
// 设置鼠标的形状为可调整大小形状
|
||||
setResizeCursor(resizeReg);
|
||||
if (m_drag && (event->buttons() & Qt::LeftButton)) {
|
||||
// 设置窗体的可调整大小区域,并处理调整大小操作
|
||||
resizeRegion = resizeReg;
|
||||
handleResize();
|
||||
}
|
||||
}
|
||||
else { //移动窗体
|
||||
// 设置鼠标的形状为箭头形状
|
||||
setCursor(Qt::ArrowCursor);
|
||||
if (m_drag && (event->buttons() & Qt::LeftButton)) {
|
||||
// 设置标志位为移动窗体状态,并移动窗体
|
||||
m_move = true;
|
||||
move(event->globalPos() - dragPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 鼠标释放事件
|
||||
*
|
||||
* 当鼠标释放时触发本事件。
|
||||
*
|
||||
* @param event QMouseEvent 指针,指向发生事件的对象。
|
||||
*/
|
||||
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
|
||||
{
|
||||
m_drag = false;
|
||||
|
@ -368,52 +438,97 @@ void MainWindow::mouseReleaseEvent(QMouseEvent *event)
|
|||
resizeRegion = Default;
|
||||
setCursor(Qt::ArrowCursor);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置调整大小的游标
|
||||
*
|
||||
* 根据给定的调整区域设置对应的游标。
|
||||
*
|
||||
* @param region 调整区域
|
||||
*/
|
||||
void MainWindow::setResizeCursor(ResizeRegion region)
|
||||
{
|
||||
switch (region)
|
||||
{
|
||||
case North:
|
||||
case South:
|
||||
// 设置上下调整光标
|
||||
setCursor(Qt::SizeVerCursor);
|
||||
break;
|
||||
case East:
|
||||
case West:
|
||||
// 设置左右调整光标
|
||||
setCursor(Qt::SizeHorCursor);
|
||||
break;
|
||||
case NorthWest:
|
||||
case SouthEast:
|
||||
// 设置对角线调整光标(从左上到右下)
|
||||
setCursor(Qt::SizeFDiagCursor);
|
||||
break;
|
||||
default:
|
||||
// 设置对角线调整光标(从右上到左下)
|
||||
setCursor(Qt::SizeBDiagCursor);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取窗口调整大小区域
|
||||
*
|
||||
* 根据给定的客户端位置获取窗口调整大小的区域。
|
||||
*
|
||||
* @param clientPos 客户端位置
|
||||
*
|
||||
* @return 返回窗口调整大小区域枚举值
|
||||
*/
|
||||
ResizeRegion MainWindow::getResizeRegion(QPoint clientPos)
|
||||
{
|
||||
// 如果客户点的y坐标小于等于边框宽度
|
||||
if (clientPos.y() <= resizeBorderWidth) {
|
||||
// 如果客户点的x坐标小于等于边框宽度
|
||||
if (clientPos.x() <= resizeBorderWidth)
|
||||
// 返回北西方向
|
||||
return NorthWest;
|
||||
// 如果客户点的x坐标大于等于窗口宽度减去边框宽度
|
||||
else if (clientPos.x() >= this->width() - resizeBorderWidth)
|
||||
// 返回北东方向
|
||||
return NorthEast;
|
||||
else
|
||||
// 返回北方向
|
||||
return North;
|
||||
}
|
||||
// 如果客户点的y坐标大于等于窗口高度减去边框宽度
|
||||
else if (clientPos.y() >= this->height() - resizeBorderWidth) {
|
||||
// 如果客户点的x坐标小于等于边框宽度
|
||||
if (clientPos.x() <= resizeBorderWidth)
|
||||
// 返回南西方向
|
||||
return SouthWest;
|
||||
// 如果客户点的x坐标大于等于窗口宽度减去边框宽度
|
||||
else if (clientPos.x() >= this->width() - resizeBorderWidth)
|
||||
// 返回南东方向
|
||||
return SouthEast;
|
||||
else
|
||||
// 返回南方向
|
||||
return South;
|
||||
}
|
||||
else {
|
||||
// 如果客户点的x坐标小于等于边框宽度
|
||||
if (clientPos.x() <= resizeBorderWidth)
|
||||
// 返回西方向
|
||||
return West;
|
||||
else
|
||||
// 返回东方向
|
||||
return East;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 处理移动事件
|
||||
*
|
||||
* 当移动事件发生时,该函数用于处理移动事件,并调整窗口位置。
|
||||
*
|
||||
* @param pt 鼠标当前位置
|
||||
*/
|
||||
void MainWindow::handleMove(QPoint pt)
|
||||
{
|
||||
QDesktopWidget* desktop = QApplication::desktop(); // 创建 QDesktopWidget 实例
|
||||
|
@ -429,57 +544,79 @@ void MainWindow::handleMove(QPoint pt)
|
|||
}
|
||||
move(currentPos);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 处理窗口大小调整
|
||||
*
|
||||
* 根据鼠标的位置和移动距离,调整窗口的大小。
|
||||
*/
|
||||
void MainWindow::handleResize()
|
||||
{
|
||||
// 计算x轴和y轴的偏移量
|
||||
int xdiff = QCursor::pos().x() - resizeDownPos.x();
|
||||
int ydiff = QCursor::pos().y() - resizeDownPos.y();
|
||||
|
||||
// 根据不同的resizeRegion进行不同的操作
|
||||
switch (resizeRegion)
|
||||
{
|
||||
case East:
|
||||
{
|
||||
resize(mouseDownRect.width()+xdiff, this->height());
|
||||
break;
|
||||
}
|
||||
case West:
|
||||
{
|
||||
resize(mouseDownRect.width()-xdiff, this->height());
|
||||
move(resizeDownPos.x()+xdiff, this->y());
|
||||
break;
|
||||
}
|
||||
case South:
|
||||
{
|
||||
resize(this->width(),mouseDownRect.height()+ydiff);
|
||||
break;
|
||||
}
|
||||
case North:
|
||||
{
|
||||
resize(this->width(),mouseDownRect.height()-ydiff);
|
||||
move(this->x(), resizeDownPos.y()+ydiff);
|
||||
break;
|
||||
}
|
||||
case SouthEast:
|
||||
{
|
||||
resize(mouseDownRect.width() + xdiff, mouseDownRect.height() + ydiff);
|
||||
break;
|
||||
}
|
||||
case NorthEast:
|
||||
{
|
||||
resize(mouseDownRect.width()+xdiff, mouseDownRect.height()-ydiff);
|
||||
move(this->x(), resizeDownPos.y()+ydiff);
|
||||
break;
|
||||
}
|
||||
case NorthWest:
|
||||
{
|
||||
resize(mouseDownRect.width()-xdiff, mouseDownRect.height()-ydiff);
|
||||
move(resizeDownPos.x()+xdiff, resizeDownPos.y()+ydiff);
|
||||
break;
|
||||
}
|
||||
case SouthWest:
|
||||
{
|
||||
resize(mouseDownRect.width()-xdiff, mouseDownRect.height()+ydiff);
|
||||
move(resizeDownPos.x()+xdiff, this->y());
|
||||
break;
|
||||
}
|
||||
case East:
|
||||
{
|
||||
// 东方向,宽度增加
|
||||
resize(mouseDownRect.width()+xdiff, this->height());
|
||||
break;
|
||||
}
|
||||
case West:
|
||||
{
|
||||
// 西方向,宽度减少
|
||||
resize(mouseDownRect.width()-xdiff, this->height());
|
||||
// 移动到原始位置,x轴偏移量增加
|
||||
move(resizeDownPos.x()+xdiff, this->y());
|
||||
break;
|
||||
}
|
||||
case South:
|
||||
{
|
||||
// 南方向,高度增加
|
||||
resize(this->width(),mouseDownRect.height()+ydiff);
|
||||
break;
|
||||
}
|
||||
case North:
|
||||
{
|
||||
// 北方向,高度减少
|
||||
resize(this->width(),mouseDownRect.height()-ydiff);
|
||||
// 移动到原始位置,y轴偏移量增加
|
||||
move(this->x(), resizeDownPos.y()+ydiff);
|
||||
break;
|
||||
}
|
||||
case SouthEast:
|
||||
{
|
||||
// 东南方向,宽度和高度都增加
|
||||
resize(mouseDownRect.width() + xdiff, mouseDownRect.height() + ydiff);
|
||||
break;
|
||||
}
|
||||
case NorthEast:
|
||||
{
|
||||
// 东北方向,宽度增加,高度减少
|
||||
resize(mouseDownRect.width()+xdiff, mouseDownRect.height()-ydiff);
|
||||
// 移动到原始位置,x轴偏移量增加,y轴偏移量增加
|
||||
move(this->x(), resizeDownPos.y()+ydiff);
|
||||
break;
|
||||
}
|
||||
case NorthWest:
|
||||
{
|
||||
// 西北方向,宽度减少,高度减少
|
||||
resize(mouseDownRect.width()-xdiff, mouseDownRect.height()-ydiff);
|
||||
// 移动到原始位置,x轴偏移量减少,y轴偏移量减少
|
||||
move(resizeDownPos.x()+xdiff, resizeDownPos.y()+ydiff);
|
||||
break;
|
||||
}
|
||||
case SouthWest:
|
||||
{
|
||||
// 西南方向,宽度减少,高度增加
|
||||
resize(mouseDownRect.width()-xdiff, mouseDownRect.height()+ydiff);
|
||||
// 移动到原始位置,x轴偏移量减少,y轴偏移量增加
|
||||
move(resizeDownPos.x()+xdiff, this->y());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -86,18 +86,31 @@ void CursorImageWidget::updateImage(const QString& imagePath)
|
|||
qDebug() << "Failed to load image:" << filePath;
|
||||
}
|
||||
}
|
||||
// 适应视图,保持宽高比
|
||||
graphicsView->fitInView(graphicsView->scene()->sceneRect(), Qt::KeepAspectRatio);
|
||||
// 获取当前视图转换矩阵
|
||||
QTransform currentTransform = graphicsView->transform();
|
||||
// 计算场景的中心点坐标,并转换为视图坐标系下的坐标
|
||||
QPointF sceneCenter = graphicsView->mapToScene(graphicsView->viewport()->rect().center());
|
||||
currentTransform.translate(sceneCenter.x(), sceneCenter.y());
|
||||
// 设置新的视图转换矩阵,使视图中心点移动到场景中心点
|
||||
graphicsView->setTransform(currentTransform);
|
||||
|
||||
// 计算场景的中心点坐标,并转换为视图坐标系下的坐标
|
||||
QPointF viewCenter = graphicsView->mapFromScene(graphicsView->scene()->sceneRect().center());
|
||||
// 将视图中心点移动到新的中心点
|
||||
graphicsView->centerOn(viewCenter);
|
||||
|
||||
// 更新视口
|
||||
graphicsView->viewport()->update();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新图标映射
|
||||
*
|
||||
* 根据新的图标映射更新光标图像小部件的图标。
|
||||
*
|
||||
* @param newIconMap 新的图标映射
|
||||
*/
|
||||
void CursorImageWidget::updateIconMap(const QMap<QString, QString> *newIconMap)
|
||||
{
|
||||
m_iconMap = newIconMap;
|
||||
|
@ -181,6 +194,14 @@ void CursorImageWidget::updateIconMap(const QMap<QString, QString> *newIconMap)
|
|||
graphicsView->show();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief CursorImageWidget 构造函数
|
||||
*
|
||||
* 初始化 CursorImageWidget 对象。
|
||||
*
|
||||
* @param parent 父 QWidget 对象指针
|
||||
* @param iconMap 包含图标键值对的 QMap 对象指针
|
||||
*/
|
||||
CursorImageWidget::CursorImageWidget(QWidget *parent, const QMap<QString, QString>* iconMap)
|
||||
: QWidget(parent), m_iconMap(iconMap)
|
||||
{
|
||||
|
@ -268,6 +289,14 @@ CursorImageWidget::CursorImageWidget(QWidget *parent, const QMap<QString, QStrin
|
|||
graphicsView->setTransform(transform);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新图标
|
||||
*
|
||||
* 根据给定的 widgetName 和 newFilePath,更新指定在 QGraphicsView 中的光标图像部件的图标。
|
||||
*
|
||||
* @param widgetName 部件名称
|
||||
* @param newFilePath 新的文件路径
|
||||
*/
|
||||
void CursorImageWidget::updateIcon(const QString& widgetName, const QString& newFilePath)
|
||||
{
|
||||
QGraphicsScene* scene = graphicsView->scene();
|
||||
|
@ -300,7 +329,13 @@ void CursorImageWidget::setIconMap(QMap<QString, QString> *iconmap)
|
|||
m_iconMap = iconmap;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 构造函数
|
||||
*
|
||||
* 创建一个 CursorEditWidget 对象。
|
||||
*
|
||||
* @param parent 父对象指针
|
||||
*/
|
||||
CursorEditWidget::CursorEditWidget(QWidget *parent)
|
||||
{
|
||||
|
||||
|
@ -342,6 +377,13 @@ CursorCustomLabel::CursorCustomLabel(QWidget *parent): QLabel(parent), pixmap()
|
|||
this->setFixedSize(48,48);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 绘制事件
|
||||
*
|
||||
* 当需要绘制标签时,调用此函数。
|
||||
*
|
||||
* @param event QPaintEvent 对象指针,表示绘制事件
|
||||
*/
|
||||
void CursorCustomLabel::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
QLabel::paintEvent(event); // 调用父类的 paintEvent 函数,绘制文本
|
||||
|
|
|
@ -35,6 +35,11 @@ void CursorThemeWidget::eidtInitWidget(const HistoryInfo &InfoData)
|
|||
updateCustomPathMap(m_historytimeiconpathmap,"timecursor");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化预览小部件
|
||||
*
|
||||
* 创建一个新的预览小部件,并对其进行初始化。
|
||||
*/
|
||||
void CursorThemeWidget::initPreviewWidget()
|
||||
{
|
||||
m_previewwidget = new QWidget(this);
|
||||
|
@ -64,6 +69,15 @@ void CursorThemeWidget::initPreviewWidget()
|
|||
m_previewlayout->addItem(spacer2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 从目录中的文件获取小部件名称列表
|
||||
*
|
||||
* 从指定的目录中获取所有文件的名称,并返回包含小部件名称的字符串列表。
|
||||
*
|
||||
* @param directoryPath 目录路径
|
||||
*
|
||||
* @return 小部件名称列表
|
||||
*/
|
||||
QStringList CursorThemeWidget::getWidgetNamesFromFilesInDirectory(const QString& directoryPath) {
|
||||
QStringList widgetNames;
|
||||
QDir dir(directoryPath);
|
||||
|
@ -78,6 +92,11 @@ QStringList CursorThemeWidget::getWidgetNamesFromFilesInDirectory(const QString&
|
|||
return widgetNames;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 刷新光标主题控件
|
||||
*
|
||||
* 刷新光标主题控件,更新预览控件的图标映射和自定义路径映射。
|
||||
*/
|
||||
void CursorThemeWidget::refresh()
|
||||
{
|
||||
m_preview->updateIconMap(getResourcesAppIconMap("cursor"));
|
||||
|
@ -86,6 +105,15 @@ void CursorThemeWidget::refresh()
|
|||
updateCustomPathMap(m_timeiconpathmap,"timecursor");
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取资源应用程序图标映射
|
||||
*
|
||||
* 根据指定的类型获取资源应用程序图标映射。
|
||||
*
|
||||
* @param Type 类型
|
||||
*
|
||||
* @return 返回 QMap<QString, QString> 指针,指向图标映射
|
||||
*/
|
||||
QMap<QString, QString> *CursorThemeWidget::getResourcesAppIconMap(QString Type)
|
||||
{
|
||||
if("cursor" == Type){
|
||||
|
@ -112,6 +140,11 @@ QMap<QString, QString> *CursorThemeWidget::getResourcesAppIconMap(QString Type)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化Map
|
||||
*
|
||||
* 初始化Map数据,包括获取光标相关资源和应用图标映射。
|
||||
*/
|
||||
void CursorThemeWidget::initMaps()
|
||||
{
|
||||
getResourcesAppIconMap("cursor");
|
||||
|
@ -119,6 +152,11 @@ void CursorThemeWidget::initMaps()
|
|||
m_pathWidgetMap = new QMap<QString, CursorEditWidget*>;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化时间映射
|
||||
*
|
||||
* 初始化时间映射,包括获取资源应用程序图标映射和自定义图标路径映射。
|
||||
*/
|
||||
void CursorThemeWidget::initTimeMaps()
|
||||
{
|
||||
getResourcesAppIconMap("timecursor");
|
||||
|
@ -126,6 +164,9 @@ void CursorThemeWidget::initTimeMaps()
|
|||
m_timepathWidgetMap = new QMap<QString, CursorEditWidget*>;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化右侧小部件
|
||||
*/
|
||||
void CursorThemeWidget::initRightWidget()
|
||||
{
|
||||
m_rightwidget = new QWidget(this);
|
||||
|
@ -175,25 +216,41 @@ void CursorThemeWidget::initRightWidget()
|
|||
});
|
||||
|
||||
|
||||
// 遍历sortedList1中的每个元素,创建一个CursorEditWidget对象,并将其添加到主布局中
|
||||
for (const auto& pair : sortedList1) {
|
||||
const QString& widgetName = pair.first;
|
||||
const QString& filePath = pair.second;
|
||||
|
||||
// 创建一个CursorEditWidget对象,并将其设置为viewportWidget的子控件
|
||||
CursorEditWidget* widget = new CursorEditWidget(viewportWidget);
|
||||
// 设置widget的默认图标为filePath指定的文件路径
|
||||
widget->setdefaulticon(filePath);
|
||||
// 将widget添加到主布局中
|
||||
mainLayout->addWidget(widget);
|
||||
// 将widget插入到m_pathWidgetMap中,以便后续可以通过widgetName找到对应的widget
|
||||
m_pathWidgetMap->insert(widgetName, widget);
|
||||
|
||||
connect(widget->m_addiconbutton, &QPushButton::clicked, this, [=]() {
|
||||
|
||||
// 通过sender()获取发送信号的对象,将其强制转换为QPushButton指针类型
|
||||
QPushButton* clickedButton = qobject_cast<QPushButton*>(sender());
|
||||
// 如果获取的对象是合法的QPushButton对象
|
||||
if (clickedButton) {
|
||||
// 通过clickedButton的parentWidget()获取widget对象,并将其强制转换为CursorEditWidget指针类型
|
||||
CursorEditWidget* clickedWidget = qobject_cast<CursorEditWidget*>(clickedButton->parentWidget());
|
||||
// 如果获取的对象是合法的CursorEditWidget对象
|
||||
if (clickedWidget) {
|
||||
// 弹出文件选择对话框,让用户选择一个SVG文件
|
||||
QString newFilePath = QFileDialog::getOpenFileName(this, tr("Select SVG file"), "", tr("SVG file (*.svg)"));
|
||||
// 如果用户选择了文件,且文件路径不为空
|
||||
if (!newFilePath.isEmpty()) {
|
||||
// 将widgetName和newFilePath插入到m_customiconpathmap中,以便后续可以通过widgetName找到自定义图标路径
|
||||
m_customiconpathmap->insert(widgetName, newFilePath);
|
||||
// 调用m_preview的updateIcon函数,更新预览图标
|
||||
m_preview->updateIcon(widgetName, newFilePath);
|
||||
// 设置widget的自定义图标为newFilePath指定的文件路径
|
||||
clickedWidget->setcustomicon(newFilePath);
|
||||
// 发出newCursorMap信号,通知其他部分更新图标映射
|
||||
emit newCursorMap(m_customiconpathmap);
|
||||
g_themeChange = true;
|
||||
} else {
|
||||
|
@ -214,19 +271,32 @@ void CursorThemeWidget::initRightWidget()
|
|||
m_timepathWidgetMap->insert(widgetName, widget);
|
||||
connect(widget->m_addiconbutton, &QPushButton::clicked, this, [=]() {
|
||||
|
||||
// 获取发送信号的按钮对象
|
||||
QPushButton* clickedButton = qobject_cast<QPushButton*>(sender());
|
||||
// 判断获取的按钮对象是否为空,如果不为空,则继续执行下面的代码
|
||||
if (clickedButton) {
|
||||
// 通过按钮对象的parentWidget获取其父窗口对象,假设该父窗口对象为CursorEditWidget
|
||||
CursorEditWidget* clickedWidget = qobject_cast<CursorEditWidget*>(clickedButton->parentWidget());
|
||||
// 判断获取的CursorEditWidget对象是否为空,如果不为空,则继续执行下面的代码
|
||||
if (clickedWidget) {
|
||||
// 使用QFileDialog::getOpenFileName函数打开一个文件选择对话框,选择一个SVG文件
|
||||
QString newFilePath = QFileDialog::getOpenFileName(this, tr("Select SVG file"), "", tr("SVG file (*.svg)"));
|
||||
// 判断选择的文件路径是否为空,如果不为空,则执行下面的代码
|
||||
if (!newFilePath.isEmpty()) {
|
||||
|
||||
// 将选择的文件路径插入到m_timecustomiconpathmap中,假设widgetName为键
|
||||
m_timecustomiconpathmap->insert(widgetName, newFilePath);
|
||||
|
||||
// 更新m_preview2的对应图标
|
||||
m_preview2->updateIcon(widgetName, newFilePath);
|
||||
|
||||
// 设置clickedWidget的自定义图标
|
||||
clickedWidget->setcustomicon(newFilePath);
|
||||
|
||||
// 发出一个新的时间光标映射信号,假设m_timecustomiconpathmap为数据源
|
||||
emit newTimeCursorMap(m_timecustomiconpathmap);
|
||||
g_themeChange = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -237,6 +307,13 @@ void CursorThemeWidget::initRightWidget()
|
|||
m_rightwidget->setLayout(mainWidgetLayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置历史光标
|
||||
*
|
||||
* 根据给定的类型设置历史光标的主题。
|
||||
*
|
||||
* @param type 光标类型
|
||||
*/
|
||||
void CursorThemeWidget::setHistoryCursor(QString type)
|
||||
{
|
||||
if("cursor" == type){
|
||||
|
@ -249,8 +326,11 @@ void CursorThemeWidget::setHistoryCursor(QString type)
|
|||
m_historyiconpathmap = new QMap<QString, QString>;
|
||||
|
||||
foreach (const QString& fileName, fileList) {
|
||||
QString filePath = directoryPath + fileName; // 使用文件名构建文件路径
|
||||
// 使用文件名构建文件路径
|
||||
QString filePath = directoryPath + fileName;
|
||||
// 获取文件名(不包括扩展名)
|
||||
QString name = fileName.left(fileName.lastIndexOf('.'));
|
||||
// 将文件名和文件路径插入到历史图标路径映射表中
|
||||
m_historyiconpathmap->insert(name, filePath);
|
||||
}
|
||||
} else if ("timecursor" == type){
|
||||
|
@ -263,14 +343,25 @@ void CursorThemeWidget::setHistoryCursor(QString type)
|
|||
m_historytimeiconpathmap = new QMap<QString, QString>;
|
||||
|
||||
foreach (const QString& fileName, fileList) {
|
||||
// 使用文件名构建文件路径
|
||||
QString filePath = directoryPath + fileName; // 使用文件名构建文件路径
|
||||
// 获取文件名(不包括扩展名)
|
||||
QString name = fileName.left(fileName.lastIndexOf('.'));
|
||||
// 将文件名和文件路径插入到 map 中
|
||||
m_historytimeiconpathmap->insert(name, filePath);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新自定义路径映射
|
||||
*
|
||||
* 根据给定的历史映射和类型,更新自定义路径映射。
|
||||
*
|
||||
* @param historyMap 历史映射指针
|
||||
* @param type 类型
|
||||
*/
|
||||
void CursorThemeWidget::updateCustomPathMap(QMap<QString, QString> *historyMap, QString type)
|
||||
{
|
||||
if("cursor" == type){
|
||||
|
|
|
@ -5,87 +5,178 @@
|
|||
#include <QPainterPath>
|
||||
#include <QGraphicsBlurEffect>
|
||||
|
||||
/**
|
||||
* @brief CustomGraphicsView 构造函数
|
||||
*
|
||||
* 创建一个 CustomGraphicsView 对象,并设置相应的参数。
|
||||
*
|
||||
* @param scene QGraphicsScene 对象指针
|
||||
*/
|
||||
CustomGraphicsView::CustomGraphicsView(QGraphicsScene* scene) : QGraphicsView(scene) {
|
||||
// 设置视图跟随鼠标的变换锚点
|
||||
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
|
||||
// 设置拖拽模式为手滚动模式
|
||||
setDragMode(QGraphicsView::ScrollHandDrag);
|
||||
// 设置抗锯齿渲染提示,开启抗锯齿
|
||||
setRenderHint(QPainter::Antialiasing, true);
|
||||
// 设置优化标志,不调整抗锯齿优化和保存画家的状态
|
||||
setOptimizationFlags(QGraphicsView::DontAdjustForAntialiasing |
|
||||
QGraphicsView::DontSavePainterState);
|
||||
// 设置背景色为透明
|
||||
this->setStyleSheet("background-color: transparent;");
|
||||
// 设置水平滚动条始终隐藏
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
// 设置垂直滚动条始终隐藏
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 滚轮事件
|
||||
*
|
||||
* 当触发滚轮事件时,如果按下 Ctrl 键,则执行缩放操作。根据滚轮滚动的距离计算缩放倍数,并限制最大缩放倍数为 1.1 倍。
|
||||
* 如果未按下 Ctrl 键,则调用父类的滚轮事件处理函数。
|
||||
*
|
||||
* @param event 滚轮事件指针
|
||||
*/
|
||||
void CustomGraphicsView::wheelEvent(QWheelEvent* event) {
|
||||
// 判断是否按下了控制键
|
||||
if (QGuiApplication::keyboardModifiers() == Qt::ControlModifier) {
|
||||
// 根据滚轮的滚动距离计算缩放因子
|
||||
qreal scaleFactor = std::pow(qreal(2), event->delta() / 240.0);
|
||||
qreal currentScale = transform().m11(); // 获取当前的缩放倍数
|
||||
// 获取当前的缩放倍数
|
||||
qreal currentScale = transform().m11();
|
||||
// 限制最大为1.1倍
|
||||
// 计算目标缩放倍数
|
||||
qreal targetScale = currentScale * scaleFactor;
|
||||
if (targetScale > 1.1) {
|
||||
// 如果目标缩放倍数大于1.1,则缩小到1.1倍
|
||||
scaleFactor = 1.1 / currentScale;
|
||||
}else if (targetScale < 0.3) {
|
||||
// 如果目标缩放倍数小于0.3,则放大到0.3倍
|
||||
scaleFactor = 0.3 / currentScale;
|
||||
}
|
||||
// 执行缩放操作
|
||||
scale(scaleFactor, scaleFactor);
|
||||
} else {
|
||||
// 如果不是控制键,则调用QGraphicsView的滚轮事件处理方法
|
||||
QGraphicsView::wheelEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新全局图像小部件的半径
|
||||
*
|
||||
* 根据滑块的值更新全局图像小部件的半径。
|
||||
*
|
||||
* @param sliderValue 滑块的值
|
||||
*/
|
||||
void GlobalImageWidget::updateWidgetRadius(int sliderValue) {
|
||||
|
||||
// 将滑块的值赋给半径变量
|
||||
int radius = sliderValue;
|
||||
// 将半径值设置给显示控件
|
||||
m_showwidget->setRadius(radius);
|
||||
// 更新显示控件的显示
|
||||
m_showwidget->update();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新按钮颜色
|
||||
*
|
||||
* 根据给定的颜色更新按钮的颜色。
|
||||
*
|
||||
* @param color 要更新的按钮颜色
|
||||
*/
|
||||
void GlobalImageWidget::updateButtonColor(const QColor& color) {
|
||||
// 获取m_showbtn的调色板
|
||||
QPalette palette = m_showbtn->palette();
|
||||
|
||||
// 设置调色板中的按钮颜色为传入的color
|
||||
palette.setColor(QPalette::Button, color);
|
||||
// 将修改后的调色板应用到m_showbtn
|
||||
m_showbtn->setPalette(palette);
|
||||
|
||||
// 更新m_showbtn的显示
|
||||
m_showbtn->update();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新小部件的背景颜色
|
||||
*
|
||||
* 根据给定的颜色更新小部件的背景颜色。
|
||||
*
|
||||
* @param color 背景颜色
|
||||
*/
|
||||
void GlobalImageWidget::updateWidgetBackgroundColor(const QColor& color)
|
||||
{
|
||||
// 设置显示小部件的背景颜色
|
||||
m_showwidget->setBackgroundColor(color);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新覆盖图像
|
||||
*
|
||||
* 根据指定的覆盖图像路径,更新全局图像小部件的覆盖图像。
|
||||
*
|
||||
* @param overlayImagePath 覆盖图像路径
|
||||
*/
|
||||
void GlobalImageWidget::updateOverlayImage(const QString& overlayImagePath) {
|
||||
// 加载叠加图像
|
||||
QPixmap overlayImage(overlayImagePath);
|
||||
|
||||
// 如果叠加图像不为空
|
||||
if (!overlayImage.isNull()) {
|
||||
// 创建一个与原图像大小相同的透明图像
|
||||
m_mergedImage = QPixmap(m_image.size());
|
||||
m_mergedImage.fill(Qt::transparent);
|
||||
|
||||
// 创建一个画板,将原图像画到新的合并图像上
|
||||
QPainter painter(&m_mergedImage);
|
||||
painter.drawPixmap(0, 0, m_image);
|
||||
|
||||
// 计算叠加图像的位置,使其居中显示
|
||||
int x = (m_image.width() - overlayImage.width()) / 2;
|
||||
int y = m_image.height() - overlayImage.height();
|
||||
painter.drawPixmap(x, y, overlayImage);
|
||||
painter.end();
|
||||
|
||||
// 将原代理窗口删除,并清空场景
|
||||
QGraphicsProxyWidget* newproxy = m_proxy;
|
||||
m_scene->removeItem(m_proxy);
|
||||
m_scene->clear();
|
||||
|
||||
// 将合并后的图像添加到场景中,并设置场景大小为合并图像的大小
|
||||
m_scene->addPixmap(m_mergedImage);
|
||||
m_scene->setSceneRect(m_mergedImage.rect());
|
||||
|
||||
// 调整视图大小,保持长宽比不变
|
||||
graphicsView->fitInView(m_scene->sceneRect(), Qt::KeepAspectRatio);
|
||||
|
||||
// 将原代理窗口重新添加到场景中
|
||||
m_scene->addItem(newproxy);
|
||||
} else {
|
||||
qDebug() << "Failed to load overlay image.";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新比例尺
|
||||
*
|
||||
* 根据当前图像的大小和缩放级别,更新比例尺并重新设置视图。
|
||||
*/
|
||||
void GlobalImageWidget::updatescale()
|
||||
{
|
||||
// 重置视图变换
|
||||
graphicsView->resetTransform();
|
||||
|
||||
// 定义中心点坐标为(1500, 600)
|
||||
QPointF centerPoint(1500, 600);
|
||||
|
||||
// 将视图中心定位到中心点
|
||||
graphicsView->centerOn(centerPoint);
|
||||
|
||||
// 缩放视图,缩放比例为1:1,即不进行缩放
|
||||
graphicsView->scale(1, 1);
|
||||
}
|
||||
|
||||
|
@ -97,17 +188,42 @@ void GlobalImageWidget::updatescale1()
|
|||
graphicsView->scale(0.3, 0.3);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新控件半径
|
||||
*
|
||||
* 根据给定的值更新控件的半径。
|
||||
*
|
||||
* @param Value 半径值
|
||||
*/
|
||||
void GlobalImageWidget::updateControlRadius(int Value)
|
||||
{
|
||||
// 设置显示按钮的半径
|
||||
m_showbtn->setRadius(Value);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新透明度
|
||||
*
|
||||
* 根据指定的透明度值更新图像小部件的透明度。
|
||||
*
|
||||
* @param transparency 透明度值
|
||||
*/
|
||||
void GlobalImageWidget::updateTransparency(int transparency)
|
||||
{
|
||||
// 设置m_showwidget的透明度为传入的参数transparency
|
||||
m_showwidget->setTransparency(transparency);
|
||||
// 更新m_showwidget的显示
|
||||
m_showwidget->update();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GlobalImageWidget构造函数
|
||||
*
|
||||
* 创建一个GlobalImageWidget对象
|
||||
*
|
||||
* @param parent 父QWidget对象
|
||||
* @param coverFilePath 封面文件路径
|
||||
*/
|
||||
GlobalImageWidget::GlobalImageWidget(QWidget *parent, const QString& coverFilePath)
|
||||
: QWidget(parent), m_coverFilePath(coverFilePath) {
|
||||
|
||||
|
@ -184,6 +300,14 @@ GlobalImageWidget::GlobalImageWidget(QWidget *parent, const QString& coverFilePa
|
|||
// m_showwidget->setGraphicsEffect(blurEffect);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 全局主题功能构造函数
|
||||
*
|
||||
* 通过给定的封面文件路径创建一个全局图像部件,并将其添加到全局主题功能中。
|
||||
*
|
||||
* @param parent 父部件指针
|
||||
* @param coverFilePath 封面文件路径
|
||||
*/
|
||||
Globalthemefeature::Globalthemefeature(QWidget *parent, const QString& coverFilePath)
|
||||
: QWidget(parent) {
|
||||
GlobalImageWidget* globalImageWidget = new GlobalImageWidget(this, coverFilePath);
|
||||
|
@ -216,15 +340,27 @@ void RoundedWidget::setBackgroundColor(const QColor &color)
|
|||
// update();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 绘制事件
|
||||
*
|
||||
* 当需要进行绘制时,会调用该函数。
|
||||
*
|
||||
* @param event 绘制事件指针
|
||||
*/
|
||||
void RoundedWidget::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
|
||||
// 创建QPainter对象,用于绘制图形
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::Antialiasing, true); // 开启抗锯齿
|
||||
// 开启抗锯齿绘制
|
||||
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||
|
||||
// 获取控件的内容矩形,并根据边框宽度进行调整
|
||||
QRectF rect = contentsRect().adjusted(borderWidth, borderWidth, -borderWidth, -borderWidth);
|
||||
int r = std::min(rect.width(), rect.height()) / 2; // 计算圆角半径
|
||||
int actualRadius = std::min(m_radius, r); // 取实际圆角半径和计算半径的较小值
|
||||
// 计算圆角半径
|
||||
int r = std::min(rect.width(), rect.height()) / 2;
|
||||
// 取实际圆角半径和计算半径的较小值
|
||||
int actualRadius = std::min(m_radius, r);
|
||||
// 设置背景色的透明度
|
||||
backgroundColor.setAlphaF(m_transparency);
|
||||
|
||||
// 绘制背景
|
||||
|
@ -232,13 +368,19 @@ void RoundedWidget::paintEvent(QPaintEvent *event)
|
|||
painter.setBrush(backgroundColor);
|
||||
painter.drawRoundedRect(rect, actualRadius, actualRadius);
|
||||
|
||||
// 绘制边框
|
||||
// // 绘制边框
|
||||
// painter.setPen(QPen(borderColor, borderWidth));
|
||||
// painter.setBrush(Qt::NoBrush);
|
||||
// painter.drawRoundedRect(rect, actualRadius, actualRadius);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RoundedButton 构造函数
|
||||
*
|
||||
* 创建一个 RoundedButton 对象,并将其初始化为 QPushButton 类型。
|
||||
*
|
||||
* @param parent 父对象指针
|
||||
*/
|
||||
RoundedButton::RoundedButton(QWidget *parent): QPushButton(parent)
|
||||
{
|
||||
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
|
||||
|
@ -247,12 +389,26 @@ RoundedButton::RoundedButton(QWidget *parent): QPushButton(parent)
|
|||
setFocusPolicy(Qt::NoFocus);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置圆角半径
|
||||
*
|
||||
* 设置圆角按钮的半径。
|
||||
*
|
||||
* @param radius 半径值
|
||||
*/
|
||||
void RoundedButton::setRadius(int radius)
|
||||
{
|
||||
m_radius = radius;
|
||||
update();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 绘制事件处理函数
|
||||
*
|
||||
* 在绘制事件发生时,执行绘制操作。
|
||||
*
|
||||
* @param event 绘制事件指针
|
||||
*/
|
||||
void RoundedButton::paintEvent(QPaintEvent *event) {
|
||||
QPainter painter(this);
|
||||
painter.setRenderHint(QPainter::Antialiasing);
|
||||
|
|
|
@ -2,6 +2,13 @@
|
|||
#include "../fileProcess/filecheck.h"
|
||||
|
||||
bool GlobalThemeWidget::g_themeChange;
|
||||
/**
|
||||
* @brief 构造函数
|
||||
*
|
||||
* 创建一个 GlobalThemeWidget 对象,并设置父窗口。
|
||||
*
|
||||
* @param parent 父窗口指针
|
||||
*/
|
||||
GlobalThemeWidget::GlobalThemeWidget(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
initPreviewWidget();
|
||||
|
@ -12,11 +19,25 @@ GlobalThemeWidget::GlobalThemeWidget(QWidget *parent) : QWidget(parent)
|
|||
this->setLayout(m_globalthemelayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取壁纸路径
|
||||
*
|
||||
* 返回壁纸的路径。
|
||||
*
|
||||
* @return 壁纸路径
|
||||
*/
|
||||
QString GlobalThemeWidget::getWallpaperPath()
|
||||
{
|
||||
return m_wallpaperpath;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化小部件
|
||||
*
|
||||
* 根据给定的历史信息编辑小部件的初始化。
|
||||
*
|
||||
* @param InfoData 历史信息
|
||||
*/
|
||||
void GlobalThemeWidget::eidtInitWidget(const HistoryInfo &InfoData)
|
||||
{
|
||||
m_info = InfoData;
|
||||
|
@ -30,6 +51,11 @@ void GlobalThemeWidget::eidtInitWidget(const HistoryInfo &InfoData)
|
|||
// this->update();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 刷新全局主题界面
|
||||
*
|
||||
* 刷新全局主题界面,更新设置项。
|
||||
*/
|
||||
void GlobalThemeWidget::refresh()
|
||||
{
|
||||
|
||||
|
@ -42,6 +68,12 @@ void GlobalThemeWidget::refresh()
|
|||
m_preview->updatescale1();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化预览小部件
|
||||
*
|
||||
* 创建一个新的 QWidget 作为预览小部件,并设置其大小和背景颜色。
|
||||
* 预览小部件用于展示壁纸的预览图。
|
||||
*/
|
||||
void GlobalThemeWidget::initPreviewWidget()
|
||||
{
|
||||
m_previewwidget = new QWidget(this);
|
||||
|
@ -60,6 +92,11 @@ void GlobalThemeWidget::initPreviewWidget()
|
|||
m_previewwidget->setLayout(m_previewlayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化右侧小部件
|
||||
*
|
||||
* 初始化右侧小部件,包括滚动区域、视口小部件、各个主题设置小部件等。
|
||||
*/
|
||||
void GlobalThemeWidget::initRightWidget()
|
||||
{
|
||||
m_rightwidget = new QWidget(this);
|
||||
|
@ -107,6 +144,11 @@ void GlobalThemeWidget::initRightWidget()
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化CoverWidget
|
||||
*
|
||||
* 初始化CoverWidget控件,并设置相关属性。
|
||||
*/
|
||||
void GlobalThemeWidget::initCoverWidget()
|
||||
{
|
||||
m_coverwidget = new QWidget(m_viewportwidget);
|
||||
|
@ -139,12 +181,13 @@ void GlobalThemeWidget::initCoverWidget()
|
|||
|
||||
connect(m_coverbtn, &QPushButton::clicked, this, [=]() {
|
||||
QString newFilePath = QFileDialog::getOpenFileName(this, tr("Select picture file"), "", tr("Picture file (*.png *.jpg)"));
|
||||
bool legalFile = FileCheck::isLegalWallPaperFile(newFilePath,"cover");
|
||||
|
||||
if (newFilePath.isEmpty() || !legalFile) {
|
||||
if (newFilePath.isEmpty()) {
|
||||
newFilePath = m_coverpath;
|
||||
}else{
|
||||
if(!FileCheck::isLegalWallPaperFile(newFilePath,"cover")){
|
||||
newFilePath = m_coverpath;
|
||||
}
|
||||
}
|
||||
|
||||
m_coverpath = newFilePath;
|
||||
m_coverbtn->setIcon(QIcon(m_coverpath));
|
||||
m_coverbtn->setIconSize(m_coverbtn->size());
|
||||
|
@ -160,6 +203,11 @@ void GlobalThemeWidget::initCoverWidget()
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化桌面壁纸小部件
|
||||
*
|
||||
* 初始化桌面壁纸小部件,并设置相关属性。
|
||||
*/
|
||||
void GlobalThemeWidget::initWallPaperWidget()
|
||||
{
|
||||
m_wallpaperwidget = new QWidget(m_viewportwidget);
|
||||
|
@ -187,15 +235,17 @@ void GlobalThemeWidget::initWallPaperWidget()
|
|||
connect(wallpaperbtn, &QPushButton::clicked, this, [=]() {
|
||||
QString newFilePath = QFileDialog::getOpenFileName(this, tr("Select picture file"), "", tr("Picture file (*.png *.jpg)"));
|
||||
|
||||
if (!newFilePath.isEmpty() && FileCheck::isLegalWallPaperFile(newFilePath,"wallpaper")) {
|
||||
updateWallpaperFilePath(newFilePath);
|
||||
emit wallpaperupdate(newFilePath);
|
||||
emit newWallpaperFilePath(newFilePath);
|
||||
if (!newFilePath.isEmpty()) {
|
||||
if(FileCheck::isLegalWallPaperFile(newFilePath,"wallpaper")){
|
||||
updateWallpaperFilePath(newFilePath);
|
||||
emit wallpaperupdate(newFilePath);
|
||||
emit newWallpaperFilePath(newFilePath);
|
||||
|
||||
QPixmap pixmap(newFilePath);
|
||||
wallpaperbtn->setIcon(QIcon(pixmap));
|
||||
wallpaperbtn->setIconSize(wallpaperbtn->size());
|
||||
g_themeChange = true;
|
||||
QPixmap pixmap(newFilePath);
|
||||
wallpaperbtn->setIcon(QIcon(pixmap));
|
||||
wallpaperbtn->setIconSize(wallpaperbtn->size());
|
||||
g_themeChange = true;
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Selected file path:" << newFilePath;
|
||||
updateWallpaperFilePath(m_wallpaperpath);
|
||||
|
@ -208,6 +258,15 @@ void GlobalThemeWidget::initWallPaperWidget()
|
|||
m_wallpaperwidget->setLayout(layout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化外观小部件
|
||||
*
|
||||
* 创建一个新的 QWidget,并设置其固定高度为 65。
|
||||
* 创建一个 QLabel,设置其宽度与小部件相同,并设置文本为 "Window appearance"。
|
||||
* 创建一个 QHBoxLayout,并添加 QLabel 和 QComboBox 到布局中。
|
||||
* 设置 QComboBox 的项目,包括 "light" 和 "dark" 两个选项,分别对应白色和黑色。
|
||||
* 连接 QComboBox 的 currentIndexChanged 信号到槽函数,当选项改变时更新预览小部件的背景颜色和覆盖图像,并发送 newExterior 信号。
|
||||
*/
|
||||
void GlobalThemeWidget::initExteriorWidget()
|
||||
{
|
||||
m_exteriorwidget = new QWidget(m_viewportwidget);
|
||||
|
@ -244,6 +303,11 @@ void GlobalThemeWidget::initExteriorWidget()
|
|||
m_exteriorwidget->setLayout(layout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化圆角控件小部件
|
||||
*
|
||||
* 初始化圆角控件小部件,并设置相关属性和布局。
|
||||
*/
|
||||
void GlobalThemeWidget::initFilletWidget()
|
||||
{
|
||||
m_filletwidget = new QWidget(m_viewportwidget);
|
||||
|
@ -286,6 +350,11 @@ void GlobalThemeWidget::initFilletWidget()
|
|||
m_filletwidget->setLayout(layout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化强调色控件
|
||||
*
|
||||
* 初始化强调色控件,并设置相应的布局和功能。
|
||||
*/
|
||||
void GlobalThemeWidget::initAccentColorWidget()
|
||||
{
|
||||
m_accentcolorwidget = new QWidget(m_viewportwidget);
|
||||
|
@ -322,6 +391,16 @@ void GlobalThemeWidget::initAccentColorWidget()
|
|||
m_accentcolorwidget->setLayout(layout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化透明度控件
|
||||
*
|
||||
* 创建一个QWidget作为透明度控件,并设置其固定高度。
|
||||
* 创建一个水平布局,添加标题标签和透明度滑块。
|
||||
* 设置滑块的相关属性,包括方向、固定宽度、范围、单步长、刻度间隔和固定宽度,并设置初始值为65。
|
||||
* 创建一个显示按钮,并设置其大小和文本。
|
||||
* 连接滑块的值变化信号与更新透明度的槽函数。
|
||||
* 设置透明度控件的布局。
|
||||
*/
|
||||
void GlobalThemeWidget::initTransparencyWidget()
|
||||
{
|
||||
m_transparencywidget = new QWidget(m_viewportwidget);
|
||||
|
@ -357,6 +436,17 @@ void GlobalThemeWidget::initTransparencyWidget()
|
|||
m_transparencywidget->setLayout(layout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化窗户圆角控件
|
||||
*
|
||||
* 创建一个新的 QWidget,并将其设置为视口小部件的父小部件。
|
||||
* 设置透明度小部件的固定高度为 65。
|
||||
* 创建一个水平布局并添加标签和下拉框。
|
||||
* 下拉框包含 "Large"、"Medium" 和 "Small" 三项,分别对应 12、6 和 0 的整数值。
|
||||
* 将下拉框的当前选项设置为 "Medium",并连接下拉框的 currentIndexChanged 信号。
|
||||
* 当选项改变时,更新预览小部件的缩放比例,并更新控件的半径。
|
||||
* 发出新窗口半径信号,其中包含选定的半径大小。
|
||||
*/
|
||||
void GlobalThemeWidget::initWindowFilletWidget()
|
||||
{
|
||||
m_windowfilletwidget = new QWidget(m_viewportwidget);
|
||||
|
@ -370,11 +460,13 @@ void GlobalThemeWidget::initWindowFilletWidget()
|
|||
m_filletcombobox->addItem(tr("Small"), int(0));
|
||||
m_filletcombobox->setCurrentIndex(1);
|
||||
connect(m_filletcombobox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, [=](int index){
|
||||
|
||||
// 获取当前选项对应的圆角大小值
|
||||
int selectedSize = m_filletcombobox->itemData(index).value<int>();
|
||||
// 更新预览部件的缩放比例
|
||||
m_preview->updatescale();
|
||||
// 更新预览部件的圆角大小
|
||||
m_preview->updateWidgetRadius(selectedSize);
|
||||
|
||||
// 发出新的窗口圆角大小信号
|
||||
emit newWindowRadius(selectedSize);
|
||||
g_themeChange = true;
|
||||
});
|
||||
|
@ -383,6 +475,13 @@ void GlobalThemeWidget::initWindowFilletWidget()
|
|||
m_windowfilletwidget->setLayout(layout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新壁纸文件路径
|
||||
*
|
||||
* 根据传入的封面文件路径更新壁纸文件路径。
|
||||
*
|
||||
* @param coverFilePath 封面文件路径
|
||||
*/
|
||||
void GlobalThemeWidget::updateWallpaperFilePath(const QString& coverFilePath) {
|
||||
m_wallpaperpath = coverFilePath;
|
||||
|
||||
|
@ -401,6 +500,11 @@ void GlobalThemeWidget::updateWallpaperFilePath(const QString& coverFilePath) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 添加间距项
|
||||
*
|
||||
* 在全局主题小部件中添加间距项。
|
||||
*/
|
||||
void GlobalThemeWidget::addspaceritem()
|
||||
{
|
||||
QSpacerItem *spacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding);
|
||||
|
@ -413,11 +517,25 @@ void GlobalThemeWidget::addspaceritem()
|
|||
m_previewlayout->addItem(spacer2);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置圆角设置
|
||||
*
|
||||
* 将指定的圆角值设置到控件中。
|
||||
*
|
||||
* @param radius 圆角值
|
||||
*/
|
||||
void GlobalThemeWidget::setRadiusSetting(int radius)
|
||||
{
|
||||
m_filletslider->setValue(radius);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置强调色
|
||||
*
|
||||
* 设置全局主题小部件的强调色。
|
||||
*
|
||||
* @param accentcolor 强调色的字符串表示形式
|
||||
*/
|
||||
void GlobalThemeWidget::setAccentColor(QString accentcolor)
|
||||
{
|
||||
QColor color;
|
||||
|
@ -429,21 +547,50 @@ void GlobalThemeWidget::setAccentColor(QString accentcolor)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置透明度
|
||||
*
|
||||
* 设置全局主题小部件的透明度。
|
||||
*
|
||||
* @param transparency 透明度值
|
||||
*/
|
||||
void GlobalThemeWidget::setTransparency(int transparency)
|
||||
{
|
||||
// 设置透明度滑块的当前值
|
||||
m_transparencyslider->setValue(transparency);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置封面
|
||||
*
|
||||
* 设置封面按钮的图标为封面路径对应的图标。
|
||||
*
|
||||
* @param coverpath 封面路径
|
||||
*/
|
||||
void GlobalThemeWidget::setCover(QString coverpath)
|
||||
{
|
||||
m_coverbtn->setIcon(QIcon(coverpath));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置壁纸
|
||||
*
|
||||
* 设置壁纸按钮的图标为壁纸路径对应的图标。
|
||||
*
|
||||
* @param wallpaperpath 壁纸路径
|
||||
*/
|
||||
void GlobalThemeWidget::setWallpaper(QString wallpaperpath)
|
||||
{
|
||||
wallpaperbtn->setIcon(QIcon(wallpaperpath));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置窗口半径
|
||||
*
|
||||
* 根据给定的窗口半径,设置控件的圆角程度。
|
||||
*
|
||||
* @param windowradius 窗口半径
|
||||
*/
|
||||
void GlobalThemeWidget::setWindowRadius(int windowradius)
|
||||
{
|
||||
QMap<int, int> radiusIndexMap;
|
||||
|
|
|
@ -36,6 +36,13 @@ void GrubGraphicsView::wheelEvent(QWheelEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief GrubImageWidget 构造函数
|
||||
*
|
||||
* 创建一个 GrubImageWidget 对象。
|
||||
*
|
||||
* @param parent 父对象
|
||||
*/
|
||||
GrubImageWidget::GrubImageWidget(QWidget *parent)
|
||||
{
|
||||
m_scene = new QGraphicsScene(this);
|
||||
|
@ -83,6 +90,13 @@ GrubImageWidget::GrubImageWidget(QWidget *parent)
|
|||
graphicsView->scale(initialScale, initialScale);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新背景图片
|
||||
*
|
||||
* 根据给定的图片路径,加载新的背景图片并更新界面显示。
|
||||
*
|
||||
* @param imagePath 图片路径
|
||||
*/
|
||||
void GrubImageWidget::updateBackground(const QString &imagePath)
|
||||
{
|
||||
// 加载新的背景图片
|
||||
|
|
|
@ -3,6 +3,13 @@
|
|||
#include <QFileDialog>
|
||||
|
||||
bool GrubThemeWidget::g_themeChange;
|
||||
/**
|
||||
* @brief GrubThemeWidget 构造函数
|
||||
*
|
||||
* 创建一个 GrubThemeWidget 对象。
|
||||
*
|
||||
* @param parent 父对象
|
||||
*/
|
||||
GrubThemeWidget::GrubThemeWidget(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
initPreviewWidget();
|
||||
|
@ -13,6 +20,18 @@ GrubThemeWidget::GrubThemeWidget(QWidget *parent) : QWidget(parent)
|
|||
this->setLayout(globalthemelayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化预览小部件
|
||||
*
|
||||
* 创建一个新的QWidget作为预览小部件,并设置其最小大小。
|
||||
* 设置预览小部件的背景角色为QPalette::Window。
|
||||
* 设置预览小部件的背景颜色为"#F5F5F5"。
|
||||
* 设置预览小部件自动填充背景。
|
||||
* 创建一个新的GrubImageWidget作为预览图像小部件。
|
||||
* 创建一个新的QVBoxLayout作为预览小部件的布局。
|
||||
* 添加一个空项。
|
||||
* 设置预览小部件的布局。
|
||||
*/
|
||||
void GrubThemeWidget::initPreviewWidget()
|
||||
{
|
||||
m_previewwidget = new QWidget(this);
|
||||
|
@ -33,6 +52,14 @@ void GrubThemeWidget::initPreviewWidget()
|
|||
m_previewwidget->setLayout(m_previewlayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化右侧小部件
|
||||
*
|
||||
* 创建一个新的 QWidget,并将其设置为当前对象的成员变量 m_rightwidget。
|
||||
* 设置最小大小为 400x620,最大宽度为 400。
|
||||
* 设置背景角色为 QPalette::Base。
|
||||
* 调用 initEditWidget() 函数初始化编辑小部件。
|
||||
*/
|
||||
void GrubThemeWidget::initRightWidget()
|
||||
{
|
||||
m_rightwidget = new QWidget(this);
|
||||
|
@ -42,6 +69,16 @@ void GrubThemeWidget::initRightWidget()
|
|||
initEditWidget();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化编辑小部件
|
||||
*
|
||||
* 创建一个新的 QWidget,设置固定高度,并添加垂直布局。
|
||||
* 创建两个 QLabel 和一个 QPushButton,并将它们添加到布局中。
|
||||
* 创建 QHBoxLayout,将 QPushButton 和 QLabel 添加到布局中。
|
||||
* 连接 QPushButton 的 clicked 信号,当点击按钮时,打开文件对话框选择图片文件。
|
||||
* 如果选择的文件合法,则更新背景预览并设置 QPushButton 的图标。
|
||||
* 发出 newGrubFilePath 信号以更新新的 Grub 文件路径。
|
||||
*/
|
||||
void GrubThemeWidget::initEditWidget()
|
||||
{
|
||||
m_grubwidget = new QWidget(m_rightwidget);
|
||||
|
@ -60,23 +97,29 @@ void GrubThemeWidget::initEditWidget()
|
|||
tipLabel1->setText("<html>尺寸:3840*2160<br>大小:不超过 10 MB<br>格式:PNG</html>");
|
||||
|
||||
connect(showBtn, &QPushButton::clicked, this, [=]() {
|
||||
// 弹出文件选择对话框,选择图片文件
|
||||
QString newFilePath = QFileDialog::getOpenFileName(this, tr("Select picture file"), "", tr("Picture file (*.png *.jpg)"));
|
||||
|
||||
if (!newFilePath.isEmpty()/* && FileCheck::isLegalWallPaperFile(newFilePath,"wallpaper")*/) {
|
||||
|
||||
m_preview->updateBackground(newFilePath);
|
||||
QPixmap pixmap(newFilePath);
|
||||
showBtn->setIcon(QIcon(pixmap));
|
||||
showBtn->setIconSize(showBtn->size());
|
||||
emit newGrubFilePath(newFilePath);
|
||||
g_themeChange = true;
|
||||
// 如果选择的文件路径不为空
|
||||
if (!newFilePath.isEmpty()) {
|
||||
// 判断选择的文件是否是合法的壁纸文件
|
||||
if(FileCheck::isLegalWallPaperFile(newFilePath,"wallpaper")){
|
||||
// 更新背景预览
|
||||
m_preview->updateBackground(newFilePath);
|
||||
// 加载图片文件并创建一个QPixmap对象
|
||||
QPixmap pixmap(newFilePath);
|
||||
// 设置按钮的图标为加载的图片文件对应的图标,并设置图标大小为按钮的大小
|
||||
showBtn->setIcon(QIcon(pixmap));
|
||||
showBtn->setIconSize(showBtn->size());
|
||||
// 发出新的Grub文件路径信号
|
||||
emit newGrubFilePath(newFilePath);
|
||||
g_themeChange = true;
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Selected file path:" << newFilePath;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
widgetLayout->addWidget(showBtn);
|
||||
widgetLayout->addWidget(tipLabel1);
|
||||
grubWidget->setLayout(widgetLayout);
|
||||
|
|
|
@ -2,6 +2,13 @@
|
|||
#include "../fileProcess/historyinfoload.h"
|
||||
#include "../fileProcess/diroperation.h"
|
||||
|
||||
/**
|
||||
* @brief 历史记录窗口
|
||||
*
|
||||
* 历史记录窗口类的构造函数,用于初始化历史记录窗口。
|
||||
*
|
||||
* @param parent 父窗口指针
|
||||
*/
|
||||
HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
QVBoxLayout *alllayout = new QVBoxLayout();
|
||||
|
@ -72,6 +79,13 @@ HistoryWidget::HistoryWidget(QWidget *parent) : QWidget(parent)
|
|||
this->setLayout(alllayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 历史记录窗口
|
||||
*
|
||||
* 历史记录窗口类的构造函数,用于初始化历史记录窗口。
|
||||
*
|
||||
* @param parent 父窗口指针
|
||||
*/
|
||||
void HistoryWidget::updateHistoryDir()
|
||||
{
|
||||
QDir builderDir = QDir(QDir::homePath() + "/.cache/theme-build/");
|
||||
|
@ -136,6 +150,13 @@ void HistoryWidget::updateHistoryDir()
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 历史按钮构造函数
|
||||
*
|
||||
* 创建一个历史按钮的构造函数。
|
||||
*
|
||||
* @param parent 父窗口指针
|
||||
*/
|
||||
HistoryButton::HistoryButton(QWidget* parent): QPushButton(parent)
|
||||
{
|
||||
// this->setBackgroundRole(QPalette::Base);
|
||||
|
@ -163,6 +184,11 @@ void HistoryButton::setThemeType(const QString &themeType)
|
|||
m_themetype = themeType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化 UI
|
||||
*
|
||||
* 初始化 HistoryButton 的 UI。
|
||||
*/
|
||||
void HistoryButton::initUI()
|
||||
{
|
||||
QVBoxLayout* layout = new QVBoxLayout(this);
|
||||
|
|
|
@ -1,5 +1,13 @@
|
|||
#include "iconthemewidget.h"
|
||||
|
||||
/**
|
||||
* @brief 构造函数
|
||||
*
|
||||
* 用于创建 IconThemeWidget 实例的构造函数。
|
||||
*
|
||||
* @param isHistory 是否为历史图标主题
|
||||
* @param parent 父 QWidget
|
||||
*/
|
||||
IconThemeWidget::IconThemeWidget(bool isHistory, QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
initMaps();
|
||||
|
@ -14,6 +22,16 @@ IconThemeWidget::IconThemeWidget(bool isHistory, QWidget *parent) : QWidget(pare
|
|||
this->setLayout(m_iconthemelayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化预览小部件
|
||||
*
|
||||
* 创建一个QWidget作为预览小部件,并设置其最小大小、背景颜色等属性。
|
||||
* 创建一个QStackedWidget作为图片预览的容器。
|
||||
* 创建两个ImageWidget分别用于显示自定义图标和系统图标,并更新图标路径映射。
|
||||
* 将两个ImageWidget添加到QStackedWidget中。
|
||||
* 将QStackedWidget添加到布局中。
|
||||
* 连接壁纸更新信号,当壁纸更新时,更新预览小部件的图片。
|
||||
*/
|
||||
void IconThemeWidget::initPreviewWidget()
|
||||
{
|
||||
m_previewwidget = new QWidget(this);
|
||||
|
@ -48,6 +66,11 @@ void IconThemeWidget::initPreviewWidget()
|
|||
m_previewwidget->setLayout(layout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化编辑小部件
|
||||
*
|
||||
* 初始化编辑小部件,并创建相应的控件和布局。
|
||||
*/
|
||||
void IconThemeWidget::initEditWidget()
|
||||
{
|
||||
|
||||
|
@ -102,6 +125,14 @@ void IconThemeWidget::initEditWidget()
|
|||
m_editwidget->setLayout(mainWidgetLayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新自定义图标路径映射
|
||||
*
|
||||
* 清空现有的 m_customiconpathmap,将 historyMap 中的数据复制到 m_customiconpathmap,
|
||||
* 并更新相应的图标和预览。
|
||||
*
|
||||
* @param historyMap 自定义图标路径历史的 QMap 指针
|
||||
*/
|
||||
void IconThemeWidget::updateCustomIconPathMap(QMap<QString, QString>*historyMap)
|
||||
{
|
||||
// 清空现有的 m_customiconpathmap
|
||||
|
@ -133,6 +164,13 @@ void IconThemeWidget::updateCustomIconPathMap(QMap<QString, QString>*historyMap)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新自定义系统图标路径映射
|
||||
*
|
||||
* 根据给定的历史图标路径映射,更新自定义系统图标路径映射。
|
||||
*
|
||||
* @param historyMap 历史图标路径映射指针
|
||||
*/
|
||||
void IconThemeWidget::updateCustomSyetemIconPathMap(QMap<QString, QString>*historyMap)
|
||||
{
|
||||
m_systemcustomiconpathmap->clear();
|
||||
|
@ -160,6 +198,12 @@ void IconThemeWidget::updateCustomSyetemIconPathMap(QMap<QString, QString>*histo
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化系统编辑控件
|
||||
*
|
||||
* 初始化系统编辑控件,并创建相应的子控件。
|
||||
*/
|
||||
void IconThemeWidget::initSystemEditWidget()
|
||||
{
|
||||
m_systemeditwidget = new QWidget(m_stackedwidget);
|
||||
|
@ -182,29 +226,44 @@ void IconThemeWidget::initSystemEditWidget()
|
|||
|
||||
m_systempathWidgetMap->insert(widgetName, widget);
|
||||
|
||||
// 当widget中的"添加图标"按钮被点击时,执行下面的函数。
|
||||
connect(widget->m_addiconbutton, &QPushButton::clicked, this, [=]() {
|
||||
|
||||
// 获取发出信号的按钮,并将其转换为QPushButton*类型。
|
||||
QPushButton* clickedButton = qobject_cast<QPushButton*>(sender());
|
||||
// 检查转换是否成功。如果成功,继续执行下面的代码。
|
||||
if (clickedButton) {
|
||||
// 定义一个IconEditWidget类型的指针变量,并将其初始化为nullptr。
|
||||
IconEditWidget* clickedWidget = nullptr;
|
||||
// 获取点击的按钮的父窗口,并将其作为QWidget类型保存。
|
||||
QWidget *widget = clickedButton->parentWidget();
|
||||
|
||||
// 循环遍历父窗口,直到找到一个窗口是IconEditWidget类型的窗口。
|
||||
while (widget && !widget->inherits("IconEditWidget")) {
|
||||
widget = widget->parentWidget();
|
||||
}
|
||||
// 将QWidget类型转换为IconEditWidget类型,并将结果保存到clickedWidget变量中。
|
||||
clickedWidget = qobject_cast<IconEditWidget*>(widget);
|
||||
// 检查转换是否成功。如果成功,继续执行下面的代码。
|
||||
if (clickedWidget) {
|
||||
|
||||
|
||||
// 显示一个文件选择对话框,让用户选择一个SVG文件。将文件路径保存到newFilePath变量中。
|
||||
QString newFilePath = QFileDialog::getOpenFileName(this, tr("Select SVG file"), "", tr("SVG file (*.svg)"));
|
||||
if (!newFilePath.isEmpty()) {
|
||||
//check
|
||||
if(FileCheck::isLegalIconFile(newFilePath)){
|
||||
// 将新的文件路径插入到m_systemcustomiconpathmap中,键为widgetName。
|
||||
m_systemcustomiconpathmap->insert(widgetName, newFilePath);
|
||||
// 设置clickedWidget的自定义图标为新的文件路径。
|
||||
clickedWidget->setcustomicon(newFilePath);
|
||||
|
||||
|
||||
// 输出选择的文件路径和对应的widgetName。
|
||||
qDebug() << "Selected file path:" << newFilePath<< "Corresponding widgetName:" << widgetName;
|
||||
// 更新系统预览图标的显示。
|
||||
m_systempreview->updateIcon(widgetName, newFilePath);
|
||||
}
|
||||
}
|
||||
// 发出一个新的系统图标映射信号。
|
||||
emit newSystemIconsMap(m_systemcustomiconpathmap);
|
||||
}
|
||||
}
|
||||
|
@ -216,6 +275,15 @@ void IconThemeWidget::initSystemEditWidget()
|
|||
m_systemeditwidget->setLayout(mainWidgetLayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 从目录中获取文件列表的widget名称
|
||||
*
|
||||
* 从指定的目录中获取文件列表,并返回包含文件名称的widget名称列表。
|
||||
*
|
||||
* @param directoryPath 目录路径
|
||||
*
|
||||
* @return widget名称列表
|
||||
*/
|
||||
QStringList IconThemeWidget::getWidgetNamesFromFilesInDirectory(const QString& directoryPath) {
|
||||
QStringList widgetNames;
|
||||
QDir dir(directoryPath);
|
||||
|
@ -230,6 +298,11 @@ QStringList IconThemeWidget::getWidgetNamesFromFilesInDirectory(const QString& d
|
|||
return widgetNames;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化应用程序图标地图
|
||||
*
|
||||
* 初始化应用程序图标地图。
|
||||
*/
|
||||
void IconThemeWidget::initMaps()
|
||||
{
|
||||
getResourcesAppIconMap("appicon");
|
||||
|
@ -238,6 +311,15 @@ void IconThemeWidget::initMaps()
|
|||
m_pathWidgetMap = new QMap<QString, IconEditWidget*>;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取资源应用程序图标映射
|
||||
*
|
||||
* 根据给定的类型获取资源应用程序图标映射。
|
||||
*
|
||||
* @param Type 图标类型
|
||||
*
|
||||
* @return 返回 QMap<QString, QString> 指针,指向应用程序图标映射
|
||||
*/
|
||||
QMap<QString, QString> *IconThemeWidget::getResourcesAppIconMap(QString Type)
|
||||
{
|
||||
if("appicon" == Type){
|
||||
|
@ -266,6 +348,11 @@ QMap<QString, QString> *IconThemeWidget::getResourcesAppIconMap(QString Type)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化系统图标主题
|
||||
*
|
||||
* 初始化系统图标主题,包括获取系统应用图标映射和系统自定义图标路径映射,并创建新的 QMap 对象用于存储图标编辑小部件。
|
||||
*/
|
||||
void IconThemeWidget::initSystemMaps()
|
||||
{
|
||||
//解决历史记录三次之后第单数历史记录窗出现段错误
|
||||
|
@ -275,6 +362,11 @@ void IconThemeWidget::initSystemMaps()
|
|||
m_systempathWidgetMap = new QMap<QString, IconEditWidget*>;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化右侧小部件
|
||||
*
|
||||
* 初始化右侧的子小部件,包括更换图标按钮、编辑图标和系统图标编辑页面以及堆叠式控件。
|
||||
*/
|
||||
void IconThemeWidget::initRightWidget()
|
||||
{
|
||||
m_rightwidget = new QWidget(this);
|
||||
|
@ -330,18 +422,37 @@ void IconThemeWidget::initRightWidget()
|
|||
m_rightwidget->setLayout(m_rightwidgetlayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取应用图标的 QMap 对象
|
||||
*
|
||||
* 返回一个 QMap 对象,该对象包含了应用图标的键值对。
|
||||
* 用于刷新
|
||||
* @return 应用图标的 QMap 对象指针
|
||||
*/
|
||||
QMap<QString, QString>* IconThemeWidget::getAppIconsMap()
|
||||
{
|
||||
getResourcesAppIconMap("icon");
|
||||
return m_iconpathmap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取系统图标映射表
|
||||
*
|
||||
* 获取系统图标映射表,返回一个 QMap 对象,其中键为图标名称,值为图标路径。
|
||||
* 用于刷新
|
||||
* @return 系统图标映射表
|
||||
*/
|
||||
QMap<QString, QString> *IconThemeWidget::getSystemIconsMap()
|
||||
{
|
||||
getResourcesAppIconMap("systemicon");
|
||||
return m_systemiconpathmap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置应用图标的浏览历史记录
|
||||
*
|
||||
* 根据指定的目录路径,浏览并加载该目录下所有的应用图标文件,并将它们保存到浏览历史记录中。
|
||||
*/
|
||||
void IconThemeWidget::setHistoryAppIcon()
|
||||
{
|
||||
QString directoryPath = m_info.filepath + "/src/iconTheme/appicon/";
|
||||
|
@ -361,6 +472,11 @@ void IconThemeWidget::setHistoryAppIcon()
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置历史系统图标
|
||||
*
|
||||
* 从指定路径加载系统图标,并存储在历史系统图标映射中。
|
||||
*/
|
||||
void IconThemeWidget::setHistorySystemIcon()
|
||||
{
|
||||
QString directoryPath = m_info.filepath + "/src/iconTheme/systemicon/";
|
||||
|
@ -378,7 +494,13 @@ void IconThemeWidget::setHistorySystemIcon()
|
|||
m_historysystemiconmap->insert(name, filePath);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化小部件
|
||||
*
|
||||
* 使用给定的历史信息数据初始化小部件。
|
||||
*
|
||||
* @param InfoData 历史信息数据对象
|
||||
*/
|
||||
void IconThemeWidget::eidtInitWidget(const HistoryInfo &InfoData)
|
||||
{
|
||||
m_info = InfoData;
|
||||
|
@ -390,6 +512,11 @@ void IconThemeWidget::eidtInitWidget(const HistoryInfo &InfoData)
|
|||
updateCustomSyetemIconPathMap(m_historysystemiconmap);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 刷新图标主题部件
|
||||
*
|
||||
* 更新图标主题部件的预览图标映射和自定义图标路径映射。
|
||||
*/
|
||||
void IconThemeWidget::refresh()
|
||||
{
|
||||
m_preview->updateIconMap(getResourcesAppIconMap("appicon"));
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#include "iconwidgetfeature.h"
|
||||
#include "iconwidgetfeature.h"
|
||||
|
||||
MainInterFaceFeature::MainInterFaceFeature(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
|
@ -9,6 +9,13 @@ TypeButton::TypeButton(QWidget *parent): QPushButton(parent)
|
|||
setCheckable(true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 绘制事件
|
||||
*
|
||||
* 当按钮被绘制时调用此函数。
|
||||
*
|
||||
* @param event 绘制事件指针
|
||||
*/
|
||||
void TypeButton::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
QPushButton::paintEvent(event);
|
||||
|
@ -22,8 +29,13 @@ void TypeButton::paintEvent(QPaintEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* @brief 构造函数
|
||||
*
|
||||
* 创建一个 QGraphicsView 实例,并设置相关参数。
|
||||
*
|
||||
* @param scene QGraphicsScene 对象指针,用于显示在视图中的场景
|
||||
*/
|
||||
IconGraphicsView::IconGraphicsView(QGraphicsScene* scene) : QGraphicsView(scene)
|
||||
{
|
||||
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
|
||||
|
@ -36,6 +48,13 @@ IconGraphicsView::IconGraphicsView(QGraphicsScene* scene) : QGraphicsView(scene)
|
|||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 滚轮事件
|
||||
*
|
||||
* 当发生滚轮事件时,该函数将被调用。如果按下控制键,则通过缩放视图来处理滚轮事件;否则,将滚轮事件传递给基类 QGraphicsView 处理。
|
||||
*
|
||||
* @param event 滚轮事件指针
|
||||
*/
|
||||
void IconGraphicsView::wheelEvent(QWheelEvent* event)
|
||||
{
|
||||
// if (QGuiApplication::keyboardModifiers() == Qt::ControlModifier) {
|
||||
|
@ -64,6 +83,14 @@ void IconGraphicsView::wheelEvent(QWheelEvent* event)
|
|||
}
|
||||
|
||||
bool ImageWidget::g_themeChange;
|
||||
/**
|
||||
* @brief ImageWidget构造函数
|
||||
*
|
||||
* ImageWidget的构造函数,用于初始化ImageWidget对象。
|
||||
*
|
||||
* @param parent QWidget对象指针,指向ImageWidget的父窗口
|
||||
* @param iconMap QMap<QString, QString>对象指针,用于存储图标与路径的对应关系
|
||||
*/
|
||||
ImageWidget::ImageWidget(QWidget *parent, const QMap<QString, QString>* iconMap)
|
||||
: QWidget(parent), m_iconMap(iconMap)
|
||||
{
|
||||
|
@ -77,7 +104,10 @@ ImageWidget::ImageWidget(QWidget *parent, const QMap<QString, QString>* iconMap)
|
|||
setLayout(layout);
|
||||
|
||||
|
||||
// 获取图标映射表的大小
|
||||
int count = m_iconMap->size();
|
||||
|
||||
// 如果图标映射表的大小等于11,加载特定的背景图片并添加到场景中
|
||||
if(count == 11){
|
||||
image = new QPixmap(":/resource/background/controlcenter-light.png");
|
||||
if (image->isNull()) {
|
||||
|
@ -89,75 +119,107 @@ ImageWidget::ImageWidget(QWidget *parent, const QMap<QString, QString>* iconMap)
|
|||
qDebug() << "Failed to load image.";
|
||||
}
|
||||
}
|
||||
// 将场景添加到视图,并设置视图显示的场景
|
||||
scene->addPixmap(*image);
|
||||
graphicsView->setScene(scene);
|
||||
// 根据视图的大小调整场景的大小,保持宽高比不变
|
||||
graphicsView->fitInView(scene->sceneRect(), Qt::KeepAspectRatio);
|
||||
// 显示视图
|
||||
graphicsView->show();
|
||||
|
||||
|
||||
// 如果图标映射表的大小等于11,则进行特定的图片加载和添加操作
|
||||
if (count == 11) {
|
||||
|
||||
// 获取图标映射表的所有键值对
|
||||
QList<QString> keys = m_iconMap->keys();
|
||||
// 根据特定的顺序创建键值的数组
|
||||
QString positions[11] = { keys[0], keys[9], keys[4], keys[5], keys[6],
|
||||
keys[3], keys[10], keys[8], keys[1], keys[7], keys[2] };
|
||||
|
||||
// 定义图片的位置数组
|
||||
int posX[3] = { 208, 879, 1550 };
|
||||
int posY[4] = { 275, 535, 795, 1055 };
|
||||
int index = 0;
|
||||
|
||||
// 遍历位置数组,加载并添加图片到场景中
|
||||
for (int i = 0; i < 4; ++i) {
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
// 检查索引是否超出范围
|
||||
if (index >= 11) {
|
||||
break; // 处理超出索引范围的情况
|
||||
}
|
||||
|
||||
// 根据键值获取图片路径,并加载图片
|
||||
QString pixmapPath = m_iconMap->value(positions[index]);
|
||||
QPixmap pixmap(pixmapPath);
|
||||
QGraphicsPixmapItem* item = scene->addPixmap(pixmap.scaled(100, 100));
|
||||
// 设置图形的可选择和可聚焦属性,以触发选择和焦点事件
|
||||
item->setFlag(QGraphicsItem::ItemIsSelectable); // 启用选择事件
|
||||
item->setFlag(QGraphicsItem::ItemIsFocusable); // 启用焦点事件
|
||||
// 将键值和图片路径保存到图形的数据中,以便后续使用
|
||||
item->setData(0, keys[index]);
|
||||
item->setData(1, pixmapPath);
|
||||
// 设置图形的位置
|
||||
item->setPos(posX[j], posY[i]);
|
||||
|
||||
// 增加索引的值,准备处理下一个图片的加载和添加操作
|
||||
++index;
|
||||
}
|
||||
}
|
||||
}
|
||||
else{
|
||||
int columnCount = 10;
|
||||
int row = 1;
|
||||
int col = 2;
|
||||
for (auto it = m_iconMap->begin(); it != m_iconMap->end(); ++it) {
|
||||
const QString& widgetName = it.key();
|
||||
}else{ // 如果图标映射表的大小不等于11,则进行常规的图片加载和添加操作
|
||||
// 定义列数和行数,以及初始的列和行索引值
|
||||
int columnCount = 10;
|
||||
int row = 1;
|
||||
int col = 2;
|
||||
// 遍历图标映射表的所有键值对,加载并添加图片到场景中
|
||||
for (auto it = m_iconMap->begin(); it != m_iconMap->end(); ++it) {
|
||||
const QString& widgetName = it.key(); // 获取键值对应的名称,用于后续数据的保存和处理中用到此处名称的部分。
|
||||
// 获取当前迭代器it的值
|
||||
const QString& filePath = it.value();
|
||||
|
||||
// 根据文件路径加载QPixmap对象,这将加载文件并创建一个QPixmap对象
|
||||
QPixmap pixmap(filePath);
|
||||
|
||||
// 判断图片是否成功加载,如果QPixmap对象为空,说明加载失败
|
||||
if (!pixmap.isNull()) {
|
||||
// 如果图片加载成功,则将图片添加到QGraphicsScene中,并按照128x128的尺寸进行缩放
|
||||
QGraphicsPixmapItem* item = scene->addPixmap(pixmap.scaled(128, 128));
|
||||
item->setFlag(QGraphicsItem::ItemIsSelectable); // 启用选择事件
|
||||
item->setFlag(QGraphicsItem::ItemIsFocusable); // 启用焦点事件
|
||||
|
||||
// 设置该项可以被选择,即响应用户的点击选择事件
|
||||
item->setFlag(QGraphicsItem::ItemIsSelectable);
|
||||
|
||||
// 设置该项在场景中的位置
|
||||
item->setPos(col * 160, row * 160);
|
||||
item->setScale(1.0);
|
||||
item->setData(0, widgetName);
|
||||
item->setData(1, filePath);
|
||||
|
||||
// 为该项设置一些自定义的数据,这些数据可以通过调用QGraphicsItem::data方法来获取
|
||||
item->setData(0, widgetName); // 将widgetName数据保存到该项的第一个数据槽中
|
||||
item->setData(1, filePath); // 将filePath数据保存到该项的第二个数据槽中
|
||||
|
||||
qDebug()<<"widgetName"<<widgetName<<"filePath"<<filePath;
|
||||
|
||||
// 增加列计数器
|
||||
col++;
|
||||
|
||||
// 如果列计数器超过了指定的列数,就重新开始行计数器,同时增加一行
|
||||
if (col >= columnCount) {
|
||||
col = 2;
|
||||
row++;
|
||||
col = 2; // 重新开始列计数器,但这次从第二列开始计数
|
||||
row++; // 增加一行计数器
|
||||
} else {
|
||||
qDebug() << "Failed to load image:" << filePath;
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Failed to load image:" << filePath;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 设置初始缩放倍数为0.9倍
|
||||
qreal initialScale = 0.9;
|
||||
graphicsView->scale(initialScale, initialScale);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新图标映射
|
||||
*
|
||||
* 更新图标映射,并重新布局图标。
|
||||
*
|
||||
* @param newIconMap 新的图标映射
|
||||
*/
|
||||
void ImageWidget::updateIconMap(const QMap<QString, QString>* newIconMap)
|
||||
{
|
||||
m_iconMap = newIconMap;
|
||||
|
@ -244,49 +306,79 @@ void ImageWidget::updateIconMap(const QMap<QString, QString>* newIconMap)
|
|||
graphicsView->fitInView(scene->sceneRect(), Qt::KeepAspectRatio);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新图像
|
||||
*
|
||||
* 根据给定的图像路径更新图像。
|
||||
*
|
||||
* @param imagePath 图像路径
|
||||
*/
|
||||
void ImageWidget::updateImage(const QString& imagePath)
|
||||
{
|
||||
// 如果已经有图片存在,则删除并置空
|
||||
if (image != nullptr) {
|
||||
delete image;
|
||||
image = nullptr;
|
||||
}
|
||||
|
||||
// 根据给定的路径加载图片
|
||||
image = new QPixmap(imagePath);
|
||||
if (image->isNull()) {
|
||||
qDebug() << "Failed to load image.";
|
||||
}
|
||||
|
||||
// 获取图形视图的对象,并清空场景中的内容
|
||||
QGraphicsScene* scene = graphicsView->scene();
|
||||
scene->clear();
|
||||
|
||||
// 在场景中添加图片
|
||||
scene->addPixmap(*image);
|
||||
|
||||
// 定义列数和初始行列位置
|
||||
int columnCount = 10;
|
||||
int row = 1;
|
||||
int col = 2;
|
||||
for (auto it = m_iconMap->begin(); it != m_iconMap->end(); ++it) {
|
||||
const QString& widgetName = it.key();
|
||||
const QString& filePath = it.value();
|
||||
|
||||
// 遍历图标映射表,逐个添加图标到场景中
|
||||
for (auto it = m_iconMap->begin(); it != m_iconMap->end(); ++it) {
|
||||
const QString& widgetName = it.key(); // 获取键值对应的widgetName
|
||||
const QString& filePath = it.value(); // 获取键值对应的文件路径
|
||||
|
||||
// 根据文件路径加载图标
|
||||
QPixmap pixmap(filePath);
|
||||
if (!pixmap.isNull()) {
|
||||
// 缩放图标大小为128x128,并添加到场景中
|
||||
QGraphicsPixmapItem* item = scene->addPixmap(pixmap.scaled(128, 128));
|
||||
|
||||
item->setPos(col * 160, row * 160);
|
||||
item->setScale(1.0);
|
||||
item->setData(0, widgetName);
|
||||
item->setData(1, filePath);
|
||||
// 设置图标的初始位置和缩放比例,并将widgetName和文件路径保存到图标的数据中
|
||||
item->setPos(col * 160, row * 160);
|
||||
item->setScale(1.0);
|
||||
item->setData(0, widgetName);
|
||||
item->setData(1, filePath);
|
||||
|
||||
col++;
|
||||
if (col >= columnCount) {
|
||||
col = 2;
|
||||
row++;
|
||||
}
|
||||
} else {
|
||||
// 更新列的位置,如果超过列数则重新开始行,行数加1
|
||||
col++;
|
||||
if (col >= columnCount) {
|
||||
col = 2;
|
||||
row++;
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Failed to load image:" << filePath;
|
||||
}
|
||||
}
|
||||
|
||||
// 根据场景的边界自适应视图大小,保持视图比例不变
|
||||
graphicsView->fitInView(scene->sceneRect(), Qt::KeepAspectRatio);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新图标
|
||||
*
|
||||
* 根据给定的 widgetName 和 newFilePath,更新图标。
|
||||
*
|
||||
* @param widgetName 控件名称
|
||||
* @param newFilePath 新的文件路径
|
||||
*/
|
||||
void ImageWidget::updateIcon(const QString& widgetName, const QString& newFilePath)
|
||||
{
|
||||
QGraphicsScene* scene = graphicsView->scene();
|
||||
|
@ -298,26 +390,40 @@ void ImageWidget::updateIcon(const QString& widgetName, const QString& newFilePa
|
|||
<< "Position:" << item->pos()
|
||||
<< "Type:" << item->type();
|
||||
}
|
||||
// 遍历所有的图形项
|
||||
for (QGraphicsItem* item : items) {
|
||||
// 尝试将当前图形项转换为图形位图项
|
||||
QGraphicsPixmapItem* pixmapItem = dynamic_cast<QGraphicsPixmapItem*>(item);
|
||||
qDebug()<<widgetName<<"!!!!!!!!!!!";
|
||||
// 如果图形位图项存在,并且它的数据(索引为0)与widgetName相同
|
||||
if (pixmapItem && pixmapItem->data(0).toString() == widgetName) {
|
||||
qDebug()<<"!!!!!sss!!!!!!";
|
||||
// 保存图形位图项的旧位置
|
||||
QPointF oldPosition = pixmapItem->pos();
|
||||
// 从场景中移除图形位图项
|
||||
scene->removeItem(pixmapItem);
|
||||
// 删除图形位图项
|
||||
delete pixmapItem;
|
||||
// 加载新的位图(从newFilePath路径)
|
||||
QPixmap newPixmap(newFilePath);
|
||||
// 如果新的位图不为空
|
||||
if (!newPixmap.isNull()) {
|
||||
// 如果widgetName包含"kylin-setting"字符串
|
||||
if(widgetName.contains("kylin-setting")){
|
||||
// 添加新的位图(缩放为100x100)到场景中,并设置数据(索引为0为widgetName, 索引为1为newFilePath)
|
||||
QGraphicsPixmapItem* newPixmapItem = scene->addPixmap(newPixmap.scaled(100, 100));
|
||||
newPixmapItem->setData(0, widgetName);
|
||||
newPixmapItem->setData(1, newFilePath);
|
||||
// 设置新的位图的位置为旧位置
|
||||
newPixmapItem->setPos(oldPosition);
|
||||
}else{
|
||||
QGraphicsPixmapItem* newPixmapItem = scene->addPixmap(newPixmap.scaled(128, 128));
|
||||
newPixmapItem->setData(0, widgetName);
|
||||
newPixmapItem->setData(1, newFilePath);
|
||||
newPixmapItem->setPos(oldPosition);
|
||||
// 添加新的位图(缩放为128x128)到场景中,并设置数据(索引为0为widgetName, 索引为1为newFilePath)
|
||||
QGraphicsPixmapItem* newPixmapItem = scene->addPixmap(newPixmap.scaled(128, 128));
|
||||
newPixmapItem->setData(0, widgetName);
|
||||
newPixmapItem->setData(1, newFilePath);
|
||||
// 设置新的位图的位置为旧位置
|
||||
newPixmapItem->setPos(oldPosition);
|
||||
}
|
||||
}else {
|
||||
qDebug() << "Failed to load image:" << newFilePath;
|
||||
}
|
||||
g_themeChange = true;
|
||||
} else {
|
||||
|
@ -328,6 +434,13 @@ void ImageWidget::updateIcon(const QString& widgetName, const QString& newFilePa
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 构造函数
|
||||
*
|
||||
* 创建一个图标编辑器部件,作为父窗口的子部件进行显示。
|
||||
*
|
||||
* @param parent 父窗口指针
|
||||
*/
|
||||
IconEditWidget::IconEditWidget(QWidget *parent)
|
||||
{
|
||||
QVBoxLayout *widgetLayout = new QVBoxLayout(this);
|
||||
|
@ -369,28 +482,62 @@ IconEditWidget::IconEditWidget(QWidget *parent)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置默认图标
|
||||
*
|
||||
* 设置默认图标的函数,通过传入图标名称来设置默认图标。
|
||||
*
|
||||
* @param iconname 图标名称
|
||||
*/
|
||||
void IconEditWidget::setdefaulticon(QString iconname)
|
||||
{
|
||||
m_icondefaultlabel->setPixmap(QIcon::fromTheme(iconname).pixmap(48,48));
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置默认图标名称
|
||||
*
|
||||
* 设置默认图标名称,将标签的文本更新为指定的图标名称。
|
||||
*
|
||||
* @param iconname 图标名称
|
||||
*/
|
||||
void IconEditWidget::setdefaulticonname(QString iconname)
|
||||
{
|
||||
m_label->setText(iconname);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置自定义图标
|
||||
*
|
||||
* 通过指定的图标文件路径设置自定义图标。
|
||||
*
|
||||
* @param iconFilePath 图标文件路径
|
||||
*/
|
||||
void IconEditWidget::setcustomicon(QString iconFilePath)
|
||||
{
|
||||
QPixmap pixmap(iconFilePath);
|
||||
m_icondecustomlabel->setPixmap(pixmap.scaled(48, 48));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief 构造函数
|
||||
*
|
||||
* 创建一个 CustomLabel 对象,并设置父对象。
|
||||
*
|
||||
* @param parent 父对象指针
|
||||
*/
|
||||
CustomLabel::CustomLabel(QWidget *parent): QLabel(parent), pixmap()
|
||||
{
|
||||
this->setFixedSize(48,48);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 自定义标签的绘制事件
|
||||
*
|
||||
* 在绘制事件发生时,执行标签的绘制操作。
|
||||
*
|
||||
* @param event 绘制事件指针
|
||||
*/
|
||||
void CustomLabel::paintEvent(QPaintEvent *event)
|
||||
{
|
||||
QLabel::paintEvent(event);
|
||||
|
@ -414,6 +561,13 @@ void CustomLabel::paintEvent(QPaintEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 设置 QPixmap
|
||||
*
|
||||
* 设置 CustomLabel 的 QPixmap。
|
||||
*
|
||||
* @param pixmap QPixmap 对象
|
||||
*/
|
||||
void CustomLabel::setPixmap(const QPixmap &pixmap)
|
||||
{
|
||||
this->pixmap = pixmap;
|
||||
|
|
|
@ -12,6 +12,13 @@ PlymouthThemeFeature::PlymouthThemeFeature(QWidget *parent) : QWidget(parent)
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief PlymouthImageWidget 构造函数
|
||||
*
|
||||
* 创建一个 PlymouthImageWidget 对象,并将其设置为给定父对象的子对象。
|
||||
*
|
||||
* @param parent 父对象指针
|
||||
*/
|
||||
PlymouthImageWidget::PlymouthImageWidget(QWidget *parent)
|
||||
{
|
||||
scene = new QGraphicsScene(this);
|
||||
|
@ -37,6 +44,13 @@ PlymouthImageWidget::PlymouthImageWidget(QWidget *parent)
|
|||
graphicsView->scale(initialScale, initialScale);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 更新 Plymouth 图像
|
||||
*
|
||||
* 根据给定的图像路径更新 Plymouth 图像。
|
||||
*
|
||||
* @param imagePath 图像路径
|
||||
*/
|
||||
void PlymouthImageWidget::updatePlymouth(const QString &imagePath)
|
||||
{
|
||||
scene->clear(); // 清空当前场景
|
||||
|
@ -71,6 +85,11 @@ void PlymouthImageWidget::updatePlymouth(const QString &imagePath)
|
|||
graphicsView->fitInView(scene->sceneRect(), Qt::KeepAspectRatio); // 调整视图以适应新内容
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 显示 Plymouth 图像
|
||||
*
|
||||
* 通过定时器,依次显示 pixmaps 中的图像,形成动画效果。
|
||||
*/
|
||||
PlymouthGraphicsView::PlymouthGraphicsView(QGraphicsScene *scene)
|
||||
{
|
||||
setTransformationAnchor(QGraphicsView::AnchorUnderMouse);
|
||||
|
|
|
@ -1,6 +1,13 @@
|
|||
#include "plymouththemewidget.h"
|
||||
|
||||
bool PlymouthThemeWidget::g_themeChange;
|
||||
/**
|
||||
* @brief PlymouthThemeWidget 构造函数
|
||||
*
|
||||
* 创建一个 PlymouthThemeWidget 对象,并设置其父对象。
|
||||
*
|
||||
* @param parent 父对象
|
||||
*/
|
||||
PlymouthThemeWidget::PlymouthThemeWidget(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
initPreviewWidget();
|
||||
|
@ -11,6 +18,15 @@ PlymouthThemeWidget::PlymouthThemeWidget(QWidget *parent) : QWidget(parent)
|
|||
this->setLayout(globalthemelayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化预览小部件
|
||||
*
|
||||
* 创建一个新的 QWidget 作为预览小部件,并设置其最小大小。
|
||||
* 设置预览小部件的背景角色为 QPalette::Window。
|
||||
* 设置预览小部件的调色板,并开启自动填充背景。
|
||||
* 创建一个新的 PlymouthImageWidget,并将其添加到预览小部件的垂直布局中。
|
||||
* 添加一个空隙项,并设置预览小部件的布局。
|
||||
*/
|
||||
void PlymouthThemeWidget::initPreviewWidget()
|
||||
{
|
||||
m_previewwidget = new QWidget(this);
|
||||
|
@ -31,6 +47,12 @@ void PlymouthThemeWidget::initPreviewWidget()
|
|||
m_previewwidget->setLayout(m_previewlayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化右侧小部件
|
||||
*
|
||||
* 创建一个新的QWidget对象作为右侧小部件,并设置其最小和最大尺寸,以及背景色。
|
||||
* 之后初始化编辑小部件。
|
||||
*/
|
||||
void PlymouthThemeWidget::initRightWidget()
|
||||
{
|
||||
m_rightwidget = new QWidget(this);
|
||||
|
@ -40,6 +62,11 @@ void PlymouthThemeWidget::initRightWidget()
|
|||
initEditWidget();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 初始化编辑小部件
|
||||
*
|
||||
* 初始化编辑小部件,包括设置固定高度、创建布局、添加控件等。
|
||||
*/
|
||||
void PlymouthThemeWidget::initEditWidget()
|
||||
{
|
||||
m_plymouthwidget = new QWidget(m_rightwidget);
|
||||
|
@ -70,7 +97,7 @@ void PlymouthThemeWidget::initEditWidget()
|
|||
addButton->setIcon(QIcon::fromTheme("list-add-symbolic"));
|
||||
addButton->setFixedSize(36,36);
|
||||
connect(addButton, &QPushButton::clicked, this, [=]() {
|
||||
QString newFilePath = QFileDialog::getOpenFileName(this, tr("Select SVG file"), "", tr("SVG file (*.svg *.png *.gif *.mp4)"));
|
||||
QString newFilePath = QFileDialog::getOpenFileName(this, tr("Select MP4 file"), "", tr("MP4 file (*.svg *.png *.gif *.mp4)"));
|
||||
if (!newFilePath.isEmpty()) {
|
||||
QPixmap pixmap(newFilePath);
|
||||
pixmap = pixmap.scaled(64,64, Qt::KeepAspectRatio);
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
#include "titlebar.h"
|
||||
|
||||
/**
|
||||
* @brief TitleBar类的构造函数
|
||||
*
|
||||
* TitleBar类的构造函数,用于创建一个带有标题栏的窗口。
|
||||
*
|
||||
* @param parent 父窗口指针
|
||||
*/
|
||||
TitleBar::TitleBar(QWidget *parent) : QWidget(parent)
|
||||
{
|
||||
m_ismaximized = false;
|
||||
|
@ -79,17 +86,31 @@ TitleBar::TitleBar(QWidget *parent) : QWidget(parent)
|
|||
|
||||
layout->addLayout(buttonLayout);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 切换最大化状态
|
||||
*
|
||||
* 如果当前窗口不是最大化状态,则将其最大化,并更新相应的按钮图标。
|
||||
* 如果当前窗口已经是最大化状态,则将其恢复为正常状态,并更新相应的按钮图标。
|
||||
*/
|
||||
void TitleBar::toggleMaximize()
|
||||
{
|
||||
// 如果当前窗口不是最大化状态
|
||||
if (!m_ismaximized) {
|
||||
// 显示最大化窗口
|
||||
parentWidget()->parentWidget()->showMaximized();
|
||||
// 设置状态为已最大化
|
||||
m_ismaximized = true;
|
||||
// 设置最大化按钮的图标为还原图标
|
||||
m_maximumbtn->setIcon(QIcon::fromTheme("window-restore-symbolic"));
|
||||
|
||||
// 如果当前窗口已经是最大化状态
|
||||
} else {
|
||||
// 显示普通窗口
|
||||
parentWidget()->parentWidget()->showNormal();
|
||||
// 设置状态为未最大化
|
||||
m_ismaximized = false;
|
||||
// 设置最大化按钮的图标为最大化图标
|
||||
m_maximumbtn->setIcon(QIcon::fromTheme("window-maximize-symbolic"));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,12 +4,14 @@
|
|||
<context>
|
||||
<name>CursorThemeWidget</name>
|
||||
<message>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="119"/>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="191"/>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="217"/>
|
||||
<source>Select SVG file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="119"/>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="191"/>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="217"/>
|
||||
<source>SVG file (*.svg)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -48,87 +50,125 @@
|
|||
<context>
|
||||
<name>GlobalThemeWidget</name>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="92"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="117"/>
|
||||
<source>Overall theme rendering</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="115"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="161"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="140"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="186"/>
|
||||
<source>Select picture file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="115"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="161"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="140"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="186"/>
|
||||
<source>Picture file (*.png *.jpg)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="141"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="166"/>
|
||||
<source>Desktop wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="189"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="214"/>
|
||||
<source>Window appearance</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="193"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="218"/>
|
||||
<source>light</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="194"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="219"/>
|
||||
<source>dark</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="224"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="249"/>
|
||||
<source>Control fillet</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="265"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="290"/>
|
||||
<source>Accent colour</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="268"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="293"/>
|
||||
<source>daybreakBlue</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="269"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="294"/>
|
||||
<source>jamPurple</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="270"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="295"/>
|
||||
<source>magenta</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="271"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="296"/>
|
||||
<source>sunRed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="272"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="297"/>
|
||||
<source>sunsetOrange</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="273"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="298"/>
|
||||
<source>dustGold</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="274"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="299"/>
|
||||
<source>polarGreen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="324"/>
|
||||
<source>Window transparency</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="358"/>
|
||||
<source>Window fillet</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="361"/>
|
||||
<source>Large</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="362"/>
|
||||
<source>Medium</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="363"/>
|
||||
<source>Small</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>GrubThemeWidget</name>
|
||||
<message>
|
||||
<location filename="../src/module/grubthemewidget.cpp" line="62"/>
|
||||
<source>Select picture file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/grubthemewidget.cpp" line="62"/>
|
||||
<source>Picture file (*.png *.jpg)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>HistoryWidget</name>
|
||||
|
@ -146,24 +186,24 @@
|
|||
<context>
|
||||
<name>IconThemeWidget</name>
|
||||
<message>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="81"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="164"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="87"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="197"/>
|
||||
<source>Select SVG file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="81"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="164"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="87"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="197"/>
|
||||
<source>SVG file (*.svg)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="258"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="293"/>
|
||||
<source>APP</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="260"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="295"/>
|
||||
<source>System setting</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -207,11 +247,14 @@
|
|||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/infocreatewidget.cpp" line="144"/>
|
||||
<location filename="../src/module/infocreatewidget.cpp" line="179"/>
|
||||
<location filename="../src/module/infocreatewidget.cpp" line="214"/>
|
||||
<source>Input format error!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/infocreatewidget.cpp" line="153"/>
|
||||
<location filename="../src/module/infocreatewidget.cpp" line="223"/>
|
||||
<source>Input is empty!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -219,32 +262,32 @@
|
|||
<context>
|
||||
<name>MainInterface</name>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="125"/>
|
||||
<location filename="../src/maininterface.cpp" line="135"/>
|
||||
<source>GlobalTheme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="127"/>
|
||||
<location filename="../src/maininterface.cpp" line="137"/>
|
||||
<source>IconTheme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="129"/>
|
||||
<location filename="../src/maininterface.cpp" line="139"/>
|
||||
<source>CursorTheme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="131"/>
|
||||
<location filename="../src/maininterface.cpp" line="141"/>
|
||||
<source>PlymouthTheme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="133"/>
|
||||
<location filename="../src/maininterface.cpp" line="143"/>
|
||||
<source>GrubTheme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="136"/>
|
||||
<location filename="../src/maininterface.cpp" line="146"/>
|
||||
<source>Start Building</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
|
@ -252,33 +295,76 @@
|
|||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="71"/>
|
||||
<location filename="../src/mainwindow.cpp" line="78"/>
|
||||
<source>kylin-theme-builder</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="74"/>
|
||||
<location filename="../src/mainwindow.cpp" line="81"/>
|
||||
<source>User guide</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="105"/>
|
||||
<location filename="../src/mainwindow.cpp" line="230"/>
|
||||
<source>Global Theme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="107"/>
|
||||
<location filename="../src/mainwindow.cpp" line="231"/>
|
||||
<source>Topics include basic styles for windows and controls, icons, cursors, and more!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="233"/>
|
||||
<source>Icon Theme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="109"/>
|
||||
<location filename="../src/mainwindow.cpp" line="234"/>
|
||||
<source>The icon theme includes multiple application icons and system settings homepage icons.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="236"/>
|
||||
<source>Cursor Theme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="111"/>
|
||||
<source>Boot Theme</source>
|
||||
<location filename="../src/mainwindow.cpp" line="237"/>
|
||||
<source>Cursor theme for pointer cursor icon</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="239"/>
|
||||
<source>Plymouth Theme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="240"/>
|
||||
<source>Boot animation can be customized to boot screen effect</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="242"/>
|
||||
<source>GRUB Theme</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="243"/>
|
||||
<source>Modify GURB background wallpaper</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PlymouthThemeWidget</name>
|
||||
<message>
|
||||
<location filename="../src/module/plymouththemewidget.cpp" line="73"/>
|
||||
<source>Select MP4 file</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/plymouththemewidget.cpp" line="73"/>
|
||||
<source>MP4 file (*.svg *.png *.gif *.mp4)</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
|
|
Binary file not shown.
|
@ -4,12 +4,14 @@
|
|||
<context>
|
||||
<name>CursorThemeWidget</name>
|
||||
<message>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="119"/>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="191"/>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="217"/>
|
||||
<source>Select SVG file</source>
|
||||
<translation>选择SVG文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="119"/>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="191"/>
|
||||
<location filename="../src/module/cursorthemewidget.cpp" line="217"/>
|
||||
<source>SVG file (*.svg)</source>
|
||||
<translation>SVG 文件 (*.svg)</translation>
|
||||
</message>
|
||||
|
@ -48,87 +50,125 @@
|
|||
<context>
|
||||
<name>GlobalThemeWidget</name>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="92"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="117"/>
|
||||
<source>Overall theme rendering</source>
|
||||
<translation>全局主题效果图</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="115"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="161"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="140"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="186"/>
|
||||
<source>Select picture file</source>
|
||||
<translation>选择图片文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="115"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="161"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="140"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="186"/>
|
||||
<source>Picture file (*.png *.jpg)</source>
|
||||
<translation>图片文件 (*.png *.jpg)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="141"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="166"/>
|
||||
<source>Desktop wallpaper</source>
|
||||
<translation>桌面壁纸</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="189"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="214"/>
|
||||
<source>Window appearance</source>
|
||||
<translation>窗口外观</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="193"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="218"/>
|
||||
<source>light</source>
|
||||
<translation>浅色</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="194"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="219"/>
|
||||
<source>dark</source>
|
||||
<translation>深色</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="224"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="249"/>
|
||||
<source>Control fillet</source>
|
||||
<translation>控件圆角</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="265"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="290"/>
|
||||
<source>Accent colour</source>
|
||||
<translation>强调色</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="268"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="293"/>
|
||||
<source>daybreakBlue</source>
|
||||
<translation>拂晓蓝</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="269"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="294"/>
|
||||
<source>jamPurple</source>
|
||||
<translation>果酱紫</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="270"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="295"/>
|
||||
<source>magenta</source>
|
||||
<translation>玫瑰红</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="271"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="296"/>
|
||||
<source>sunRed</source>
|
||||
<translation>烈日红</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="272"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="297"/>
|
||||
<source>sunsetOrange</source>
|
||||
<translation>日暮橙</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="273"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="298"/>
|
||||
<source>dustGold</source>
|
||||
<translation>薄雾金</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="274"/>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="299"/>
|
||||
<source>polarGreen</source>
|
||||
<translation>极光绿</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="324"/>
|
||||
<source>Window transparency</source>
|
||||
<translation>窗口透明度</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="358"/>
|
||||
<source>Window fillet</source>
|
||||
<translation>窗口圆角</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="361"/>
|
||||
<source>Large</source>
|
||||
<translation>大</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="362"/>
|
||||
<source>Medium</source>
|
||||
<translation>中</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/globalthemewidget.cpp" line="363"/>
|
||||
<source>Small</source>
|
||||
<translation>小</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>GrubThemeWidget</name>
|
||||
<message>
|
||||
<location filename="../src/module/grubthemewidget.cpp" line="62"/>
|
||||
<source>Select picture file</source>
|
||||
<translation>选择图片文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/grubthemewidget.cpp" line="62"/>
|
||||
<source>Picture file (*.png *.jpg)</source>
|
||||
<translation>图片文件 (*.png *.jpg)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>HistoryWidget</name>
|
||||
|
@ -146,24 +186,24 @@
|
|||
<context>
|
||||
<name>IconThemeWidget</name>
|
||||
<message>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="81"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="164"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="87"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="197"/>
|
||||
<source>Select SVG file</source>
|
||||
<translation>选择SVG文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="81"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="164"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="87"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="197"/>
|
||||
<source>SVG file (*.svg)</source>
|
||||
<translation>SVG 文件 (*.svg)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="258"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="293"/>
|
||||
<source>APP</source>
|
||||
<translation>APP</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="260"/>
|
||||
<location filename="../src/module/iconthemewidget.cpp" line="295"/>
|
||||
<source>System setting</source>
|
||||
<translation>系统设置</translation>
|
||||
</message>
|
||||
|
@ -207,11 +247,14 @@
|
|||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/infocreatewidget.cpp" line="144"/>
|
||||
<location filename="../src/module/infocreatewidget.cpp" line="179"/>
|
||||
<location filename="../src/module/infocreatewidget.cpp" line="214"/>
|
||||
<source>Input format error!</source>
|
||||
<translation>输入格式错误!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/infocreatewidget.cpp" line="153"/>
|
||||
<location filename="../src/module/infocreatewidget.cpp" line="223"/>
|
||||
<source>Input is empty!</source>
|
||||
<translation>输入为空!</translation>
|
||||
</message>
|
||||
|
@ -219,32 +262,32 @@
|
|||
<context>
|
||||
<name>MainInterface</name>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="125"/>
|
||||
<location filename="../src/maininterface.cpp" line="135"/>
|
||||
<source>GlobalTheme</source>
|
||||
<translation>全局样式</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="127"/>
|
||||
<location filename="../src/maininterface.cpp" line="137"/>
|
||||
<source>IconTheme</source>
|
||||
<translation>图标主题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="129"/>
|
||||
<location filename="../src/maininterface.cpp" line="139"/>
|
||||
<source>CursorTheme</source>
|
||||
<translation>光标主题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="131"/>
|
||||
<location filename="../src/maininterface.cpp" line="141"/>
|
||||
<source>PlymouthTheme</source>
|
||||
<translation>开机动画</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="133"/>
|
||||
<location filename="../src/maininterface.cpp" line="143"/>
|
||||
<source>GrubTheme</source>
|
||||
<translation>启动个性化</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/maininterface.cpp" line="136"/>
|
||||
<location filename="../src/maininterface.cpp" line="146"/>
|
||||
<source>Start Building</source>
|
||||
<translation>制作全局主题</translation>
|
||||
</message>
|
||||
|
@ -252,34 +295,89 @@
|
|||
<context>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="71"/>
|
||||
<location filename="../src/mainwindow.cpp" line="78"/>
|
||||
<source>kylin-theme-builder</source>
|
||||
<translation>主题打包工具</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="74"/>
|
||||
<location filename="../src/mainwindow.cpp" line="81"/>
|
||||
<source>User guide</source>
|
||||
<translation>使用指南</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="105"/>
|
||||
<location filename="../src/mainwindow.cpp" line="230"/>
|
||||
<source>Global Theme</source>
|
||||
<translation>全局主题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="107"/>
|
||||
<location filename="../src/mainwindow.cpp" line="231"/>
|
||||
<source>Topics include basic styles for windows and controls, icons, cursors, and more!</source>
|
||||
<translation>主题包含窗口与控件基础样式、图标、光标等内容</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="233"/>
|
||||
<source>Icon Theme</source>
|
||||
<translation>图标主题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="109"/>
|
||||
<location filename="../src/mainwindow.cpp" line="234"/>
|
||||
<source>The icon theme includes multiple application icons and system settings homepage icons.</source>
|
||||
<translation>图标主题包含系统自带多个应用图标和系统设置首页图标</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="236"/>
|
||||
<source>Cursor Theme</source>
|
||||
<translation>光标主题</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="111"/>
|
||||
<location filename="../src/mainwindow.cpp" line="237"/>
|
||||
<source>Cursor theme for pointer cursor icon</source>
|
||||
<translation>光标主题为指针光标图标</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="239"/>
|
||||
<source>Plymouth Theme</source>
|
||||
<translation>开机动画</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="240"/>
|
||||
<source>Boot animation can be customized to boot screen effect</source>
|
||||
<translation>开机动画可以自定义开机界面效果</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="242"/>
|
||||
<source>GRUB Theme</source>
|
||||
<translation>GRUB背景</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="243"/>
|
||||
<source>Modify GURB background wallpaper</source>
|
||||
<translation>修改GURB背景壁纸</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Boot Theme</source>
|
||||
<translation>启动个性化</translation>
|
||||
<translation type="vanished">启动个性化</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PlymouthThemeWidget</name>
|
||||
<message>
|
||||
<source>Select SVG file</source>
|
||||
<translation type="vanished">选择SVG文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SVG file (*.svg *.png *.gif *.mp4)</source>
|
||||
<translation type="obsolete">图片文件 (*.svg *.png *.gif *.mp4)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/plymouththemewidget.cpp" line="73"/>
|
||||
<source>Select MP4 file</source>
|
||||
<translation>选择MP4文件</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/module/plymouththemewidget.cpp" line="73"/>
|
||||
<source>MP4 file (*.svg *.png *.gif *.mp4)</source>
|
||||
<translation>选择MP4文件(*.mp4)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
|
|
Loading…
Reference in New Issue