diff --git a/QWidgetDemo.pro b/QWidgetDemo.pro index 00f4f59..4dadbac 100644 --- a/QWidgetDemo.pro +++ b/QWidgetDemo.pro @@ -1,7 +1,6 @@ TEMPLATE = subdirs #定义了ordered表示子项目按照添加的顺序来编译 CONFIG += ordered -SUBDIRS += imagecropper #图片裁剪 SUBDIRS += lightbutton #高亮按钮控件 SUBDIRS += movewidget #通用控件移动类 SUBDIRS += flatui #模仿flatui类 @@ -36,7 +35,6 @@ SUBDIRS += imageswitch #图片开关控件 SUBDIRS += netserver #网络中转服务器 SUBDIRS += base64 #图片文字base64互换 SUBDIRS += smoothcurve #平滑曲线 -SUBDIRS += imageviewwindow #图片预览控件 win32 { SUBDIRS += ffmpegdemo #视频流播放ffmpeg内核 diff --git a/core_qui/core_qui.pri b/core_qui/core_qui.pri index 17db33f..260e3f1 100644 --- a/core_qui/core_qui.pri +++ b/core_qui/core_qui.pri @@ -1,5 +1,4 @@ HEADERS += \ - $$PWD/iconfont.h \ $$PWD/iconhelper.h \ $$PWD/quiconfig.h \ $$PWD/quidateselect.h \ @@ -12,7 +11,6 @@ HEADERS += \ $$PWD/quiwidget.h SOURCES += \ - $$PWD/iconfont.cpp \ $$PWD/iconhelper.cpp \ $$PWD/quiconfig.cpp \ $$PWD/quidateselect.cpp \ diff --git a/core_qui/iconfont.cpp b/core_qui/iconfont.cpp deleted file mode 100644 index cba136f..0000000 --- a/core_qui/iconfont.cpp +++ /dev/null @@ -1,242 +0,0 @@ -#include "iconfont.h" - -QScopedPointer IconFont::self; -IconFont *IconFont::Instance() -{ - if (self.isNull()) { - static QMutex mutex; - QMutexLocker locker(&mutex); - if (self.isNull()) { - self.reset(new IconFont); - } - } - - return self.data(); -} - -IconFont::IconFont(QObject *parent) : QObject(parent) -{ - //判断图形字体是否存在,不存在则加入 - QFontDatabase fontDb; - if (!fontDb.families().contains("iconfont")) { - int fontId = fontDb.addApplicationFont(":/image/iconfont.ttf"); - QStringList fontName = fontDb.applicationFontFamilies(fontId); - if (fontName.count() == 0) { - qDebug() << "load iconfont.ttf error"; - } - } - - if (fontDb.families().contains("iconfont")) { - iconFont = QFont("iconfont"); -#if (QT_VERSION >= QT_VERSION_CHECK(4,8,0)) - iconFont.setHintingPreference(QFont::PreferNoHinting); -#endif - } -} - -void IconFont::setIcon(QLabel *lab, int icon, quint32 size) -{ - iconFont.setPixelSize(size); - lab->setFont(iconFont); - lab->setText((QChar)icon); -} - -void IconFont::setIcon(QAbstractButton *btn, int icon, quint32 size) -{ - iconFont.setPixelSize(size); - btn->setFont(iconFont); - btn->setText((QChar)icon); -} - -QPixmap IconFont::getPixmap(const QColor &color, int icon, quint32 size, - quint32 pixWidth, quint32 pixHeight, int flags) -{ - QPixmap pix(pixWidth, pixHeight); - pix.fill(Qt::transparent); - - QPainter painter; - painter.begin(&pix); - painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); - painter.setPen(color); - - iconFont.setPixelSize(size); - painter.setFont(iconFont); - painter.drawText(pix.rect(), flags, (QChar)icon); - painter.end(); - - return pix; -} - -QPixmap IconFont::getPixmap(QToolButton *btn, bool normal) -{ - QPixmap pix; - int index = btns.indexOf(btn); - - if (index >= 0) { - if (normal) { - pix = pixNormal.at(index); - } else { - pix = pixDark.at(index); - } - } - - return pix; -} - -void IconFont::setStyle(QWidget *widget, const QString &type, int borderWidth, const QString &borderColor, - const QString &normalBgColor, const QString &darkBgColor, - const QString &normalTextColor, const QString &darkTextColor) -{ - QString strBorder; - if (type == "top") { - strBorder = QString("border-width:%1px 0px 0px 0px;padding:%1px %2px %2px %2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "right") { - strBorder = QString("border-width:0px %1px 0px 0px;padding:%2px %1px %2px %2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "bottom") { - strBorder = QString("border-width:0px 0px %1px 0px;padding:%2px %2px %1px %2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "left") { - strBorder = QString("border-width:0px 0px 0px %1px;padding:%2px %2px %2px %1px;") - .arg(borderWidth).arg(borderWidth * 2); - } - - QStringList qss; - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:none;border-radius:0px;padding:5px;color:%2;background:%3;}") - .arg(type).arg(normalTextColor).arg(normalBgColor)); - - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:hover," - "QWidget[flag=\"%1\"] QAbstractButton:pressed," - "QWidget[flag=\"%1\"] QAbstractButton:checked{" - "border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(borderColor).arg(darkTextColor).arg(darkBgColor)); - - widget->setStyleSheet(qss.join("")); -} - -void IconFont::setStyle(QWidget *widget, QList btns, QList icons, - quint32 iconSize, quint32 iconWidth, quint32 iconHeight, - const QString &type, int borderWidth, const QString &borderColor, - const QString &normalBgColor, const QString &darkBgColor, - const QString &normalTextColor, const QString &darkTextColor) -{ - int btnCount = btns.count(); - int charCount = icons.count(); - if (btnCount <= 0 || charCount <= 0 || btnCount != charCount) { - return; - } - - QString strBorder; - if (type == "top") { - strBorder = QString("border-width:%1px 0px 0px 0px;padding:%1px %2px %2px %2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "right") { - strBorder = QString("border-width:0px %1px 0px 0px;padding:%2px %1px %2px %2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "bottom") { - strBorder = QString("border-width:0px 0px %1px 0px;padding:%2px %2px %1px %2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "left") { - strBorder = QString("border-width:0px 0px 0px %1px;padding:%2px %2px %2px %1px;") - .arg(borderWidth).arg(borderWidth * 2); - } - - //如果图标是左侧显示则需要让没有选中的按钮左侧也有加深的边框,颜色为背景颜色 - QStringList qss; - if (btns.at(0)->toolButtonStyle() == Qt::ToolButtonTextBesideIcon) { - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:solid;border-radius:0px;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(normalBgColor).arg(normalTextColor).arg(normalBgColor)); - } else { - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:none;border-radius:0px;padding:5px;color:%2;background:%3;}") - .arg(type).arg(normalTextColor).arg(normalBgColor)); - } - - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:hover," - "QWidget[flag=\"%1\"] QAbstractButton:pressed," - "QWidget[flag=\"%1\"] QAbstractButton:checked{" - "border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(borderColor).arg(darkTextColor).arg(darkBgColor)); - - qss.append(QString("QWidget#%1{background:%2;}").arg(widget->objectName()).arg(normalBgColor)); - - qss.append(QString("QWidget>QToolButton{border-width:0px;}")); - qss.append(QString("QWidget>QToolButton{background-color:%1;color:%2;}") - .arg(normalBgColor).arg(normalTextColor)); - qss.append(QString("QWidget>QToolButton:hover,QWidget>QToolButton:pressed,QWidget>QToolButton:checked{background-color:%1;color:%2;}") - .arg(darkBgColor).arg(darkTextColor)); - - widget->setStyleSheet(qss.join("")); - - //存储对应按钮对象,方便鼠标移上去的时候切换图片 - for (int i = 0; i < btnCount; i++) { - int icon = icons.at(i); - QPixmap pixNormal = getPixmap(normalTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixDark = getPixmap(darkTextColor, icon, iconSize, iconWidth, iconHeight); - - btns.at(i)->setIcon(QIcon(pixNormal)); - btns.at(i)->setIconSize(QSize(iconWidth, iconHeight)); - btns.at(i)->installEventFilter(this); - - this->btns.append(btns.at(i)); - this->pixNormal.append(pixNormal); - this->pixDark.append(pixDark); - } -} - -void IconFont::setStyle(QFrame *frame, QList btns, QList icons, - quint32 iconSize, quint32 iconWidth, quint32 iconHeight, - const QString &normalBgColor, const QString &darkBgColor, - const QString &normalTextColor, const QString &darkTextColor) -{ - int btnCount = btns.count(); - int charCount = icons.count(); - if (btnCount <= 0 || charCount <= 0 || btnCount != charCount) { - return; - } - - QStringList qss; - qss.append(QString("QFrame>QToolButton{border-style:none;border-width:0px;}")); - qss.append(QString("QFrame>QToolButton{background-color:%1;color:%2;}") - .arg(normalBgColor).arg(normalTextColor)); - qss.append(QString("QFrame>QToolButton:hover,QFrame>QToolButton:pressed,QFrame>QToolButton:checked{background-color:%1;color:%2;}") - .arg(darkBgColor).arg(darkTextColor)); - - frame->setStyleSheet(qss.join("")); - - //存储对应按钮对象,方便鼠标移上去的时候切换图片 - for (int i = 0; i < btnCount; i++) { - int icon = icons.at(i); - QPixmap pixNormal = getPixmap(normalTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixDark = getPixmap(darkTextColor, icon, iconSize, iconWidth, iconHeight); - - btns.at(i)->setIcon(QIcon(pixNormal)); - btns.at(i)->setIconSize(QSize(iconWidth, iconHeight)); - btns.at(i)->installEventFilter(this); - - this->btns.append(btns.at(i)); - this->pixNormal.append(pixNormal); - this->pixDark.append(pixDark); - } -} - -bool IconFont::eventFilter(QObject *watched, QEvent *event) -{ - if (watched->inherits("QToolButton")) { - QToolButton *btn = (QToolButton *)watched; - int index = btns.indexOf(btn); - if (index >= 0) { - if (event->type() == QEvent::Enter) { - btn->setIcon(QIcon(pixDark.at(index))); - } else if (event->type() == QEvent::Leave) { - if (btn->isChecked()) { - btn->setIcon(QIcon(pixDark.at(index))); - } else { - btn->setIcon(QIcon(pixNormal.at(index))); - } - } - } - } - - return QObject::eventFilter(watched, event); -} diff --git a/core_qui/iconfont.h b/core_qui/iconfont.h deleted file mode 100644 index 667ac8d..0000000 --- a/core_qui/iconfont.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef ICONFONT_H -#define ICONFONT_H - -#include -#include -#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) -#include -#endif - -#ifdef quc -class Q_DECL_EXPORT IconFont : public QObject -#else -class IconFont : public QObject -#endif - -{ - Q_OBJECT - -public: - static IconFont *Instance(); - explicit IconFont(QObject *parent = 0); - - void setIcon(QLabel *lab, int icon, quint32 size = 12); - void setIcon(QAbstractButton *btn, int icon, quint32 size = 12); - QPixmap getPixmap(const QColor &color, int icon, quint32 size = 12, - quint32 pixWidth = 15, quint32 pixHeight = 15, - int flags = Qt::AlignCenter); - - //根据按钮获取该按钮对应的图标 - QPixmap getPixmap(QToolButton *btn, bool normal); - - //指定导航面板样式,不带图标 - static void setStyle(QWidget *widget, const QString &type = "left", int borderWidth = 3, - const QString &borderColor = "#029FEA", - const QString &normalBgColor = "#292F38", - const QString &darkBgColor = "#1D2025", - const QString &normalTextColor = "#54626F", - const QString &darkTextColor = "#FDFDFD"); - - //指定导航面板样式,带图标和效果切换 - void setStyle(QWidget *widget, QList btns, QList icons, - quint32 iconSize = 12, quint32 iconWidth = 15, quint32 iconHeight = 15, - const QString &type = "left", int borderWidth = 3, - const QString &borderColor = "#029FEA", - const QString &normalBgColor = "#292F38", - const QString &darkBgColor = "#1D2025", - const QString &normalTextColor = "#54626F", - const QString &darkTextColor = "#FDFDFD"); - - //指定导航按钮样式,带图标和效果切换 - void setStyle(QFrame *frame, QList btns, QList icons, - quint32 iconSize = 12, quint32 iconWidth = 15, quint32 iconHeight = 15, - const QString &normalBgColor = "#2FC5A2", - const QString &darkBgColor = "#3EA7E9", - const QString &normalTextColor = "#EEEEEE", - const QString &darkTextColor = "#FFFFFF"); - -protected: - bool eventFilter(QObject *watched, QEvent *event); - -private: - static QScopedPointer self; - QFont iconFont; //图形字体 - QList btns; //按钮队列 - QList pixNormal; //正常图片队列 - QList pixDark; //加深图片队列 -}; -#endif // ICONFONT_H diff --git a/core_qui/iconhelper.cpp b/core_qui/iconhelper.cpp index 6e53df2..e9df4ff 100644 --- a/core_qui/iconhelper.cpp +++ b/core_qui/iconhelper.cpp @@ -1,62 +1,209 @@ #include "iconhelper.h" -QScopedPointer IconHelper::self; -IconHelper *IconHelper::Instance() +IconHelper *IconHelper::iconFontAliBaBa = 0; +IconHelper *IconHelper::iconFontAwesome = 0; +void IconHelper::initFont() { - if (self.isNull()) { - static QMutex mutex; - QMutexLocker locker(&mutex); - if (self.isNull()) { - self.reset(new IconHelper); + static bool isInit = false; + if (!isInit) { + isInit = true; + if (iconFontAliBaBa == 0) { + iconFontAliBaBa = new IconHelper(":/image/iconfont.ttf", "iconfont"); + } + if (iconFontAwesome == 0) { + iconFontAwesome = new IconHelper(":/image/fontawesome-webfont.ttf", "FontAwesome"); } } - - return self.data(); } -IconHelper::IconHelper(QObject *parent) : QObject(parent) +void IconHelper::setIcon(QLabel *lab, int icon, quint32 size) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setIcon1(lab, icon, size); + } else if (icon > 0xf000) { + iconFontAwesome->setIcon1(lab, icon, size); + } +} + +void IconHelper::setIcon(QAbstractButton *btn, int icon, quint32 size) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setIcon1(btn, icon, size); + } else if (icon > 0xf000) { + iconFontAwesome->setIcon1(btn, icon, size); + } +} + +void IconHelper::setPixmap(QAbstractButton *btn, const QColor &color, int icon, quint32 size, + quint32 width, quint32 height, int flags) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setPixmap1(btn, color, icon, size, width, height, flags); + } else if (icon > 0xf000) { + iconFontAwesome->setPixmap1(btn, color, icon, size, width, height, flags); + } +} + +QPixmap IconHelper::getPixmap(const QColor &color, int icon, quint32 size, + quint32 width, quint32 height, int flags) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + QPixmap pix; + if (icon > 0xe000 && icon < 0xf000) { + pix = iconFontAliBaBa->getPixmap1(color, icon, size, width, height, flags); + } else if (icon > 0xf000) { + pix = iconFontAwesome->getPixmap1(color, icon, size, width, height, flags); + } + return pix; +} + +void IconHelper::setStyle(QWidget *widget, QList btns, + QList icons, const IconHelper::StyleColor &styleColor) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + int icon = icons.first(); + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setStyle1(widget, btns, icons, styleColor); + } else if (icon > 0xf000) { + iconFontAwesome->setStyle1(widget, btns, icons, styleColor); + } +} + +void IconHelper::setStyle(QWidget *widget, QList btns, + QList icons, const IconHelper::StyleColor &styleColor) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + int icon = icons.first(); + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setStyle1(widget, btns, icons, styleColor); + } else if (icon > 0xf000) { + iconFontAwesome->setStyle1(widget, btns, icons, styleColor); + } +} + +void IconHelper::setStyle(QWidget *widget, QList btns, + QList icons, const IconHelper::StyleColor &styleColor) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + int icon = icons.first(); + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setStyle1(widget, btns, icons, styleColor); + } else if (icon > 0xf000) { + iconFontAwesome->setStyle1(widget, btns, icons, styleColor); + } +} + +IconHelper::IconHelper(const QString &fontFile, const QString &fontName, QObject *parent) : QObject(parent) { //判断图形字体是否存在,不存在则加入 QFontDatabase fontDb; - if (!fontDb.families().contains("FontAwesome")) { - int fontId = fontDb.addApplicationFont(":/image/fontawesome-webfont.ttf"); - QStringList fontName = fontDb.applicationFontFamilies(fontId); - if (fontName.count() == 0) { - qDebug() << "load fontawesome-webfont.ttf error"; + if (!fontDb.families().contains(fontName)) { + int fontId = fontDb.addApplicationFont(fontFile); + QStringList listName = fontDb.applicationFontFamilies(fontId); + if (listName.count() == 0) { + qDebug() << QString("load %1 error").arg(fontName); } } - if (fontDb.families().contains("FontAwesome")) { - iconFont = QFont("FontAwesome"); + if (fontDb.families().contains(fontName)) { + iconFont = QFont(fontName); #if (QT_VERSION >= QT_VERSION_CHECK(4,8,0)) iconFont.setHintingPreference(QFont::PreferNoHinting); #endif } } -QFont IconHelper::getIconFont() +bool IconHelper::eventFilter(QObject *watched, QEvent *event) { - return this->iconFont; + //根据不同的 + if (watched->inherits("QAbstractButton")) { + QAbstractButton *btn = (QAbstractButton *)watched; + int index = btns.indexOf(btn); + if (index >= 0) { + //不同的事件设置不同的图标,同时区分选中的和没有选中的 + if (btn->isChecked()) { + if (event->type() == QEvent::MouseButtonPress) { + QMouseEvent *mouseEvent = (QMouseEvent *)event; + if (mouseEvent->button() == Qt::LeftButton) { + btn->setIcon(QIcon(pixChecked.at(index))); + } + } else if (event->type() == QEvent::Enter) { + btn->setIcon(QIcon(pixChecked.at(index))); + } else if (event->type() == QEvent::Leave) { + btn->setIcon(QIcon(pixChecked.at(index))); + } + } else { + if (event->type() == QEvent::MouseButtonPress) { + QMouseEvent *mouseEvent = (QMouseEvent *)event; + if (mouseEvent->button() == Qt::LeftButton) { + btn->setIcon(QIcon(pixPressed.at(index))); + } + } else if (event->type() == QEvent::Enter) { + btn->setIcon(QIcon(pixHover.at(index))); + } else if (event->type() == QEvent::Leave) { + btn->setIcon(QIcon(pixNormal.at(index))); + } + } + } + } + + return QObject::eventFilter(watched, event); } -void IconHelper::setIcon(QLabel *lab, int icon, quint32 size) +void IconHelper::toggled(bool checked) +{ + //选中和不选中设置不同的图标 + QAbstractButton *btn = (QAbstractButton *)sender(); + int index = btns.indexOf(btn); + if (checked) { + btn->setIcon(QIcon(pixChecked.at(index))); + } else { + btn->setIcon(QIcon(pixNormal.at(index))); + } +} + +void IconHelper::setIcon1(QLabel *lab, int icon, quint32 size) { iconFont.setPixelSize(size); lab->setFont(iconFont); lab->setText((QChar)icon); } -void IconHelper::setIcon(QAbstractButton *btn, int icon, quint32 size) +void IconHelper::setIcon1(QAbstractButton *btn, int icon, quint32 size) { iconFont.setPixelSize(size); btn->setFont(iconFont); btn->setText((QChar)icon); } -QPixmap IconHelper::getPixmap(const QColor &color, int icon, quint32 size, - quint32 pixWidth, quint32 pixHeight, int flags) +void IconHelper::setPixmap1(QAbstractButton *btn, const QColor &color, int icon, quint32 size, + quint32 width, quint32 height, int flags) { - QPixmap pix(pixWidth, pixHeight); + btn->setIcon(getPixmap1(color, icon, size, width, height, flags)); +} + +QPixmap IconHelper::getPixmap1(const QColor &color, int icon, quint32 size, + quint32 width, quint32 height, int flags) +{ + //主动绘制图形字体到图片 + QPixmap pix(width, height); pix.fill(Qt::transparent); QPainter painter; @@ -68,124 +215,100 @@ QPixmap IconHelper::getPixmap(const QColor &color, int icon, quint32 size, painter.setFont(iconFont); painter.drawText(pix.rect(), flags, (QChar)icon); painter.end(); - return pix; } -QPixmap IconHelper::getPixmap(QToolButton *btn, bool normal) +void IconHelper::setStyle1(QWidget *widget, QList btns, QList icons, const IconHelper::StyleColor &styleColor) { - QPixmap pix; - int index = btns.indexOf(btn); - if (index >= 0) { - if (normal) { - pix = pixNormal.at(index); - } else { - pix = pixDark.at(index); - } + QList list; + foreach (QPushButton *btn, btns) { + list << btn; } - return pix; + setStyle(widget, list, icons, styleColor); } -QPixmap IconHelper::getPixmap(QToolButton *btn, int type) +void IconHelper::setStyle1(QWidget *widget, QList btns, QList icons, const IconHelper::StyleColor &styleColor) { - QPixmap pix; - int index = btns.indexOf(btn); - if (index >= 0) { - if (type == 0) { - pix = pixNormal.at(index); - } else if (type == 1) { - pix = pixHover.at(index); - } else if (type == 2) { - pix = pixPressed.at(index); - } else if (type == 3) { - pix = pixChecked.at(index); - } + QList list; + foreach (QToolButton *btn, btns) { + list << btn; } - return pix; + setStyle(widget, list, icons, styleColor); } -void IconHelper::setStyle(QFrame *frame, QList btns, QList icons, - quint32 iconSize, quint32 iconWidth, quint32 iconHeight, - const QString &normalBgColor, const QString &darkBgColor, - const QString &normalTextColor, const QString &darkTextColor) +void IconHelper::setStyle1(QWidget *widget, QList btns, QList icons, const IconHelper::StyleColor &styleColor) { int btnCount = btns.count(); - int charCount = icons.count(); - if (btnCount <= 0 || charCount <= 0 || btnCount != charCount) { + int iconCount = icons.count(); + if (btnCount <= 0 || iconCount <= 0 || btnCount != iconCount) { return; } - QStringList qss; - qss.append(QString("QFrame>QToolButton{border-style:none;border-width:0px;" - "background-color:%1;color:%2;}").arg(normalBgColor).arg(normalTextColor)); - qss.append(QString("QFrame>QToolButton:hover,QFrame>QToolButton:pressed,QFrame>QToolButton:checked" - "{background-color:%1;color:%2;}").arg(darkBgColor).arg(darkTextColor)); + QString position = styleColor.position; + quint32 iconSize = styleColor.iconSize; + quint32 iconWidth = styleColor.iconWidth; + quint32 iconHeight = styleColor.iconHeight; + quint32 borderWidth = styleColor.borderWidth; - frame->setStyleSheet(qss.join("")); - - //存储对应按钮对象,方便鼠标移上去的时候切换图片 - for (int i = 0; i < btnCount; i++) { - int icon = icons.at(i); - QPixmap pixNormal = getPixmap(normalTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixDark = getPixmap(darkTextColor, icon, iconSize, iconWidth, iconHeight); - - QToolButton *btn = btns.at(i); - btn->setIcon(QIcon(pixNormal)); - btn->setIconSize(QSize(iconWidth, iconHeight)); - btn->installEventFilter(this); - - this->btns.append(btn); - this->pixNormal.append(pixNormal); - this->pixDark.append(pixDark); - this->pixHover.append(pixDark); - this->pixPressed.append(pixDark); - this->pixChecked.append(pixDark); - } -} - -void IconHelper::setStyle(QWidget *widget, const QString &type, int borderWidth, const QString &borderColor, - const QString &normalBgColor, const QString &darkBgColor, - const QString &normalTextColor, const QString &darkTextColor) -{ + //根据不同的位置计算边框 QString strBorder; - if (type == "top") { + if (position == "top") { strBorder = QString("border-width:%1px 0px 0px 0px;padding-top:%1px;padding-bottom:%2px;") .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "right") { + } else if (position == "right") { strBorder = QString("border-width:0px %1px 0px 0px;padding-right:%1px;padding-left:%2px;") .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "bottom") { + } else if (position == "bottom") { strBorder = QString("border-width:0px 0px %1px 0px;padding-bottom:%1px;padding-top:%2px;") .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "left") { + } else if (position == "left") { strBorder = QString("border-width:0px 0px 0px %1px;padding-left:%1px;padding-right:%2px;") .arg(borderWidth).arg(borderWidth * 2); } + //如果图标是左侧显示则需要让没有选中的按钮左侧也有加深的边框,颜色为背景颜色 QStringList qss; - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:none;border-radius:0px;padding:5px;" - "color:%2;background:%3;}").arg(type).arg(normalTextColor).arg(normalBgColor)); + if (styleColor.textBesideIcon) { + qss << QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:solid;border-radius:0px;%2border-color:%3;color:%4;background:%5;}") + .arg(position).arg(strBorder).arg(styleColor.normalBgColor).arg(styleColor.normalTextColor).arg(styleColor.normalBgColor); + } else { + qss << QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:none;border-radius:0px;padding:5px;color:%2;background:%3;}") + .arg(position).arg(styleColor.normalTextColor).arg(styleColor.normalBgColor); + } - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:hover," - "QWidget[flag=\"%1\"] QAbstractButton:pressed," - "QWidget[flag=\"%1\"] QAbstractButton:checked{" - "border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(borderColor).arg(darkTextColor).arg(darkBgColor)); + //悬停+按下+选中 + qss << QString("QWidget[flag=\"%1\"] QAbstractButton:hover{border-style:solid;%2border-color:%3;color:%4;background:%5;}") + .arg(position).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.hoverTextColor).arg(styleColor.hoverBgColor); + qss << QString("QWidget[flag=\"%1\"] QAbstractButton:pressed{border-style:solid;%2border-color:%3;color:%4;background:%5;}") + .arg(position).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.pressedTextColor).arg(styleColor.pressedBgColor); + qss << QString("QWidget[flag=\"%1\"] QAbstractButton:checked{border-style:solid;%2border-color:%3;color:%4;background:%5;}") + .arg(position).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.checkedTextColor).arg(styleColor.checkedBgColor); + //窗体背景颜色+按钮背景颜色 + qss << QString("QWidget#%1{background:%2;}") + .arg(widget->objectName()).arg(styleColor.normalBgColor); + qss << QString("QWidget>QAbstractButton{border-width:0px;background-color:%1;color:%2;}") + .arg(styleColor.normalBgColor).arg(styleColor.normalTextColor); + qss << QString("QWidget>QAbstractButton:hover{background-color:%1;color:%2;}") + .arg(styleColor.hoverBgColor).arg(styleColor.hoverTextColor); + qss << QString("QWidget>QAbstractButton:pressed{background-color:%1;color:%2;}") + .arg(styleColor.pressedBgColor).arg(styleColor.pressedTextColor); + qss << QString("QWidget>QAbstractButton:checked{background-color:%1;color:%2;}") + .arg(styleColor.checkedBgColor).arg(styleColor.checkedTextColor); + + //设置样式表 widget->setStyleSheet(qss.join("")); -} -void IconHelper::removeStyle(QList btns) -{ - for (int i = 0; i < btns.count(); i++) { + //可能会重复调用设置所以先要移除上一次的 + for (int i = 0; i < btnCount; i++) { for (int j = 0; j < this->btns.count(); j++) { if (this->btns.at(j) == btns.at(i)) { + disconnect(btns.at(i), SIGNAL(toggled(bool)), this, SLOT(toggled(bool))); this->btns.at(j)->removeEventFilter(this); this->btns.removeAt(j); this->pixNormal.removeAt(j); - this->pixDark.removeAt(j); this->pixHover.removeAt(j); this->pixPressed.removeAt(j); this->pixChecked.removeAt(j); @@ -193,174 +316,36 @@ void IconHelper::removeStyle(QList btns) } } } -} - -void IconHelper::setStyle(QWidget *widget, QList btns, QList icons, - quint32 iconSize, quint32 iconWidth, quint32 iconHeight, - const QString &type, int borderWidth, const QString &borderColor, - const QString &normalBgColor, const QString &darkBgColor, - const QString &normalTextColor, const QString &darkTextColor) -{ - int btnCount = btns.count(); - int charCount = icons.count(); - if (btnCount <= 0 || charCount <= 0 || btnCount != charCount) { - return; - } - - QString strBorder; - if (type == "top") { - strBorder = QString("border-width:%1px 0px 0px 0px;padding-top:%1px;padding-bottom:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "right") { - strBorder = QString("border-width:0px %1px 0px 0px;padding-right:%1px;padding-left:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "bottom") { - strBorder = QString("border-width:0px 0px %1px 0px;padding-bottom:%1px;padding-top:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "left") { - strBorder = QString("border-width:0px 0px 0px %1px;padding-left:%1px;padding-right:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } - - //如果图标是左侧显示则需要让没有选中的按钮左侧也有加深的边框,颜色为背景颜色 - QStringList qss; - if (btns.at(0)->toolButtonStyle() == Qt::ToolButtonTextBesideIcon) { - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:solid;border-radius:0px;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(normalBgColor).arg(normalTextColor).arg(normalBgColor)); - } else { - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:none;border-radius:0px;padding:5px;color:%2;background:%3;}") - .arg(type).arg(normalTextColor).arg(normalBgColor)); - } - - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:hover," - "QWidget[flag=\"%1\"] QAbstractButton:pressed," - "QWidget[flag=\"%1\"] QAbstractButton:checked{" - "border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(borderColor).arg(darkTextColor).arg(darkBgColor)); - - qss.append(QString("QWidget#%1{background:%2;}").arg(widget->objectName()).arg(normalBgColor)); - qss.append(QString("QWidget>QToolButton{border-width:0px;" - "background-color:%1;color:%2;}").arg(normalBgColor).arg(normalTextColor)); - qss.append(QString("QWidget>QToolButton:hover,QWidget>QToolButton:pressed,QWidget>QToolButton:checked{" - "background-color:%1;color:%2;}").arg(darkBgColor).arg(darkTextColor)); - - widget->setStyleSheet(qss.join("")); //存储对应按钮对象,方便鼠标移上去的时候切换图片 + int checkedIndex = -1; for (int i = 0; i < btnCount; i++) { int icon = icons.at(i); - QPixmap pixNormal = getPixmap(normalTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixDark = getPixmap(darkTextColor, icon, iconSize, iconWidth, iconHeight); + QPixmap pixNormal = getPixmap1(styleColor.normalTextColor, icon, iconSize, iconWidth, iconHeight); + QPixmap pixHover = getPixmap1(styleColor.hoverTextColor, icon, iconSize, iconWidth, iconHeight); + QPixmap pixPressed = getPixmap1(styleColor.pressedTextColor, icon, iconSize, iconWidth, iconHeight); + QPixmap pixChecked = getPixmap1(styleColor.checkedTextColor, icon, iconSize, iconWidth, iconHeight); - QToolButton *btn = btns.at(i); - btn->setIcon(QIcon(pixNormal)); - btn->setIconSize(QSize(iconWidth, iconHeight)); - btn->installEventFilter(this); - - this->btns.append(btn); - this->pixNormal.append(pixNormal); - this->pixDark.append(pixDark); - this->pixHover.append(pixDark); - this->pixPressed.append(pixDark); - this->pixChecked.append(pixDark); - } -} - -void IconHelper::setStyle(QWidget *widget, QList btns, QList icons, const IconHelper::StyleColor &styleColor) -{ - int btnCount = btns.count(); - int charCount = icons.count(); - if (btnCount <= 0 || charCount <= 0 || btnCount != charCount) { - return; - } - - quint32 iconSize = styleColor.iconSize; - quint32 iconWidth = styleColor.iconWidth; - quint32 iconHeight = styleColor.iconHeight; - quint32 borderWidth = styleColor.borderWidth; - QString type = styleColor.type; - - QString strBorder; - if (type == "top") { - strBorder = QString("border-width:%1px 0px 0px 0px;padding-top:%1px;padding-bottom:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "right") { - strBorder = QString("border-width:0px %1px 0px 0px;padding-right:%1px;padding-left:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "bottom") { - strBorder = QString("border-width:0px 0px %1px 0px;padding-bottom:%1px;padding-top:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "left") { - strBorder = QString("border-width:0px 0px 0px %1px;padding-left:%1px;padding-right:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } - - //如果图标是左侧显示则需要让没有选中的按钮左侧也有加深的边框,颜色为背景颜色 - QStringList qss; - if (btns.at(0)->toolButtonStyle() == Qt::ToolButtonTextBesideIcon) { - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:solid;border-radius:0px;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(styleColor.normalBgColor).arg(styleColor.normalTextColor).arg(styleColor.normalBgColor)); - } else { - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:none;border-radius:0px;padding:5px;color:%2;background:%3;}") - .arg(type).arg(styleColor.normalTextColor).arg(styleColor.normalBgColor)); - } - - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:hover{border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.hoverTextColor).arg(styleColor.hoverBgColor)); - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:pressed{border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.pressedTextColor).arg(styleColor.pressedBgColor)); - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:checked{border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.checkedTextColor).arg(styleColor.checkedBgColor)); - - qss.append(QString("QWidget#%1{background:%2;}").arg(widget->objectName()).arg(styleColor.normalBgColor)); - qss.append(QString("QWidget>QToolButton{border-width:0px;background-color:%1;color:%2;}").arg(styleColor.normalBgColor).arg(styleColor.normalTextColor)); - qss.append(QString("QWidget>QToolButton:hover{background-color:%1;color:%2;}").arg(styleColor.hoverBgColor).arg(styleColor.hoverTextColor)); - qss.append(QString("QWidget>QToolButton:pressed{background-color:%1;color:%2;}").arg(styleColor.pressedBgColor).arg(styleColor.pressedTextColor)); - qss.append(QString("QWidget>QToolButton:checked{background-color:%1;color:%2;}").arg(styleColor.checkedBgColor).arg(styleColor.checkedTextColor)); - - widget->setStyleSheet(qss.join("")); - - //存储对应按钮对象,方便鼠标移上去的时候切换图片 - for (int i = 0; i < btnCount; i++) { - int icon = icons.at(i); - QPixmap pixNormal = getPixmap(styleColor.normalTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixHover = getPixmap(styleColor.hoverTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixPressed = getPixmap(styleColor.pressedTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixChecked = getPixmap(styleColor.checkedTextColor, icon, iconSize, iconWidth, iconHeight); - - QToolButton *btn = btns.at(i); - btn->setIcon(QIcon(pixNormal)); - btn->setIconSize(QSize(iconWidth, iconHeight)); - btn->installEventFilter(this); - - this->btns.append(btn); - this->pixNormal.append(pixNormal); - this->pixDark.append(pixHover); - this->pixHover.append(pixHover); - this->pixPressed.append(pixPressed); - this->pixChecked.append(pixChecked); - } -} - -bool IconHelper::eventFilter(QObject *watched, QEvent *event) -{ - if (watched->inherits("QToolButton")) { - QToolButton *btn = (QToolButton *)watched; - int index = btns.indexOf(btn); - if (index >= 0) { - if (event->type() == QEvent::Enter) { - btn->setIcon(QIcon(pixHover.at(index))); - } else if (event->type() == QEvent::MouseButtonPress) { - btn->setIcon(QIcon(pixPressed.at(index))); - } else if (event->type() == QEvent::Leave) { - if (btn->isChecked()) { - btn->setIcon(QIcon(pixChecked.at(index))); - } else { - btn->setIcon(QIcon(pixNormal.at(index))); - } - } + //记住最后选中的按钮 + QAbstractButton *btn = btns.at(i); + if (btn->isChecked()) { + checkedIndex = i; } + + btn->setIcon(QIcon(pixNormal)); + btn->setIconSize(QSize(iconWidth, iconHeight)); + btn->installEventFilter(this); + connect(btn, SIGNAL(toggled(bool)), this, SLOT(toggled(bool))); + + this->btns << btn; + this->pixNormal << pixNormal; + this->pixHover << pixHover; + this->pixPressed << pixPressed; + this->pixChecked << pixChecked; } - return QObject::eventFilter(watched, event); + //主动触发一下选中的按钮 + if (checkedIndex >= 0) { + QMetaObject::invokeMethod(btns.at(checkedIndex), "toggled", Q_ARG(bool, true)); + } } diff --git a/core_qui/iconhelper.h b/core_qui/iconhelper.h index 28931ba..0d168ea 100644 --- a/core_qui/iconhelper.h +++ b/core_qui/iconhelper.h @@ -1,12 +1,20 @@ #ifndef ICONHELPER_H #define ICONHELPER_H -#include #include #if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) #include #endif +/** + * 超级图形字体类 作者:feiyangqingyun(QQ:517216493) 2016-11-23 + * 1. 可传入多种图形字体文件 + * 2. 可设置 QLabel+QAbstractButton 图形字体 + * 3. 可设置按钮图标 + * 4. 可获取指定尺寸的图形字体图片 + * 5. 超级导航栏样式设置,带图标和效果切换+悬停颜色+按下颜色+选中颜色 + */ + #ifdef quc class Q_DECL_EXPORT IconHelper : public QObject #else @@ -17,78 +25,38 @@ class IconHelper : public QObject Q_OBJECT public: - static IconHelper *Instance(); - explicit IconHelper(QObject *parent = 0); - - //获取图形字体 - QFont getIconFont(); - - //设置图形字体到标签 - void setIcon(QLabel *lab, int icon, quint32 size = 12); - //设置图形字体到按钮 - void setIcon(QAbstractButton *btn, int icon, quint32 size = 12); - - //获取指定图形字体,可以指定文字大小,图片宽高,文字对齐 - QPixmap getPixmap(const QColor &color, int icon, quint32 size = 12, - quint32 pixWidth = 15, quint32 pixHeight = 15, - int flags = Qt::AlignCenter); - - //根据按钮获取该按钮对应的图标 - QPixmap getPixmap(QToolButton *btn, bool normal); - QPixmap getPixmap(QToolButton *btn, int type); - - //指定QFrame导航按钮样式,带图标 - void setStyle(QFrame *frame, QList btns, QList icons, - quint32 iconSize = 12, quint32 iconWidth = 15, quint32 iconHeight = 15, - const QString &normalBgColor = "#2FC5A2", - const QString &darkBgColor = "#3EA7E9", - const QString &normalTextColor = "#EEEEEE", - const QString &darkTextColor = "#FFFFFF"); - - //指定导航面板样式,不带图标 - static void setStyle(QWidget *widget, const QString &type = "left", int borderWidth = 3, - const QString &borderColor = "#029FEA", - const QString &normalBgColor = "#292F38", - const QString &darkBgColor = "#1D2025", - const QString &normalTextColor = "#54626F", - const QString &darkTextColor = "#FDFDFD"); - - //移除导航面板样式,防止重复 - void removeStyle(QList btns); - - //指定QWidget导航面板样式,带图标和效果切换 - void setStyle(QWidget *widget, QList btns, QList icons, - quint32 iconSize = 12, quint32 iconWidth = 15, quint32 iconHeight = 15, - const QString &type = "left", int borderWidth = 3, - const QString &borderColor = "#029FEA", - const QString &normalBgColor = "#292F38", - const QString &darkBgColor = "#1D2025", - const QString &normalTextColor = "#54626F", - const QString &darkTextColor = "#FDFDFD"); - + //样式颜色结构体 struct StyleColor { - quint32 iconSize; - quint32 iconWidth; - quint32 iconHeight; - quint32 borderWidth; - QString type; - QString borderColor; - QString normalBgColor; - QString normalTextColor; - QString hoverBgColor; - QString hoverTextColor; - QString pressedBgColor; - QString pressedTextColor; - QString checkedBgColor; - QString checkedTextColor; + QString position; //位置 left right top bottom + bool textBesideIcon; //文字在图标下面 + + quint32 iconSize; //图标字体尺寸 + quint32 iconWidth; //图标图片宽度 + quint32 iconHeight; //图标图片高度 + + quint32 borderWidth; //边框宽度 + QString borderColor; //边框颜色 + + QString normalBgColor; //正常背景颜色 + QString normalTextColor; //正常文字颜色 + QString hoverBgColor; //悬停背景颜色 + QString hoverTextColor; //悬停文字颜色 + QString pressedBgColor; //按下背景颜色 + QString pressedTextColor; //按下文字颜色 + QString checkedBgColor; //选中背景颜色 + QString checkedTextColor; //选中文字颜色 StyleColor() { + position = "left"; + textBesideIcon = false; + iconSize = 12; iconWidth = 15; iconHeight = 15; + borderWidth = 3; - type = "left"; borderColor = "#029FEA"; + normalBgColor = "#292F38"; normalTextColor = "#54626F"; hoverBgColor = "#40444D"; @@ -98,24 +66,83 @@ public: checkedBgColor = "#44494F"; checkedTextColor = "#FDFDFD"; } + + //设置常规颜色 普通状态+加深状态 + void setColor(const QString &normalBgColor, + const QString &normalTextColor, + const QString &darkBgColor, + const QString &darkTextColor) { + this->normalBgColor = normalBgColor; + this->normalTextColor = normalTextColor; + this->hoverBgColor = darkBgColor; + this->hoverTextColor = darkTextColor; + this->pressedBgColor = darkBgColor; + this->pressedTextColor = darkTextColor; + this->checkedBgColor = darkBgColor; + this->checkedTextColor = darkTextColor; + } }; - //指定QWidget导航面板样式,带图标和效果切换+悬停颜色+按下颜色+选中颜色 - void setStyle(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + //阿里巴巴图形字体类 + static IconHelper *iconFontAliBaBa; + //FontAwesome图形字体类 + static IconHelper *iconFontAwesome; + //初始化图形字体 + static void initFont(); + + static void setIcon(QLabel *lab, int icon, quint32 size = 12); + static void setIcon(QAbstractButton *btn, int icon, quint32 size = 12); + + static void setPixmap(QAbstractButton *btn, const QColor &color, + int icon, quint32 size = 12, + quint32 width = 15, quint32 height = 15, + int flags = Qt::AlignCenter); + static QPixmap getPixmap(const QColor &color, int icon, quint32 size = 12, + quint32 width = 15, quint32 height = 15, + int flags = Qt::AlignCenter); + + static void setStyle(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + static void setStyle(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + static void setStyle(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + + //默认构造函数,传入字体文件+字体名称 + explicit IconHelper(const QString &fontFile, const QString &fontName, QObject *parent = 0); protected: bool eventFilter(QObject *watched, QEvent *event); private: - static QScopedPointer self; + QFont iconFont; //图形字体 + QList btns; //按钮队列 + QList pixNormal; //正常图片队列 + QList pixHover; //悬停图片队列 + QList pixPressed; //按下图片队列 + QList pixChecked; //选中图片队列 - QFont iconFont; //图形字体 - QList btns; //按钮队列 - QList pixNormal; //正常图片队列 - QList pixDark; //加深图片队列 - QList pixHover; //悬停图片队列 - QList pixPressed; //按下图片队列 - QList pixChecked; //选中图片队列 +private slots: + //按钮选中状态切换处理 + void toggled(bool checked); + +public: + //设置图形字体到标签 + void setIcon1(QLabel *lab, int icon, quint32 size = 12); + //设置图形字体到按钮 + void setIcon1(QAbstractButton *btn, int icon, quint32 size = 12); + + //设置图形字体到图标 + void setPixmap1(QAbstractButton *btn, const QColor &color, + int icon, quint32 size = 12, + quint32 width = 15, quint32 height = 15, + int flags = Qt::AlignCenter); + //获取指定图形字体,可以指定文字大小,图片宽高,文字对齐 + QPixmap getPixmap1(const QColor &color, int icon, quint32 size = 12, + quint32 width = 15, quint32 height = 15, + int flags = Qt::AlignCenter); + + //指定导航面板样式,带图标和效果切换+悬停颜色+按下颜色+选中颜色 + void setStyle1(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + void setStyle1(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + void setStyle1(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); }; #endif // ICONHELPER_H diff --git a/core_qui/quidateselect.cpp b/core_qui/quidateselect.cpp index 68f04ea..cb77fda 100644 --- a/core_qui/quidateselect.cpp +++ b/core_qui/quidateselect.cpp @@ -258,7 +258,7 @@ QString QUIDateSelect::getEndDateTime() const void QUIDateSelect::setIconMain(int icon, quint32 size) { - IconHelper::Instance()->setIcon(this->labIco, icon, size); + IconHelper::setIcon(this->labIco, icon, size); } void QUIDateSelect::setFormat(const QString &format) diff --git a/core_qui/quihead.h b/core_qui/quihead.h index 6ffef93..e63a1a6 100644 --- a/core_qui/quihead.h +++ b/core_qui/quihead.h @@ -52,8 +52,6 @@ #include "head.h" #include "iconhelper.h" -#include "iconfont.h" - #include "quihelper.h" #include "quiconfig.h" #include "quistyle.h" diff --git a/core_qui/quihelper.cpp b/core_qui/quihelper.cpp index 527e3ea..ee86dbe 100644 --- a/core_qui/quihelper.cpp +++ b/core_qui/quihelper.cpp @@ -249,7 +249,7 @@ void QUIHelper::setIconBtn(QAbstractButton *btn, const QString &png, int icon) int height = 18; QPixmap pix; if (QPixmap(png).isNull()) { - pix = IconHelper::Instance()->getPixmap(QUIConfig::TextColor, icon, size, width, height); + pix = IconHelper::getPixmap(QUIConfig::TextColor, icon, size, width, height); } else { pix = QPixmap(png); } @@ -331,8 +331,8 @@ void QUIHelper::setFramelessForm(QWidget *widgetMain, QWidget *widgetTitle, widgetMain->setWindowFlags(widgetMain->windowFlags() | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint); } - IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); - IconHelper::Instance()->setIcon(btnClose, QUIConfig::IconClose, QUIConfig::FontSize); + IconHelper::setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); + IconHelper::setIcon(btnClose, QUIConfig::IconClose, QUIConfig::FontSize); } void QUIHelper::setSystemDateTime(const QString &year, const QString &month, const QString &day, const QString &hour, const QString &min, const QString &sec) diff --git a/core_qui/quiinputbox.cpp b/core_qui/quiinputbox.cpp index 1f2e2db..0464bb9 100644 --- a/core_qui/quiinputbox.cpp +++ b/core_qui/quiinputbox.cpp @@ -287,5 +287,5 @@ void QUIInputBox::on_btnMenu_Close_clicked() void QUIInputBox::setIconMain(int icon, quint32 size) { - IconHelper::Instance()->setIcon(this->labIco, icon, size); + IconHelper::setIcon(this->labIco, icon, size); } diff --git a/core_qui/quimessagebox.cpp b/core_qui/quimessagebox.cpp index e428055..4f4931b 100644 --- a/core_qui/quimessagebox.cpp +++ b/core_qui/quimessagebox.cpp @@ -264,7 +264,7 @@ void QUIMessageBox::on_btnMenu_Close_clicked() void QUIMessageBox::setIconMain(int icon, quint32 size) { - IconHelper::Instance()->setIcon(this->labIco, icon, size); + IconHelper::setIcon(this->labIco, icon, size); } void QUIMessageBox::setIconMsg(const QString &png, int icon) @@ -272,7 +272,7 @@ void QUIMessageBox::setIconMsg(const QString &png, int icon) //图片存在则取图片,不存在则取图形字体 int size = this->labIcoMain->size().height(); if (QImage(png).isNull()) { - IconHelper::Instance()->setIcon(this->labIcoMain, icon, size); + IconHelper::setIcon(this->labIcoMain, icon, size); } else { this->labIcoMain->setStyleSheet(QString("border-image:url(%1);").arg(png)); } diff --git a/core_qui/quitipbox.cpp b/core_qui/quitipbox.cpp index 9242ebd..cde7e5f 100644 --- a/core_qui/quitipbox.cpp +++ b/core_qui/quitipbox.cpp @@ -200,7 +200,7 @@ void QUITipBox::on_btnMenu_Close_clicked() void QUITipBox::setIconMain(int icon, quint32 size) { - IconHelper::Instance()->setIcon(this->labIco, icon, size); + IconHelper::setIcon(this->labIco, icon, size); } void QUITipBox::setTip(const QString &title, const QString &tip, bool fullScreen, bool center, int closeSec) diff --git a/core_qui/quiwidget.cpp b/core_qui/quiwidget.cpp index c599c97..8a590f0 100644 --- a/core_qui/quiwidget.cpp +++ b/core_qui/quiwidget.cpp @@ -277,26 +277,26 @@ void QUIWidget::setIcon(QUIWidget::Widget widget, int icon, quint32 size) setIconMain(icon, size); } else if (widget == QUIWidget::BtnMenu) { QUIConfig::IconMenu = icon; - IconHelper::Instance()->setIcon(this->btnMenu, icon, size); + IconHelper::setIcon(this->btnMenu, icon, size); } else if (widget == QUIWidget::BtnMenu_Min) { QUIConfig::IconMin = icon; - IconHelper::Instance()->setIcon(this->btnMenu_Min, icon, size); + IconHelper::setIcon(this->btnMenu_Min, icon, size); } else if (widget == QUIWidget::BtnMenu_Max) { QUIConfig::IconMax = icon; - IconHelper::Instance()->setIcon(this->btnMenu_Max, icon, size); + IconHelper::setIcon(this->btnMenu_Max, icon, size); } else if (widget == QUIWidget::BtnMenu_Normal) { QUIConfig::IconNormal = icon; - IconHelper::Instance()->setIcon(this->btnMenu_Max, icon, size); + IconHelper::setIcon(this->btnMenu_Max, icon, size); } else if (widget == QUIWidget::BtnMenu_Close) { QUIConfig::IconClose = icon; - IconHelper::Instance()->setIcon(this->btnMenu_Close, icon, size); + IconHelper::setIcon(this->btnMenu_Close, icon, size); } } void QUIWidget::setIconMain(int icon, quint32 size) { QUIConfig::IconMain = icon; - IconHelper::Instance()->setIcon(this->labIco, icon, size); + IconHelper::setIcon(this->labIco, icon, size); QUIMessageBox::Instance()->setIconMain(icon, size); QUIInputBox::Instance()->setIconMain(icon, size); QUIDateSelect::Instance()->setIconMain(icon, size); diff --git a/navbutton/frmnavbutton.cpp b/navbutton/frmnavbutton.cpp index 57a0a1d..cfaf14d 100644 --- a/navbutton/frmnavbutton.cpp +++ b/navbutton/frmnavbutton.cpp @@ -25,9 +25,9 @@ void frmNavButton::initForm() //从图形字体获得图片,也可以从资源文件或者路径文件获取 int icon = 0xf061; - QPixmap iconNormal = IconHelper::Instance()->getPixmap(QColor(100, 100, 100).name(), icon, size, pixWidth, pixHeight); - QPixmap iconHover = IconHelper::Instance()->getPixmap(QColor(255, 255, 255).name(), icon, size, pixWidth, pixHeight); - QPixmap iconCheck = IconHelper::Instance()->getPixmap(QColor(255, 255, 255).name(), icon, size, pixWidth, pixHeight); + QPixmap iconNormal = IconHelper::getPixmap(QColor(100, 100, 100).name(), icon, size, pixWidth, pixHeight); + QPixmap iconHover = IconHelper::getPixmap(QColor(255, 255, 255).name(), icon, size, pixWidth, pixHeight); + QPixmap iconCheck = IconHelper::getPixmap(QColor(255, 255, 255).name(), icon, size, pixWidth, pixHeight); btns1 << ui->navButton11 << ui->navButton12 << ui->navButton13 << ui->navButton14; for (int i = 0; i < btns1.count(); i++) { @@ -73,9 +73,9 @@ void frmNavButton::initForm() //分开设置图标 int icon = icons.at(i); - QPixmap iconNormal = IconHelper::Instance()->getPixmap(normalTextColor.name(), icon, size, pixWidth, pixHeight); - QPixmap iconHover = IconHelper::Instance()->getPixmap(hoverTextColor.name(), icon, size, pixWidth, pixHeight); - QPixmap iconCheck = IconHelper::Instance()->getPixmap(checkTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconNormal = IconHelper::getPixmap(normalTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconHover = IconHelper::getPixmap(hoverTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconCheck = IconHelper::getPixmap(checkTextColor.name(), icon, size, pixWidth, pixHeight); btn->setIconNormal(iconNormal); btn->setIconHover(iconHover); @@ -115,9 +115,9 @@ void frmNavButton::initForm() //分开设置图标 int icon = icons.at(i); - QPixmap iconNormal = IconHelper::Instance()->getPixmap(normalTextColor.name(), icon, size, pixWidth, pixHeight); - QPixmap iconHover = IconHelper::Instance()->getPixmap(hoverTextColor.name(), icon, size, pixWidth, pixHeight); - QPixmap iconCheck = IconHelper::Instance()->getPixmap(checkTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconNormal = IconHelper::getPixmap(normalTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconHover = IconHelper::getPixmap(hoverTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconCheck = IconHelper::getPixmap(checkTextColor.name(), icon, size, pixWidth, pixHeight); btn->setIconNormal(iconNormal); btn->setIconHover(iconHover); @@ -138,9 +138,9 @@ void frmNavButton::initForm() pixHeight = 15; icon = 0xf105; - iconNormal = IconHelper::Instance()->getPixmap(QColor(100, 100, 100).name(), icon, size, pixWidth, pixHeight); - iconHover = IconHelper::Instance()->getPixmap(QColor(255, 255, 255).name(), icon, size, pixWidth, pixHeight); - iconCheck = IconHelper::Instance()->getPixmap(QColor(255, 255, 255).name(), icon, size, pixWidth, pixHeight); + iconNormal = IconHelper::getPixmap(QColor(100, 100, 100).name(), icon, size, pixWidth, pixHeight); + iconHover = IconHelper::getPixmap(QColor(255, 255, 255).name(), icon, size, pixWidth, pixHeight); + iconCheck = IconHelper::getPixmap(QColor(255, 255, 255).name(), icon, size, pixWidth, pixHeight); btns4 << ui->navButton41 << ui->navButton42 << ui->navButton43 << ui->navButton44; for (int i = 0; i < btns4.count(); i++) { @@ -193,9 +193,9 @@ void frmNavButton::initForm() //分开设置图标 int icon = icons.at(i); - QPixmap iconNormal = IconHelper::Instance()->getPixmap(normalTextColor.name(), icon, size, pixWidth, pixHeight); - QPixmap iconHover = IconHelper::Instance()->getPixmap(hoverTextColor.name(), icon, size, pixWidth, pixHeight); - QPixmap iconCheck = IconHelper::Instance()->getPixmap(checkTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconNormal = IconHelper::getPixmap(normalTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconHover = IconHelper::getPixmap(hoverTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconCheck = IconHelper::getPixmap(checkTextColor.name(), icon, size, pixWidth, pixHeight); btn->setIconNormal(iconNormal); btn->setIconHover(iconHover); @@ -233,9 +233,9 @@ void frmNavButton::initForm() //分开设置图标 int icon = icons.at(i); - QPixmap iconNormal = IconHelper::Instance()->getPixmap(normalTextColor.name(), icon, size, pixWidth, pixHeight); - QPixmap iconHover = IconHelper::Instance()->getPixmap(hoverTextColor.name(), icon, size, pixWidth, pixHeight); - QPixmap iconCheck = IconHelper::Instance()->getPixmap(checkTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconNormal = IconHelper::getPixmap(normalTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconHover = IconHelper::getPixmap(hoverTextColor.name(), icon, size, pixWidth, pixHeight); + QPixmap iconCheck = IconHelper::getPixmap(checkTextColor.name(), icon, size, pixWidth, pixHeight); btn->setIconNormal(iconNormal); btn->setIconHover(iconHover); diff --git a/navbutton/iconhelper.cpp b/navbutton/iconhelper.cpp index 6e53df2..e9df4ff 100644 --- a/navbutton/iconhelper.cpp +++ b/navbutton/iconhelper.cpp @@ -1,62 +1,209 @@ #include "iconhelper.h" -QScopedPointer IconHelper::self; -IconHelper *IconHelper::Instance() +IconHelper *IconHelper::iconFontAliBaBa = 0; +IconHelper *IconHelper::iconFontAwesome = 0; +void IconHelper::initFont() { - if (self.isNull()) { - static QMutex mutex; - QMutexLocker locker(&mutex); - if (self.isNull()) { - self.reset(new IconHelper); + static bool isInit = false; + if (!isInit) { + isInit = true; + if (iconFontAliBaBa == 0) { + iconFontAliBaBa = new IconHelper(":/image/iconfont.ttf", "iconfont"); + } + if (iconFontAwesome == 0) { + iconFontAwesome = new IconHelper(":/image/fontawesome-webfont.ttf", "FontAwesome"); } } - - return self.data(); } -IconHelper::IconHelper(QObject *parent) : QObject(parent) +void IconHelper::setIcon(QLabel *lab, int icon, quint32 size) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setIcon1(lab, icon, size); + } else if (icon > 0xf000) { + iconFontAwesome->setIcon1(lab, icon, size); + } +} + +void IconHelper::setIcon(QAbstractButton *btn, int icon, quint32 size) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setIcon1(btn, icon, size); + } else if (icon > 0xf000) { + iconFontAwesome->setIcon1(btn, icon, size); + } +} + +void IconHelper::setPixmap(QAbstractButton *btn, const QColor &color, int icon, quint32 size, + quint32 width, quint32 height, int flags) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setPixmap1(btn, color, icon, size, width, height, flags); + } else if (icon > 0xf000) { + iconFontAwesome->setPixmap1(btn, color, icon, size, width, height, flags); + } +} + +QPixmap IconHelper::getPixmap(const QColor &color, int icon, quint32 size, + quint32 width, quint32 height, int flags) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + QPixmap pix; + if (icon > 0xe000 && icon < 0xf000) { + pix = iconFontAliBaBa->getPixmap1(color, icon, size, width, height, flags); + } else if (icon > 0xf000) { + pix = iconFontAwesome->getPixmap1(color, icon, size, width, height, flags); + } + return pix; +} + +void IconHelper::setStyle(QWidget *widget, QList btns, + QList icons, const IconHelper::StyleColor &styleColor) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + int icon = icons.first(); + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setStyle1(widget, btns, icons, styleColor); + } else if (icon > 0xf000) { + iconFontAwesome->setStyle1(widget, btns, icons, styleColor); + } +} + +void IconHelper::setStyle(QWidget *widget, QList btns, + QList icons, const IconHelper::StyleColor &styleColor) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + int icon = icons.first(); + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setStyle1(widget, btns, icons, styleColor); + } else if (icon > 0xf000) { + iconFontAwesome->setStyle1(widget, btns, icons, styleColor); + } +} + +void IconHelper::setStyle(QWidget *widget, QList btns, + QList icons, const IconHelper::StyleColor &styleColor) +{ + initFont(); + + //自动根据不同的字体的值选择对应的类,fontawesome 0xf开头 iconfont 0xe开头 + int icon = icons.first(); + if (icon > 0xe000 && icon < 0xf000) { + iconFontAliBaBa->setStyle1(widget, btns, icons, styleColor); + } else if (icon > 0xf000) { + iconFontAwesome->setStyle1(widget, btns, icons, styleColor); + } +} + +IconHelper::IconHelper(const QString &fontFile, const QString &fontName, QObject *parent) : QObject(parent) { //判断图形字体是否存在,不存在则加入 QFontDatabase fontDb; - if (!fontDb.families().contains("FontAwesome")) { - int fontId = fontDb.addApplicationFont(":/image/fontawesome-webfont.ttf"); - QStringList fontName = fontDb.applicationFontFamilies(fontId); - if (fontName.count() == 0) { - qDebug() << "load fontawesome-webfont.ttf error"; + if (!fontDb.families().contains(fontName)) { + int fontId = fontDb.addApplicationFont(fontFile); + QStringList listName = fontDb.applicationFontFamilies(fontId); + if (listName.count() == 0) { + qDebug() << QString("load %1 error").arg(fontName); } } - if (fontDb.families().contains("FontAwesome")) { - iconFont = QFont("FontAwesome"); + if (fontDb.families().contains(fontName)) { + iconFont = QFont(fontName); #if (QT_VERSION >= QT_VERSION_CHECK(4,8,0)) iconFont.setHintingPreference(QFont::PreferNoHinting); #endif } } -QFont IconHelper::getIconFont() +bool IconHelper::eventFilter(QObject *watched, QEvent *event) { - return this->iconFont; + //根据不同的 + if (watched->inherits("QAbstractButton")) { + QAbstractButton *btn = (QAbstractButton *)watched; + int index = btns.indexOf(btn); + if (index >= 0) { + //不同的事件设置不同的图标,同时区分选中的和没有选中的 + if (btn->isChecked()) { + if (event->type() == QEvent::MouseButtonPress) { + QMouseEvent *mouseEvent = (QMouseEvent *)event; + if (mouseEvent->button() == Qt::LeftButton) { + btn->setIcon(QIcon(pixChecked.at(index))); + } + } else if (event->type() == QEvent::Enter) { + btn->setIcon(QIcon(pixChecked.at(index))); + } else if (event->type() == QEvent::Leave) { + btn->setIcon(QIcon(pixChecked.at(index))); + } + } else { + if (event->type() == QEvent::MouseButtonPress) { + QMouseEvent *mouseEvent = (QMouseEvent *)event; + if (mouseEvent->button() == Qt::LeftButton) { + btn->setIcon(QIcon(pixPressed.at(index))); + } + } else if (event->type() == QEvent::Enter) { + btn->setIcon(QIcon(pixHover.at(index))); + } else if (event->type() == QEvent::Leave) { + btn->setIcon(QIcon(pixNormal.at(index))); + } + } + } + } + + return QObject::eventFilter(watched, event); } -void IconHelper::setIcon(QLabel *lab, int icon, quint32 size) +void IconHelper::toggled(bool checked) +{ + //选中和不选中设置不同的图标 + QAbstractButton *btn = (QAbstractButton *)sender(); + int index = btns.indexOf(btn); + if (checked) { + btn->setIcon(QIcon(pixChecked.at(index))); + } else { + btn->setIcon(QIcon(pixNormal.at(index))); + } +} + +void IconHelper::setIcon1(QLabel *lab, int icon, quint32 size) { iconFont.setPixelSize(size); lab->setFont(iconFont); lab->setText((QChar)icon); } -void IconHelper::setIcon(QAbstractButton *btn, int icon, quint32 size) +void IconHelper::setIcon1(QAbstractButton *btn, int icon, quint32 size) { iconFont.setPixelSize(size); btn->setFont(iconFont); btn->setText((QChar)icon); } -QPixmap IconHelper::getPixmap(const QColor &color, int icon, quint32 size, - quint32 pixWidth, quint32 pixHeight, int flags) +void IconHelper::setPixmap1(QAbstractButton *btn, const QColor &color, int icon, quint32 size, + quint32 width, quint32 height, int flags) { - QPixmap pix(pixWidth, pixHeight); + btn->setIcon(getPixmap1(color, icon, size, width, height, flags)); +} + +QPixmap IconHelper::getPixmap1(const QColor &color, int icon, quint32 size, + quint32 width, quint32 height, int flags) +{ + //主动绘制图形字体到图片 + QPixmap pix(width, height); pix.fill(Qt::transparent); QPainter painter; @@ -68,124 +215,100 @@ QPixmap IconHelper::getPixmap(const QColor &color, int icon, quint32 size, painter.setFont(iconFont); painter.drawText(pix.rect(), flags, (QChar)icon); painter.end(); - return pix; } -QPixmap IconHelper::getPixmap(QToolButton *btn, bool normal) +void IconHelper::setStyle1(QWidget *widget, QList btns, QList icons, const IconHelper::StyleColor &styleColor) { - QPixmap pix; - int index = btns.indexOf(btn); - if (index >= 0) { - if (normal) { - pix = pixNormal.at(index); - } else { - pix = pixDark.at(index); - } + QList list; + foreach (QPushButton *btn, btns) { + list << btn; } - return pix; + setStyle(widget, list, icons, styleColor); } -QPixmap IconHelper::getPixmap(QToolButton *btn, int type) +void IconHelper::setStyle1(QWidget *widget, QList btns, QList icons, const IconHelper::StyleColor &styleColor) { - QPixmap pix; - int index = btns.indexOf(btn); - if (index >= 0) { - if (type == 0) { - pix = pixNormal.at(index); - } else if (type == 1) { - pix = pixHover.at(index); - } else if (type == 2) { - pix = pixPressed.at(index); - } else if (type == 3) { - pix = pixChecked.at(index); - } + QList list; + foreach (QToolButton *btn, btns) { + list << btn; } - return pix; + setStyle(widget, list, icons, styleColor); } -void IconHelper::setStyle(QFrame *frame, QList btns, QList icons, - quint32 iconSize, quint32 iconWidth, quint32 iconHeight, - const QString &normalBgColor, const QString &darkBgColor, - const QString &normalTextColor, const QString &darkTextColor) +void IconHelper::setStyle1(QWidget *widget, QList btns, QList icons, const IconHelper::StyleColor &styleColor) { int btnCount = btns.count(); - int charCount = icons.count(); - if (btnCount <= 0 || charCount <= 0 || btnCount != charCount) { + int iconCount = icons.count(); + if (btnCount <= 0 || iconCount <= 0 || btnCount != iconCount) { return; } - QStringList qss; - qss.append(QString("QFrame>QToolButton{border-style:none;border-width:0px;" - "background-color:%1;color:%2;}").arg(normalBgColor).arg(normalTextColor)); - qss.append(QString("QFrame>QToolButton:hover,QFrame>QToolButton:pressed,QFrame>QToolButton:checked" - "{background-color:%1;color:%2;}").arg(darkBgColor).arg(darkTextColor)); + QString position = styleColor.position; + quint32 iconSize = styleColor.iconSize; + quint32 iconWidth = styleColor.iconWidth; + quint32 iconHeight = styleColor.iconHeight; + quint32 borderWidth = styleColor.borderWidth; - frame->setStyleSheet(qss.join("")); - - //存储对应按钮对象,方便鼠标移上去的时候切换图片 - for (int i = 0; i < btnCount; i++) { - int icon = icons.at(i); - QPixmap pixNormal = getPixmap(normalTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixDark = getPixmap(darkTextColor, icon, iconSize, iconWidth, iconHeight); - - QToolButton *btn = btns.at(i); - btn->setIcon(QIcon(pixNormal)); - btn->setIconSize(QSize(iconWidth, iconHeight)); - btn->installEventFilter(this); - - this->btns.append(btn); - this->pixNormal.append(pixNormal); - this->pixDark.append(pixDark); - this->pixHover.append(pixDark); - this->pixPressed.append(pixDark); - this->pixChecked.append(pixDark); - } -} - -void IconHelper::setStyle(QWidget *widget, const QString &type, int borderWidth, const QString &borderColor, - const QString &normalBgColor, const QString &darkBgColor, - const QString &normalTextColor, const QString &darkTextColor) -{ + //根据不同的位置计算边框 QString strBorder; - if (type == "top") { + if (position == "top") { strBorder = QString("border-width:%1px 0px 0px 0px;padding-top:%1px;padding-bottom:%2px;") .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "right") { + } else if (position == "right") { strBorder = QString("border-width:0px %1px 0px 0px;padding-right:%1px;padding-left:%2px;") .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "bottom") { + } else if (position == "bottom") { strBorder = QString("border-width:0px 0px %1px 0px;padding-bottom:%1px;padding-top:%2px;") .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "left") { + } else if (position == "left") { strBorder = QString("border-width:0px 0px 0px %1px;padding-left:%1px;padding-right:%2px;") .arg(borderWidth).arg(borderWidth * 2); } + //如果图标是左侧显示则需要让没有选中的按钮左侧也有加深的边框,颜色为背景颜色 QStringList qss; - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:none;border-radius:0px;padding:5px;" - "color:%2;background:%3;}").arg(type).arg(normalTextColor).arg(normalBgColor)); + if (styleColor.textBesideIcon) { + qss << QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:solid;border-radius:0px;%2border-color:%3;color:%4;background:%5;}") + .arg(position).arg(strBorder).arg(styleColor.normalBgColor).arg(styleColor.normalTextColor).arg(styleColor.normalBgColor); + } else { + qss << QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:none;border-radius:0px;padding:5px;color:%2;background:%3;}") + .arg(position).arg(styleColor.normalTextColor).arg(styleColor.normalBgColor); + } - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:hover," - "QWidget[flag=\"%1\"] QAbstractButton:pressed," - "QWidget[flag=\"%1\"] QAbstractButton:checked{" - "border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(borderColor).arg(darkTextColor).arg(darkBgColor)); + //悬停+按下+选中 + qss << QString("QWidget[flag=\"%1\"] QAbstractButton:hover{border-style:solid;%2border-color:%3;color:%4;background:%5;}") + .arg(position).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.hoverTextColor).arg(styleColor.hoverBgColor); + qss << QString("QWidget[flag=\"%1\"] QAbstractButton:pressed{border-style:solid;%2border-color:%3;color:%4;background:%5;}") + .arg(position).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.pressedTextColor).arg(styleColor.pressedBgColor); + qss << QString("QWidget[flag=\"%1\"] QAbstractButton:checked{border-style:solid;%2border-color:%3;color:%4;background:%5;}") + .arg(position).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.checkedTextColor).arg(styleColor.checkedBgColor); + //窗体背景颜色+按钮背景颜色 + qss << QString("QWidget#%1{background:%2;}") + .arg(widget->objectName()).arg(styleColor.normalBgColor); + qss << QString("QWidget>QAbstractButton{border-width:0px;background-color:%1;color:%2;}") + .arg(styleColor.normalBgColor).arg(styleColor.normalTextColor); + qss << QString("QWidget>QAbstractButton:hover{background-color:%1;color:%2;}") + .arg(styleColor.hoverBgColor).arg(styleColor.hoverTextColor); + qss << QString("QWidget>QAbstractButton:pressed{background-color:%1;color:%2;}") + .arg(styleColor.pressedBgColor).arg(styleColor.pressedTextColor); + qss << QString("QWidget>QAbstractButton:checked{background-color:%1;color:%2;}") + .arg(styleColor.checkedBgColor).arg(styleColor.checkedTextColor); + + //设置样式表 widget->setStyleSheet(qss.join("")); -} -void IconHelper::removeStyle(QList btns) -{ - for (int i = 0; i < btns.count(); i++) { + //可能会重复调用设置所以先要移除上一次的 + for (int i = 0; i < btnCount; i++) { for (int j = 0; j < this->btns.count(); j++) { if (this->btns.at(j) == btns.at(i)) { + disconnect(btns.at(i), SIGNAL(toggled(bool)), this, SLOT(toggled(bool))); this->btns.at(j)->removeEventFilter(this); this->btns.removeAt(j); this->pixNormal.removeAt(j); - this->pixDark.removeAt(j); this->pixHover.removeAt(j); this->pixPressed.removeAt(j); this->pixChecked.removeAt(j); @@ -193,174 +316,36 @@ void IconHelper::removeStyle(QList btns) } } } -} - -void IconHelper::setStyle(QWidget *widget, QList btns, QList icons, - quint32 iconSize, quint32 iconWidth, quint32 iconHeight, - const QString &type, int borderWidth, const QString &borderColor, - const QString &normalBgColor, const QString &darkBgColor, - const QString &normalTextColor, const QString &darkTextColor) -{ - int btnCount = btns.count(); - int charCount = icons.count(); - if (btnCount <= 0 || charCount <= 0 || btnCount != charCount) { - return; - } - - QString strBorder; - if (type == "top") { - strBorder = QString("border-width:%1px 0px 0px 0px;padding-top:%1px;padding-bottom:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "right") { - strBorder = QString("border-width:0px %1px 0px 0px;padding-right:%1px;padding-left:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "bottom") { - strBorder = QString("border-width:0px 0px %1px 0px;padding-bottom:%1px;padding-top:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "left") { - strBorder = QString("border-width:0px 0px 0px %1px;padding-left:%1px;padding-right:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } - - //如果图标是左侧显示则需要让没有选中的按钮左侧也有加深的边框,颜色为背景颜色 - QStringList qss; - if (btns.at(0)->toolButtonStyle() == Qt::ToolButtonTextBesideIcon) { - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:solid;border-radius:0px;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(normalBgColor).arg(normalTextColor).arg(normalBgColor)); - } else { - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:none;border-radius:0px;padding:5px;color:%2;background:%3;}") - .arg(type).arg(normalTextColor).arg(normalBgColor)); - } - - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:hover," - "QWidget[flag=\"%1\"] QAbstractButton:pressed," - "QWidget[flag=\"%1\"] QAbstractButton:checked{" - "border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(borderColor).arg(darkTextColor).arg(darkBgColor)); - - qss.append(QString("QWidget#%1{background:%2;}").arg(widget->objectName()).arg(normalBgColor)); - qss.append(QString("QWidget>QToolButton{border-width:0px;" - "background-color:%1;color:%2;}").arg(normalBgColor).arg(normalTextColor)); - qss.append(QString("QWidget>QToolButton:hover,QWidget>QToolButton:pressed,QWidget>QToolButton:checked{" - "background-color:%1;color:%2;}").arg(darkBgColor).arg(darkTextColor)); - - widget->setStyleSheet(qss.join("")); //存储对应按钮对象,方便鼠标移上去的时候切换图片 + int checkedIndex = -1; for (int i = 0; i < btnCount; i++) { int icon = icons.at(i); - QPixmap pixNormal = getPixmap(normalTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixDark = getPixmap(darkTextColor, icon, iconSize, iconWidth, iconHeight); + QPixmap pixNormal = getPixmap1(styleColor.normalTextColor, icon, iconSize, iconWidth, iconHeight); + QPixmap pixHover = getPixmap1(styleColor.hoverTextColor, icon, iconSize, iconWidth, iconHeight); + QPixmap pixPressed = getPixmap1(styleColor.pressedTextColor, icon, iconSize, iconWidth, iconHeight); + QPixmap pixChecked = getPixmap1(styleColor.checkedTextColor, icon, iconSize, iconWidth, iconHeight); - QToolButton *btn = btns.at(i); - btn->setIcon(QIcon(pixNormal)); - btn->setIconSize(QSize(iconWidth, iconHeight)); - btn->installEventFilter(this); - - this->btns.append(btn); - this->pixNormal.append(pixNormal); - this->pixDark.append(pixDark); - this->pixHover.append(pixDark); - this->pixPressed.append(pixDark); - this->pixChecked.append(pixDark); - } -} - -void IconHelper::setStyle(QWidget *widget, QList btns, QList icons, const IconHelper::StyleColor &styleColor) -{ - int btnCount = btns.count(); - int charCount = icons.count(); - if (btnCount <= 0 || charCount <= 0 || btnCount != charCount) { - return; - } - - quint32 iconSize = styleColor.iconSize; - quint32 iconWidth = styleColor.iconWidth; - quint32 iconHeight = styleColor.iconHeight; - quint32 borderWidth = styleColor.borderWidth; - QString type = styleColor.type; - - QString strBorder; - if (type == "top") { - strBorder = QString("border-width:%1px 0px 0px 0px;padding-top:%1px;padding-bottom:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "right") { - strBorder = QString("border-width:0px %1px 0px 0px;padding-right:%1px;padding-left:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "bottom") { - strBorder = QString("border-width:0px 0px %1px 0px;padding-bottom:%1px;padding-top:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } else if (type == "left") { - strBorder = QString("border-width:0px 0px 0px %1px;padding-left:%1px;padding-right:%2px;") - .arg(borderWidth).arg(borderWidth * 2); - } - - //如果图标是左侧显示则需要让没有选中的按钮左侧也有加深的边框,颜色为背景颜色 - QStringList qss; - if (btns.at(0)->toolButtonStyle() == Qt::ToolButtonTextBesideIcon) { - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:solid;border-radius:0px;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(styleColor.normalBgColor).arg(styleColor.normalTextColor).arg(styleColor.normalBgColor)); - } else { - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton{border-style:none;border-radius:0px;padding:5px;color:%2;background:%3;}") - .arg(type).arg(styleColor.normalTextColor).arg(styleColor.normalBgColor)); - } - - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:hover{border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.hoverTextColor).arg(styleColor.hoverBgColor)); - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:pressed{border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.pressedTextColor).arg(styleColor.pressedBgColor)); - qss.append(QString("QWidget[flag=\"%1\"] QAbstractButton:checked{border-style:solid;%2border-color:%3;color:%4;background:%5;}") - .arg(type).arg(strBorder).arg(styleColor.borderColor).arg(styleColor.checkedTextColor).arg(styleColor.checkedBgColor)); - - qss.append(QString("QWidget#%1{background:%2;}").arg(widget->objectName()).arg(styleColor.normalBgColor)); - qss.append(QString("QWidget>QToolButton{border-width:0px;background-color:%1;color:%2;}").arg(styleColor.normalBgColor).arg(styleColor.normalTextColor)); - qss.append(QString("QWidget>QToolButton:hover{background-color:%1;color:%2;}").arg(styleColor.hoverBgColor).arg(styleColor.hoverTextColor)); - qss.append(QString("QWidget>QToolButton:pressed{background-color:%1;color:%2;}").arg(styleColor.pressedBgColor).arg(styleColor.pressedTextColor)); - qss.append(QString("QWidget>QToolButton:checked{background-color:%1;color:%2;}").arg(styleColor.checkedBgColor).arg(styleColor.checkedTextColor)); - - widget->setStyleSheet(qss.join("")); - - //存储对应按钮对象,方便鼠标移上去的时候切换图片 - for (int i = 0; i < btnCount; i++) { - int icon = icons.at(i); - QPixmap pixNormal = getPixmap(styleColor.normalTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixHover = getPixmap(styleColor.hoverTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixPressed = getPixmap(styleColor.pressedTextColor, icon, iconSize, iconWidth, iconHeight); - QPixmap pixChecked = getPixmap(styleColor.checkedTextColor, icon, iconSize, iconWidth, iconHeight); - - QToolButton *btn = btns.at(i); - btn->setIcon(QIcon(pixNormal)); - btn->setIconSize(QSize(iconWidth, iconHeight)); - btn->installEventFilter(this); - - this->btns.append(btn); - this->pixNormal.append(pixNormal); - this->pixDark.append(pixHover); - this->pixHover.append(pixHover); - this->pixPressed.append(pixPressed); - this->pixChecked.append(pixChecked); - } -} - -bool IconHelper::eventFilter(QObject *watched, QEvent *event) -{ - if (watched->inherits("QToolButton")) { - QToolButton *btn = (QToolButton *)watched; - int index = btns.indexOf(btn); - if (index >= 0) { - if (event->type() == QEvent::Enter) { - btn->setIcon(QIcon(pixHover.at(index))); - } else if (event->type() == QEvent::MouseButtonPress) { - btn->setIcon(QIcon(pixPressed.at(index))); - } else if (event->type() == QEvent::Leave) { - if (btn->isChecked()) { - btn->setIcon(QIcon(pixChecked.at(index))); - } else { - btn->setIcon(QIcon(pixNormal.at(index))); - } - } + //记住最后选中的按钮 + QAbstractButton *btn = btns.at(i); + if (btn->isChecked()) { + checkedIndex = i; } + + btn->setIcon(QIcon(pixNormal)); + btn->setIconSize(QSize(iconWidth, iconHeight)); + btn->installEventFilter(this); + connect(btn, SIGNAL(toggled(bool)), this, SLOT(toggled(bool))); + + this->btns << btn; + this->pixNormal << pixNormal; + this->pixHover << pixHover; + this->pixPressed << pixPressed; + this->pixChecked << pixChecked; } - return QObject::eventFilter(watched, event); + //主动触发一下选中的按钮 + if (checkedIndex >= 0) { + QMetaObject::invokeMethod(btns.at(checkedIndex), "toggled", Q_ARG(bool, true)); + } } diff --git a/navbutton/iconhelper.h b/navbutton/iconhelper.h index 28931ba..22c930d 100644 --- a/navbutton/iconhelper.h +++ b/navbutton/iconhelper.h @@ -1,12 +1,20 @@ #ifndef ICONHELPER_H #define ICONHELPER_H -#include #include #if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) #include #endif +/** + * 超级图形字体类 作者:feiyangqingyun(QQ:517216493) 2016-11-23 + * 1. 可传入多种图形字体文件 + * 2. 可设置 QLabel+QAbstractButton 图形字体 + * 3. 可设置按钮图标 + * 4. 可获取指定尺寸的图形字体图片 + * 5. 超级导航栏样式设置,带图标和效果切换+悬停颜色+按下颜色+选中颜色 + */ + #ifdef quc class Q_DECL_EXPORT IconHelper : public QObject #else @@ -17,78 +25,38 @@ class IconHelper : public QObject Q_OBJECT public: - static IconHelper *Instance(); - explicit IconHelper(QObject *parent = 0); - - //获取图形字体 - QFont getIconFont(); - - //设置图形字体到标签 - void setIcon(QLabel *lab, int icon, quint32 size = 12); - //设置图形字体到按钮 - void setIcon(QAbstractButton *btn, int icon, quint32 size = 12); - - //获取指定图形字体,可以指定文字大小,图片宽高,文字对齐 - QPixmap getPixmap(const QColor &color, int icon, quint32 size = 12, - quint32 pixWidth = 15, quint32 pixHeight = 15, - int flags = Qt::AlignCenter); - - //根据按钮获取该按钮对应的图标 - QPixmap getPixmap(QToolButton *btn, bool normal); - QPixmap getPixmap(QToolButton *btn, int type); - - //指定QFrame导航按钮样式,带图标 - void setStyle(QFrame *frame, QList btns, QList icons, - quint32 iconSize = 12, quint32 iconWidth = 15, quint32 iconHeight = 15, - const QString &normalBgColor = "#2FC5A2", - const QString &darkBgColor = "#3EA7E9", - const QString &normalTextColor = "#EEEEEE", - const QString &darkTextColor = "#FFFFFF"); - - //指定导航面板样式,不带图标 - static void setStyle(QWidget *widget, const QString &type = "left", int borderWidth = 3, - const QString &borderColor = "#029FEA", - const QString &normalBgColor = "#292F38", - const QString &darkBgColor = "#1D2025", - const QString &normalTextColor = "#54626F", - const QString &darkTextColor = "#FDFDFD"); - - //移除导航面板样式,防止重复 - void removeStyle(QList btns); - - //指定QWidget导航面板样式,带图标和效果切换 - void setStyle(QWidget *widget, QList btns, QList icons, - quint32 iconSize = 12, quint32 iconWidth = 15, quint32 iconHeight = 15, - const QString &type = "left", int borderWidth = 3, - const QString &borderColor = "#029FEA", - const QString &normalBgColor = "#292F38", - const QString &darkBgColor = "#1D2025", - const QString &normalTextColor = "#54626F", - const QString &darkTextColor = "#FDFDFD"); - + //样式颜色结构体 struct StyleColor { - quint32 iconSize; - quint32 iconWidth; - quint32 iconHeight; - quint32 borderWidth; - QString type; - QString borderColor; - QString normalBgColor; - QString normalTextColor; - QString hoverBgColor; - QString hoverTextColor; - QString pressedBgColor; - QString pressedTextColor; - QString checkedBgColor; - QString checkedTextColor; + QString position; //位置 left right top bottom + bool textBesideIcon; //文字在图标左侧 + + quint32 iconSize; //图标字体尺寸 + quint32 iconWidth; //图标图片宽度 + quint32 iconHeight; //图标图片高度 + + quint32 borderWidth; //边框宽度 + QString borderColor; //边框颜色 + + QString normalBgColor; //正常背景颜色 + QString normalTextColor; //正常文字颜色 + QString hoverBgColor; //悬停背景颜色 + QString hoverTextColor; //悬停文字颜色 + QString pressedBgColor; //按下背景颜色 + QString pressedTextColor; //按下文字颜色 + QString checkedBgColor; //选中背景颜色 + QString checkedTextColor; //选中文字颜色 StyleColor() { + position = "left"; + textBesideIcon = false; + iconSize = 12; iconWidth = 15; iconHeight = 15; + borderWidth = 3; - type = "left"; borderColor = "#029FEA"; + normalBgColor = "#292F38"; normalTextColor = "#54626F"; hoverBgColor = "#40444D"; @@ -98,24 +66,83 @@ public: checkedBgColor = "#44494F"; checkedTextColor = "#FDFDFD"; } + + //设置常规颜色 普通状态+加深状态 + void setColor(const QString &normalBgColor, + const QString &normalTextColor, + const QString &darkBgColor, + const QString &darkTextColor) { + this->normalBgColor = normalBgColor; + this->normalTextColor = normalTextColor; + this->hoverBgColor = darkBgColor; + this->hoverTextColor = darkTextColor; + this->pressedBgColor = darkBgColor; + this->pressedTextColor = darkTextColor; + this->checkedBgColor = darkBgColor; + this->checkedTextColor = darkTextColor; + } }; - //指定QWidget导航面板样式,带图标和效果切换+悬停颜色+按下颜色+选中颜色 - void setStyle(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + //阿里巴巴图形字体类 + static IconHelper *iconFontAliBaBa; + //FontAwesome图形字体类 + static IconHelper *iconFontAwesome; + //初始化图形字体 + static void initFont(); + + static void setIcon(QLabel *lab, int icon, quint32 size = 12); + static void setIcon(QAbstractButton *btn, int icon, quint32 size = 12); + + static void setPixmap(QAbstractButton *btn, const QColor &color, + int icon, quint32 size = 12, + quint32 width = 15, quint32 height = 15, + int flags = Qt::AlignCenter); + static QPixmap getPixmap(const QColor &color, int icon, quint32 size = 12, + quint32 width = 15, quint32 height = 15, + int flags = Qt::AlignCenter); + + static void setStyle(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + static void setStyle(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + static void setStyle(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + + //默认构造函数,传入字体文件+字体名称 + explicit IconHelper(const QString &fontFile, const QString &fontName, QObject *parent = 0); protected: bool eventFilter(QObject *watched, QEvent *event); private: - static QScopedPointer self; + QFont iconFont; //图形字体 + QList btns; //按钮队列 + QList pixNormal; //正常图片队列 + QList pixHover; //悬停图片队列 + QList pixPressed; //按下图片队列 + QList pixChecked; //选中图片队列 - QFont iconFont; //图形字体 - QList btns; //按钮队列 - QList pixNormal; //正常图片队列 - QList pixDark; //加深图片队列 - QList pixHover; //悬停图片队列 - QList pixPressed; //按下图片队列 - QList pixChecked; //选中图片队列 +private slots: + //按钮选中状态切换处理 + void toggled(bool checked); + +public: + //设置图形字体到标签 + void setIcon1(QLabel *lab, int icon, quint32 size = 12); + //设置图形字体到按钮 + void setIcon1(QAbstractButton *btn, int icon, quint32 size = 12); + + //设置图形字体到图标 + void setPixmap1(QAbstractButton *btn, const QColor &color, + int icon, quint32 size = 12, + quint32 width = 15, quint32 height = 15, + int flags = Qt::AlignCenter); + //获取指定图形字体,可以指定文字大小,图片宽高,文字对齐 + QPixmap getPixmap1(const QColor &color, int icon, quint32 size = 12, + quint32 width = 15, quint32 height = 15, + int flags = Qt::AlignCenter); + + //指定导航面板样式,带图标和效果切换+悬停颜色+按下颜色+选中颜色 + void setStyle1(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + void setStyle1(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); + void setStyle1(QWidget *widget, QList btns, QList icons, const StyleColor &styleColor); }; #endif // ICONHELPER_H