新增超级图形字体
This commit is contained in:
403
ui/iconhelper/frmiconhelper.cpp
Normal file
403
ui/iconhelper/frmiconhelper.cpp
Normal file
@@ -0,0 +1,403 @@
|
||||
#pragma execution_character_set("utf-8")
|
||||
|
||||
#include "frmiconhelper.h"
|
||||
#include "ui_frmiconhelper.h"
|
||||
#include "iconhelper.cpp"
|
||||
|
||||
frmIconHelper::frmIconHelper(QWidget *parent) : QWidget(parent), ui(new Ui::frmIconHelper)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->initForm();
|
||||
this->initWidget1();
|
||||
this->initWidget2();
|
||||
this->initWidget3();
|
||||
this->initWidget4();
|
||||
this->initWidget5();
|
||||
this->initWidget6();
|
||||
QTimer::singleShot(100, this, SLOT(initPanel()));
|
||||
}
|
||||
|
||||
frmIconHelper::~frmIconHelper()
|
||||
{
|
||||
delete ui;
|
||||
}
|
||||
|
||||
bool frmIconHelper::eventFilter(QObject *watched, QEvent *event)
|
||||
{
|
||||
if (event->type() == QEvent::Enter) {
|
||||
QLabel *lab = (QLabel *)watched;
|
||||
if (lab != 0) {
|
||||
//由于有图形字体的范围值冲突需要手动切换索引
|
||||
if (ui->rbtnFontWeather->isChecked()) {
|
||||
IconHelper::iconFontIndex = 2;
|
||||
} else {
|
||||
IconHelper::iconFontIndex = -1;
|
||||
}
|
||||
|
||||
//对应图形字体的16进制值已经赋值给了 toolTip
|
||||
QString value = lab->toolTip();
|
||||
ui->labValue->setText(value);
|
||||
int icon = value.toInt(NULL, 16);
|
||||
|
||||
IconHelper::setIcon(ui->labIcon, icon, iconSize);
|
||||
IconHelper::setIcon(ui->btnIcon, icon, iconSize);
|
||||
|
||||
//万能大法直接从指定标识获取图片文件
|
||||
QPixmap pix = IconHelper::getPixmap("#753775", icon, iconSize, iconSize, iconSize);
|
||||
ui->labImage->setPixmap(pix);
|
||||
|
||||
//设置图标 以下方法二选一都可以
|
||||
//ui->btnImage->setIcon(QIcon(pix));
|
||||
IconHelper::setPixmap(ui->btnImage, "#FD8B28", icon, iconSize, iconSize, iconSize);
|
||||
|
||||
//取出对应图形字体类
|
||||
QFont font = IconHelper::getIconFontAwesome();
|
||||
if (ui->rbtnFontAliBaBa->isChecked()) {
|
||||
font = IconHelper::getIconFontAliBaBa();
|
||||
} else if (ui->rbtnFontWeather->isChecked()) {
|
||||
font = IconHelper::getIconFontWeather();
|
||||
}
|
||||
|
||||
//直接设置图标+文本到按钮
|
||||
font.setPixelSize(15);
|
||||
ui->btnTest1->setFont(font);
|
||||
ui->btnTest1->setText(QString("%1 测试图标").arg((QChar)icon));
|
||||
|
||||
//分别设置图标+文本到按钮
|
||||
ui->btnTest2->setIcon(QIcon(pix));
|
||||
}
|
||||
}
|
||||
|
||||
return QWidget::eventFilter(watched, event);
|
||||
}
|
||||
|
||||
void frmIconHelper::initForm()
|
||||
{
|
||||
iconSize = 40;
|
||||
//图标对应图形字体值
|
||||
icons << 0xf2ba << 0xf002 << 0xf013 << 0xf021;
|
||||
|
||||
//设置样式表
|
||||
QStringList qss;
|
||||
qss << QString("#labIcon{color:#32B9CF;}");
|
||||
qss << QString("#btnIcon{color:#C13256;}");
|
||||
qss << QString("#labValue,#labCount,#labInfo1,#labInfo2,#labInfo3,#labInfo4{font-weight:bold;font-size:20px;}");
|
||||
qss << QString("QWidget#widget1 QAbstractButton{min-height:%1px;max-height:%1px;}").arg(35);
|
||||
qss << QString("QWidget#widget2 QAbstractButton{min-height:%1px;max-height:%1px;}").arg(35);
|
||||
qss << QString("QWidget#widget3 QAbstractButton{min-height:%1px;max-height:%1px;}").arg(70);
|
||||
qss << QString("QWidget#widget4 QAbstractButton{min-height:%1px;max-height:%1px;}").arg(70);
|
||||
qss << QString("QWidget#widget5 QAbstractButton{min-width:%1px;max-width:%1px;}").arg(90);
|
||||
qss << QString("QWidget#widget6 QAbstractButton{min-width:%1px;max-width:%1px;}").arg(90);
|
||||
this->setStyleSheet(qss.join(""));
|
||||
|
||||
//设置图形字体
|
||||
IconHelper::setIcon(ui->labIcon, 0xf067, iconSize);
|
||||
IconHelper::setIcon(ui->btnIcon, 0xf067, iconSize);
|
||||
QPixmap pix = IconHelper::getPixmap("#753775", 0xf067, iconSize, iconSize, iconSize);
|
||||
ui->labImage->setPixmap(pix);
|
||||
ui->btnImage->setIconSize(QSize(iconSize, iconSize));
|
||||
ui->btnImage->setIcon(QIcon(pix));
|
||||
|
||||
//关联单选框切换
|
||||
connect(ui->rbtnFontAliBaBa, SIGNAL(toggled(bool)), this, SLOT(toggled(bool)));
|
||||
connect(ui->rbtnFontAwesome, SIGNAL(toggled(bool)), this, SLOT(toggled(bool)));
|
||||
connect(ui->rbtnFontWeather, SIGNAL(toggled(bool)), this, SLOT(toggled(bool)));
|
||||
|
||||
ui->tabWidget->setCurrentIndex(0);
|
||||
}
|
||||
|
||||
void frmIconHelper::initPanel()
|
||||
{
|
||||
//清空原有对象
|
||||
qDeleteAll(labs);
|
||||
labs.clear();
|
||||
|
||||
//选择不同的图形字体
|
||||
int start = 0xf000;
|
||||
int end = 0xf2e0;
|
||||
QFont iconFont = IconHelper::getIconFontAwesome();
|
||||
IconHelper::iconFontIndex = -1;
|
||||
if (ui->rbtnFontAliBaBa->isChecked()) {
|
||||
start = 0xe500;
|
||||
end = 0xea5d;
|
||||
iconFont = IconHelper::getIconFontAliBaBa();
|
||||
} else if (ui->rbtnFontWeather->isChecked()) {
|
||||
start = 0xe900;
|
||||
end = 0xe9cf;
|
||||
iconFont = IconHelper::getIconFontWeather();
|
||||
IconHelper::iconFontIndex = 2;
|
||||
}
|
||||
|
||||
//设置字体大小
|
||||
iconFont.setPixelSize(15);
|
||||
|
||||
//加载图形字体面板
|
||||
QStringList list;
|
||||
for (int icon = start; icon <= end; icon++) {
|
||||
//阿里巴巴图形字体中间有一段是空的,可以自行屏蔽下面这段代码查看这段空的值对应的文字
|
||||
if (ui->rbtnFontAliBaBa->isChecked()) {
|
||||
if (icon >= 0xe76c && icon <= 0xe8f8) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
QString tip = "0x" + QString::number(icon, 16);
|
||||
if (!checkIcon(icon)) {
|
||||
list << tip;
|
||||
continue;
|
||||
}
|
||||
|
||||
QLabel *lab = new QLabel;
|
||||
lab->installEventFilter(this);
|
||||
lab->setAlignment(Qt::AlignCenter);
|
||||
lab->setFont(iconFont);
|
||||
lab->setText((QChar)icon);
|
||||
lab->setToolTip(tip);
|
||||
lab->setMinimumSize(30, 30);
|
||||
labs << lab;
|
||||
}
|
||||
|
||||
//qDebug() << "no text font" << list.count() << list;
|
||||
ui->widgetFontPanel->setAutoWidth(true);
|
||||
ui->widgetFontPanel->setMargin(3);
|
||||
ui->widgetFontPanel->setSpace(3);
|
||||
ui->widgetFontPanel->setColumnCount(18);
|
||||
ui->widgetFontPanel->setWidgets(labs);
|
||||
|
||||
//设置图形字体面板鼠标悬停时的效果
|
||||
QString qss = QString("QLabel:hover,QLabel:focus{color:%1;border:1px solid %1;}").arg("#00BB9E");
|
||||
ui->widgetFontPanel->setStyleSheet(qss);
|
||||
|
||||
int count = end - start + 1;
|
||||
ui->labCount->setText(QString("%1/%2").arg(labs.count()).arg(count));
|
||||
}
|
||||
|
||||
bool frmIconHelper::checkIcon(int icon)
|
||||
{
|
||||
//从图形字体对应值生成一个指定颜色的图片
|
||||
QPixmap pix = IconHelper::getPixmap("#FF0000", icon, 120, 120, 120);
|
||||
QImage img = pix.toImage();
|
||||
int width = img.width();
|
||||
int height = img.height();
|
||||
|
||||
//过滤不存在的图形字体
|
||||
//对该图片逐个扫描像素点,都是空白则意味着当前图形字体不存在
|
||||
for (int i = 0; i < height; i++) {
|
||||
uchar *lineByte = img.scanLine(i);
|
||||
for (int j = 0; j < width; j++) {
|
||||
uchar tp = lineByte[j];
|
||||
if (tp > 0x00) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//保存下图片看下
|
||||
//QString fileName = QString("%1/icon/%2.jpg").arg(qApp->applicationDirPath()).arg(icon);
|
||||
//pix.save(fileName, "jpg");
|
||||
return false;
|
||||
}
|
||||
|
||||
void frmIconHelper::toggled(bool checked)
|
||||
{
|
||||
//单选框按下后自动重新加载对应的图形字体
|
||||
if (checked) {
|
||||
initPanel();
|
||||
}
|
||||
}
|
||||
|
||||
void frmIconHelper::initBtn(QButtonGroup *btnGroup, bool textBesideIcon)
|
||||
{
|
||||
QList<QAbstractButton *> btns = btnGroup->buttons();
|
||||
foreach (QAbstractButton *btn, btns) {
|
||||
QToolButton *b = (QToolButton *)btn;
|
||||
//关联按钮单击事件
|
||||
connect(b, SIGNAL(clicked(bool)), this, SLOT(btnClicked()));
|
||||
b->setCheckable(true);
|
||||
b->setToolButtonStyle(textBesideIcon ? Qt::ToolButtonTextBesideIcon : Qt::ToolButtonTextUnderIcon);
|
||||
}
|
||||
}
|
||||
|
||||
void frmIconHelper::btnClicked()
|
||||
{
|
||||
QAbstractButton *btn = (QAbstractButton *)sender();
|
||||
QString objName = btn->parent()->objectName();
|
||||
if (objName == "widget1") {
|
||||
ui->labInfo1->setText(btn->text());
|
||||
} else if (objName == "widget2") {
|
||||
ui->labInfo2->setText(btn->text());
|
||||
} else if (objName == "widget3") {
|
||||
ui->labInfo3->setText(btn->text());
|
||||
} else if (objName == "widget4") {
|
||||
ui->labInfo4->setText(btn->text());
|
||||
}
|
||||
}
|
||||
|
||||
void frmIconHelper::initWidget1()
|
||||
{
|
||||
//加入按钮组自动互斥
|
||||
QButtonGroup *btnGroup = new QButtonGroup(this);
|
||||
btnGroup->addButton(ui->btn11);
|
||||
btnGroup->addButton(ui->btn12);
|
||||
btnGroup->addButton(ui->btn13);
|
||||
btnGroup->addButton(ui->btn14);
|
||||
|
||||
//设置按钮可选中以及图标样式
|
||||
initBtn(btnGroup, true);
|
||||
//设置弱属性以便应用样式
|
||||
ui->widget1->setProperty("flag", "left");
|
||||
|
||||
IconHelper::StyleColor styleColor;
|
||||
styleColor.defaultBorder = true;
|
||||
styleColor.position = "left";
|
||||
styleColor.iconSize = 18;
|
||||
styleColor.iconWidth = 30;
|
||||
styleColor.iconHeight = 25;
|
||||
styleColor.borderWidth = 4;
|
||||
IconHelper::setStyle(ui->widget1, btnGroup->buttons(), icons, styleColor);
|
||||
|
||||
//默认选中某个按钮
|
||||
ui->btn11->click();
|
||||
}
|
||||
|
||||
void frmIconHelper::initWidget2()
|
||||
{
|
||||
//加入按钮组自动互斥
|
||||
QButtonGroup *btnGroup = new QButtonGroup(this);
|
||||
btnGroup->addButton(ui->btn21);
|
||||
btnGroup->addButton(ui->btn22);
|
||||
btnGroup->addButton(ui->btn23);
|
||||
btnGroup->addButton(ui->btn24);
|
||||
|
||||
//设置按钮可选中以及图标样式
|
||||
initBtn(btnGroup, true);
|
||||
//设置弱属性以便应用样式
|
||||
ui->widget2->setProperty("flag", "right");
|
||||
|
||||
IconHelper::StyleColor styleColor;
|
||||
styleColor.defaultBorder = true;
|
||||
styleColor.position = "right";
|
||||
styleColor.iconSize = 18;
|
||||
styleColor.iconWidth = 25;
|
||||
styleColor.iconHeight = 20;
|
||||
styleColor.borderWidth = 4;
|
||||
styleColor.borderColor = "#32B9CF";
|
||||
styleColor.setColor("#187294", "#B6D7E3", "#145C75", "#F0F0F0");
|
||||
IconHelper::setStyle(ui->widget2, btnGroup->buttons(), icons, styleColor);
|
||||
|
||||
//默认选中某个按钮
|
||||
ui->btn22->click();
|
||||
}
|
||||
|
||||
void frmIconHelper::initWidget3()
|
||||
{
|
||||
//加入按钮组自动互斥
|
||||
QButtonGroup *btnGroup = new QButtonGroup(this);
|
||||
btnGroup->addButton(ui->btn31);
|
||||
btnGroup->addButton(ui->btn32);
|
||||
btnGroup->addButton(ui->btn33);
|
||||
btnGroup->addButton(ui->btn34);
|
||||
|
||||
//设置按钮可选中以及图标样式
|
||||
initBtn(btnGroup, false);
|
||||
//设置弱属性以便应用样式
|
||||
ui->widget3->setProperty("flag", "left");
|
||||
|
||||
IconHelper::StyleColor styleColor;
|
||||
styleColor.position = "left";
|
||||
styleColor.iconSize = 30;
|
||||
styleColor.iconWidth = 40;
|
||||
styleColor.iconHeight = 40;
|
||||
styleColor.borderWidth = 3;
|
||||
styleColor.borderColor = "#609EE9";
|
||||
IconHelper::setStyle(ui->widget3, btnGroup->buttons(), icons, styleColor);
|
||||
|
||||
//默认选中某个按钮
|
||||
ui->btn33->click();
|
||||
}
|
||||
|
||||
void frmIconHelper::initWidget4()
|
||||
{
|
||||
//加入按钮组自动互斥
|
||||
QButtonGroup *btnGroup = new QButtonGroup(this);
|
||||
btnGroup->addButton(ui->btn41);
|
||||
btnGroup->addButton(ui->btn42);
|
||||
btnGroup->addButton(ui->btn43);
|
||||
btnGroup->addButton(ui->btn44);
|
||||
|
||||
//设置按钮可选中以及图标样式
|
||||
initBtn(btnGroup, false);
|
||||
//设置弱属性以便应用样式
|
||||
ui->widget4->setProperty("flag", "right");
|
||||
|
||||
IconHelper::StyleColor styleColor;
|
||||
styleColor.position = "right";
|
||||
styleColor.iconSize = 30;
|
||||
styleColor.iconWidth = 40;
|
||||
styleColor.iconHeight = 40;
|
||||
styleColor.borderWidth = 3;
|
||||
styleColor.borderColor = "#F7AE13";
|
||||
styleColor.setColor("#FCDC97", "#54626F", "#FFF0BC", "#54626F");
|
||||
IconHelper::setStyle(ui->widget4, btnGroup->buttons(), icons, styleColor);
|
||||
|
||||
//默认选中某个按钮
|
||||
ui->btn44->click();
|
||||
}
|
||||
|
||||
void frmIconHelper::initWidget5()
|
||||
{
|
||||
//加入按钮组自动互斥
|
||||
QButtonGroup *btnGroup = new QButtonGroup(this);
|
||||
btnGroup->addButton(ui->btn51);
|
||||
btnGroup->addButton(ui->btn52);
|
||||
btnGroup->addButton(ui->btn53);
|
||||
btnGroup->addButton(ui->btn54);
|
||||
|
||||
//设置按钮可选中以及图标样式
|
||||
initBtn(btnGroup, false);
|
||||
//设置弱属性以便应用样式
|
||||
ui->widget5->setProperty("flag", "top");
|
||||
|
||||
//设置整体按钮组样式
|
||||
IconHelper::StyleColor styleColor;
|
||||
styleColor.defaultBorder = true;
|
||||
styleColor.position = "top";
|
||||
styleColor.iconSize = 25;
|
||||
styleColor.iconWidth = 25;
|
||||
styleColor.iconHeight = 25;
|
||||
styleColor.borderWidth = 3;
|
||||
IconHelper::setStyle(ui->widget5, btnGroup->buttons(), icons, styleColor);
|
||||
|
||||
//默认选中某个按钮
|
||||
ui->btn51->click();
|
||||
}
|
||||
|
||||
void frmIconHelper::initWidget6()
|
||||
{
|
||||
//加入按钮组自动互斥
|
||||
QButtonGroup *btnGroup = new QButtonGroup(this);
|
||||
btnGroup->addButton(ui->btn61);
|
||||
btnGroup->addButton(ui->btn62);
|
||||
btnGroup->addButton(ui->btn63);
|
||||
btnGroup->addButton(ui->btn64);
|
||||
|
||||
//设置按钮可选中以及图标样式
|
||||
initBtn(btnGroup, false);
|
||||
//设置弱属性以便应用样式
|
||||
ui->widget6->setProperty("flag", "bottom");
|
||||
|
||||
//设置整体按钮组样式
|
||||
IconHelper::StyleColor styleColor;
|
||||
styleColor.defaultBorder = true;
|
||||
styleColor.position = "bottom";
|
||||
styleColor.iconSize = 25;
|
||||
styleColor.iconWidth = 25;
|
||||
styleColor.iconHeight = 25;
|
||||
styleColor.borderWidth = 3;
|
||||
styleColor.borderColor = "#A279C5";
|
||||
styleColor.setColor("#292929", "#B6D7E3", "#10689A", "#F0F0F0");
|
||||
IconHelper::setStyle(ui->widget6, btnGroup->buttons(), icons, styleColor);
|
||||
|
||||
//默认选中某个按钮
|
||||
ui->btn63->click();
|
||||
}
|
||||
Reference in New Issue
Block a user