diff --git a/README.md b/README.md index ee34d8f..6db9aef 100644 --- a/README.md +++ b/README.md @@ -11,3 +11,5 @@ 7. nettool 网络调试助手 8. devicesizetable 硬盘容量控件 9. styledemo qss 高仿PS黑色+扁平白色+淡蓝色风格主题 +10. navbutton 导航按钮控件 +11. video_splite 视频监控画面分割demo diff --git a/navbutton/frmnavbutton.cpp b/navbutton/frmnavbutton.cpp new file mode 100644 index 0000000..2d9e2e1 --- /dev/null +++ b/navbutton/frmnavbutton.cpp @@ -0,0 +1,367 @@ +#pragma execution_character_set("utf-8") + +#include "frmnavbutton.h" +#include "ui_frmnavbutton.h" +#include "navbutton.h" +#include "iconhelper.h" +#include "qdebug.h" + +frmNavButton::frmNavButton(QWidget *parent) : QWidget(parent), ui(new Ui::frmNavButton) +{ + ui->setupUi(this); + this->initForm(); +} + +frmNavButton::~frmNavButton() +{ + delete ui; +} + +void frmNavButton::initForm() +{ + quint32 size = 15; + quint32 pixWidth = 15; + quint32 pixHeight = 15; + + //从图形字体获得图片,也可以从资源文件或者路径文件获取 + QChar 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); + + btns1 << ui->navButton11 << ui->navButton12 << ui->navButton13 << ui->navButton14; + for (int i = 0; i < btns1.count(); i++) { + NavButton *btn = btns1.at(i); + btn->setPaddingLeft(32); + btn->setLineSpace(6); + + btn->setShowIcon(true); + btn->setIconSpace(15); + btn->setIconSize(QSize(10, 10)); + btn->setIconNormal(iconNormal); + btn->setIconHover(iconHover); + btn->setIconCheck(iconCheck); + + connect(btn, SIGNAL(clicked(bool)), this, SLOT(buttonClick1())); + } + + size = 15; + pixWidth = 20; + pixHeight = 20; + + QList pixChar; + pixChar << 0xf17b << 0xf002 << 0xf013 << 0xf021 << 0xf0e0 << 0xf135; + QColor normalBgColor = QColor("#2D9191"); + QColor hoverBgColor = QColor("#187294"); + QColor checkBgColor = QColor("#145C75"); + QColor normalTextColor = QColor("#FFFFFF"); + QColor hoverTextColor = QColor("#FFFFFF"); + QColor checkTextColor = QColor("#FFFFFF"); + + btns2 << ui->navButton21 << ui->navButton22 << ui->navButton23 << ui->navButton24; + for (int i = 0; i < btns2.count(); i++) { + NavButton *btn = btns2.at(i); + btn->setPaddingLeft(35); + btn->setLineSpace(0); + btn->setLineWidth(8); + btn->setLineColor(QColor(255, 107, 107)); + btn->setShowTriangle(true); + + btn->setShowIcon(true); + btn->setIconSpace(10); + btn->setIconSize(QSize(22, 22)); + + //分开设置图标 + QChar icon = pixChar.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); + + btn->setIconNormal(iconNormal); + btn->setIconHover(iconHover); + btn->setIconCheck(iconCheck); + + btn->setNormalBgColor(normalBgColor); + btn->setHoverBgColor(hoverBgColor); + btn->setCheckBgColor(checkBgColor); + btn->setNormalTextColor(normalTextColor); + btn->setHoverTextColor(hoverTextColor); + btn->setCheckTextColor(checkTextColor); + + connect(btn, SIGNAL(clicked(bool)), this, SLOT(buttonClick2())); + } + + normalBgColor = QColor("#292F38"); + hoverBgColor = QColor("#1D2025"); + checkBgColor = QColor("#1D2025"); + normalTextColor = QColor("#54626F"); + hoverTextColor = QColor("#FDFDFD"); + checkTextColor = QColor("#FDFDFD"); + + btns3 << ui->navButton31 << ui->navButton32 << ui->navButton33 << ui->navButton34; + for (int i = 0; i < btns3.count(); i++) { + NavButton *btn = btns3.at(i); + btn->setPaddingLeft(35); + btn->setLineWidth(10); + btn->setLineColor(QColor("#029FEA")); + btn->setShowTriangle(true); + btn->setTextAlign(NavButton::TextAlign_Left); + btn->setTrianglePosition(NavButton::TrianglePosition_Left); + btn->setLinePosition(NavButton::LinePosition_Right); + + btn->setShowIcon(true); + btn->setIconSpace(10); + btn->setIconSize(QSize(22, 22)); + + //分开设置图标 + QChar icon = pixChar.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); + + btn->setIconNormal(iconNormal); + btn->setIconHover(iconHover); + btn->setIconCheck(iconCheck); + + btn->setNormalBgColor(normalBgColor); + btn->setHoverBgColor(hoverBgColor); + btn->setCheckBgColor(checkBgColor); + btn->setNormalTextColor(normalTextColor); + btn->setHoverTextColor(hoverTextColor); + btn->setCheckTextColor(checkTextColor); + + connect(btn, SIGNAL(clicked(bool)), this, SLOT(buttonClick3())); + } + + size = 15; + pixWidth = 15; + 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); + + btns4 << ui->navButton41 << ui->navButton42 << ui->navButton43 << ui->navButton44; + for (int i = 0; i < btns4.count(); i++) { + NavButton *btn = btns4.at(i); + btn->setLineSpace(10); + btn->setLineWidth(10); + btn->setPaddingRight(25); + btn->setShowTriangle(true); + btn->setTextAlign(NavButton::TextAlign_Right); + btn->setTrianglePosition(NavButton::TrianglePosition_Left); + btn->setLinePosition(NavButton::LinePosition_Right); + + btn->setShowIcon(true); + btn->setIconSpace(25); + btn->setIconSize(QSize(15, 15)); + btn->setIconNormal(iconNormal); + btn->setIconHover(iconHover); + btn->setIconCheck(iconCheck); + + connect(btn, SIGNAL(clicked(bool)), this, SLOT(buttonClick4())); + } + + size = 15; + pixWidth = 20; + pixHeight = 20; + + QFont font; + font.setPixelSize(15); + font.setBold(true); + + normalBgColor = QColor("#292929"); + hoverBgColor = QColor("#064077"); + checkBgColor = QColor("#10689A"); + normalTextColor = QColor("#FFFFFF"); + hoverTextColor = Qt::yellow; + checkTextColor = QColor("#FFFFFF"); + + btns5 << ui->navButton51 << ui->navButton52 << ui->navButton53 << ui->navButton54 << ui->navButton55; + for (int i = 0; i < btns5.count(); i++) { + NavButton *btn = btns5.at(i); + btn->setFont(font); + btn->setPaddingLeft(20); + btn->setShowLine(false); + btn->setTextAlign(NavButton::TextAlign_Center); + btn->setLinePosition(NavButton::LinePosition_Bottom); + + btn->setShowIcon(true); + btn->setIconSpace(15); + btn->setIconSize(QSize(22, 22)); + + //分开设置图标 + QChar icon = pixChar.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); + + btn->setIconNormal(iconNormal); + btn->setIconHover(iconHover); + btn->setIconCheck(iconCheck); + + btn->setNormalBgColor(normalBgColor); + btn->setHoverBgColor(hoverBgColor); + btn->setCheckBgColor(checkBgColor); + btn->setNormalTextColor(normalTextColor); + btn->setHoverTextColor(hoverTextColor); + btn->setCheckTextColor(checkTextColor); + + connect(btn, SIGNAL(clicked(bool)), this, SLOT(buttonClick5())); + } + + normalBgColor = QColor("#E6393D"); + hoverBgColor = QColor("#EE0000"); + checkBgColor = QColor("#A40001"); + normalTextColor = QColor("#FFFFFF"); + hoverTextColor = QColor("#FFFFFF"); + checkTextColor = QColor("#FFFFFF"); + + btns6 << ui->navButton61 << ui->navButton62 << ui->navButton63 << ui->navButton64 << ui->navButton65; + for (int i = 0; i < btns6.count(); i++) { + NavButton *btn = btns6.at(i); + btn->setFont(font); + btn->setPaddingLeft(20); + btn->setShowLine(false); + btn->setTextAlign(NavButton::TextAlign_Center); + btn->setLinePosition(NavButton::LinePosition_Bottom); + + btn->setShowIcon(true); + btn->setIconSpace(15); + btn->setIconSize(QSize(22, 22)); + + //分开设置图标 + QChar icon = pixChar.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); + + btn->setIconNormal(iconNormal); + btn->setIconHover(iconHover); + btn->setIconCheck(iconCheck); + + btn->setNormalBgColor(normalBgColor); + btn->setHoverBgColor(hoverBgColor); + btn->setCheckBgColor(checkBgColor); + btn->setNormalTextColor(normalTextColor); + btn->setHoverTextColor(hoverTextColor); + btn->setCheckTextColor(checkTextColor); + + connect(btn, SIGNAL(clicked(bool)), this, SLOT(buttonClick6())); + } + + //设置背景色为画刷 + QLinearGradient normalBgBrush(0, 0, 0, ui->navButton61->height()); + normalBgBrush.setColorAt(0.0, QColor("#3985BF")); + normalBgBrush.setColorAt(0.5, QColor("#2972A9")); + normalBgBrush.setColorAt(1.0, QColor("#1C6496")); + + QLinearGradient hoverBgBrush(0, 0, 0, ui->navButton61->height()); + hoverBgBrush.setColorAt(0.0, QColor("#4897D1")); + hoverBgBrush.setColorAt(0.5, QColor("#3283BC")); + hoverBgBrush.setColorAt(1.0, QColor("#3088C3")); + + btns7 << ui->navButton71 << ui->navButton72 << ui->navButton73 << ui->navButton74 << ui->navButton75 << ui->navButton76; + for (int i = 0; i < btns7.count(); i++) { + NavButton *btn = btns7.at(i); + btn->setFont(font); + btn->setPaddingLeft(0); + btn->setLineSpace(0); + btn->setShowTriangle(true); + btn->setTextAlign(NavButton::TextAlign_Center); + btn->setTrianglePosition(NavButton::TrianglePosition_Bottom); + btn->setLinePosition(NavButton::LinePosition_Top); + + btn->setNormalTextColor(normalTextColor); + btn->setHoverTextColor(hoverTextColor); + btn->setCheckTextColor(checkTextColor); + + btn->setNormalBgBrush(normalBgBrush); + btn->setHoverBgBrush(hoverBgBrush); + btn->setCheckBgBrush(hoverBgBrush); + + connect(btn, SIGNAL(clicked(bool)), this, SLOT(buttonClick7())); + } + + ui->navButton11->setChecked(true); + ui->navButton23->setChecked(true); + ui->navButton31->setChecked(true); + ui->navButton44->setChecked(true); + ui->navButton53->setChecked(true); + ui->navButton61->setChecked(true); + ui->navButton75->setChecked(true); + + //设置整体圆角 + ui->widgetNav5->setStyleSheet(".QWidget{background:#292929;border:1px solid #292929;border-radius:20px;}"); +} + +void frmNavButton::buttonClick1() +{ + NavButton *b = (NavButton *)sender(); + qDebug() << "当前按下" << b->text(); + for (int i = 0; i < btns1.count(); i++) { + NavButton *btn = btns1.at(i); + btn->setChecked(b == btn); + } +} + +void frmNavButton::buttonClick2() +{ + NavButton *b = (NavButton *)sender(); + qDebug() << "当前按下" << b->text(); + for (int i = 0; i < btns2.count(); i++) { + NavButton *btn = btns2.at(i); + btn->setChecked(b == btn); + } +} + +void frmNavButton::buttonClick3() +{ + NavButton *b = (NavButton *)sender(); + qDebug() << "当前按下" << b->text(); + for (int i = 0; i < btns3.count(); i++) { + NavButton *btn = btns3.at(i); + btn->setChecked(b == btn); + } +} + +void frmNavButton::buttonClick4() +{ + NavButton *b = (NavButton *)sender(); + qDebug() << "当前按下" << b->text(); + for (int i = 0; i < btns4.count(); i++) { + NavButton *btn = btns4.at(i); + btn->setChecked(b == btn); + } +} + +void frmNavButton::buttonClick5() +{ + NavButton *b = (NavButton *)sender(); + qDebug() << "当前按下" << b->text(); + for (int i = 0; i < btns5.count(); i++) { + NavButton *btn = btns5.at(i); + btn->setChecked(b == btn); + } +} + +void frmNavButton::buttonClick6() +{ + NavButton *b = (NavButton *)sender(); + qDebug() << "当前按下" << b->text(); + for (int i = 0; i < btns6.count(); i++) { + NavButton *btn = btns6.at(i); + btn->setChecked(b == btn); + } +} + +void frmNavButton::buttonClick7() +{ + NavButton *b = (NavButton *)sender(); + qDebug() << "当前按下" << b->text(); + for (int i = 0; i < btns7.count(); i++) { + NavButton *btn = btns7.at(i); + btn->setChecked(b == btn); + } +} diff --git a/navbutton/frmnavbutton.h b/navbutton/frmnavbutton.h new file mode 100644 index 0000000..08775dc --- /dev/null +++ b/navbutton/frmnavbutton.h @@ -0,0 +1,42 @@ +#ifndef FRMNAVBUTTON_H +#define FRMNAVBUTTON_H + +#include + +class NavButton; + +namespace Ui +{ +class frmNavButton; +} + +class frmNavButton : public QWidget +{ + Q_OBJECT + +public: + explicit frmNavButton(QWidget *parent = 0); + ~frmNavButton(); + +private: + Ui::frmNavButton *ui; + QList btns1; + QList btns2; + QList btns3; + QList btns4; + QList btns5; + QList btns6; + QList btns7; + +private slots: + void initForm(); + void buttonClick1(); + void buttonClick2(); + void buttonClick3(); + void buttonClick4(); + void buttonClick5(); + void buttonClick6(); + void buttonClick7(); +}; + +#endif // FRMNAVBUTTON_H diff --git a/navbutton/frmnavbutton.ui b/navbutton/frmnavbutton.ui new file mode 100644 index 0000000..4e786d7 --- /dev/null +++ b/navbutton/frmnavbutton.ui @@ -0,0 +1,547 @@ + + + frmNavButton + + + + 0 + 0 + 500 + 300 + + + + + 500 + 0 + + + + + 500 + 16777215 + + + + Form + + + + + + + 0 + 40 + + + + + 16777215 + 40 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + 首页 + + + + + + + + 0 + 0 + + + + 论坛 + + + + + + + + 0 + 0 + + + + Qt下载 + + + + + + + + 0 + 0 + + + + 作品展 + + + + + + + + 0 + 0 + + + + 群组 + + + + + + + + 0 + 0 + + + + 个人中心 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 学生管理 + + + + + + + 教师管理 + + + + + + + 成绩管理 + + + + + + + 记录查询 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 访客登记 + + + + + + + 记录查询 + + + + + + + 系统设置 + + + + + + + 系统重启 + + + + + + + + + + + 0 + 40 + + + + + 16777215 + 40 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + 首页 + + + + + + + + 0 + 0 + + + + 论坛 + + + + + + + + 0 + 0 + + + + 作品 + + + + + + + + 0 + 0 + + + + 群组 + + + + + + + + 0 + 0 + + + + 帮助 + + + + + + + + + + + 0 + 40 + + + + + 16777215 + 40 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + 首页 + + + + + + + + 0 + 0 + + + + 论坛 + + + + + + + + 0 + 0 + + + + 作品 + + + + + + + + 0 + 0 + + + + 群组 + + + + + + + + 0 + 0 + + + + 帮助 + + + + + + + + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 学生管理 + + + + + + + 教师管理 + + + + + + + 成绩管理 + + + + + + + 记录查询 + + + + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + 学生管理 + + + + + + + 教师管理 + + + + + + + 成绩管理 + + + + + + + 记录查询 + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + NavButton + QPushButton +
navbutton.h
+
+
+ + +
diff --git a/navbutton/iconhelper.cpp b/navbutton/iconhelper.cpp new file mode 100644 index 0000000..356e065 --- /dev/null +++ b/navbutton/iconhelper.cpp @@ -0,0 +1,240 @@ +#include "iconhelper.h" + +QScopedPointer IconHelper::self; +IconHelper *IconHelper::Instance() +{ + if (self.isNull()) { + static QMutex mutex; + QMutexLocker locker(&mutex); + if (self.isNull()) { + self.reset(new IconHelper); + } + } + + return self.data(); +} + +IconHelper::IconHelper(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("FontAwesome")) { + iconFont = QFont("FontAwesome"); +#if (QT_VERSION >= QT_VERSION_CHECK(4,8,0)) + iconFont.setHintingPreference(QFont::PreferNoHinting); +#endif + } +} + +void IconHelper::setIcon(QLabel *lab, const QChar &str, quint32 size) +{ + iconFont.setPixelSize(size); + lab->setFont(iconFont); + lab->setText(str); +} + +void IconHelper::setIcon(QAbstractButton *btn, const QChar &str, quint32 size) +{ + iconFont.setPixelSize(size); + btn->setFont(iconFont); + btn->setText(str); +} + +QPixmap IconHelper::getPixmap(const QColor &color, const QChar &str, 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, str); + painter.end(); + + return pix; +} + +QPixmap IconHelper::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 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") { + 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 IconHelper::setStyle(QWidget *widget, QList btns, QList pixChar, + 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 = pixChar.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++) { + //存储对应按钮对象,方便鼠标移上去的时候切换图片 + QPixmap pixNormal = getPixmap(normalTextColor, QChar(pixChar.at(i)), iconSize, iconWidth, iconHeight); + QPixmap pixDark = getPixmap(darkTextColor, QChar(pixChar.at(i)), 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 IconHelper::setStyle(QFrame *frame, QList btns, QList pixChar, + quint32 iconSize, quint32 iconWidth, quint32 iconHeight, + const QString &normalBgColor, const QString &darkBgColor, + const QString &normalTextColor, const QString &darkTextColor) +{ + int btnCount = btns.count(); + int charCount = pixChar.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++) { + //存储对应按钮对象,方便鼠标移上去的时候切换图片 + QPixmap pixNormal = getPixmap(normalTextColor, QChar(pixChar.at(i)), iconSize, iconWidth, iconHeight); + QPixmap pixDark = getPixmap(darkTextColor, QChar(pixChar.at(i)), 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 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(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/navbutton/iconhelper.h b/navbutton/iconhelper.h new file mode 100644 index 0000000..fb24137 --- /dev/null +++ b/navbutton/iconhelper.h @@ -0,0 +1,64 @@ +#ifndef ICONHELPER_H +#define ICONHELPER_H + +#include +#include +#if (QT_VERSION > QT_VERSION_CHECK(5,0,0)) +#include +#endif + +//图形字体处理类 +class IconHelper : public QObject +{ + Q_OBJECT + +public: + static IconHelper *Instance(); + explicit IconHelper(QObject *parent = 0); + + void setIcon(QLabel *lab, const QChar &str, quint32 size = 12); + void setIcon(QAbstractButton *btn, const QChar &str, quint32 size = 12); + QPixmap getPixmap(const QColor &color, const QChar &str, 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 pixChar, + 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 pixChar, + 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 // ICONHELPER_H diff --git a/navbutton/image/fontawesome-webfont.ttf b/navbutton/image/fontawesome-webfont.ttf new file mode 100644 index 0000000..5cd6cff Binary files /dev/null and b/navbutton/image/fontawesome-webfont.ttf differ diff --git a/navbutton/main.cpp b/navbutton/main.cpp new file mode 100644 index 0000000..a2d67c4 --- /dev/null +++ b/navbutton/main.cpp @@ -0,0 +1,31 @@ +#pragma execution_character_set("utf-8") + +#include "frmnavbutton.h" +#include +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + a.setFont(QFont("Microsoft Yahei", 9)); + +#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) +#if _MSC_VER + QTextCodec *codec = QTextCodec::codecForName("gbk"); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); +#endif + QTextCodec::setCodecForLocale(codec); + QTextCodec::setCodecForCStrings(codec); + QTextCodec::setCodecForTr(codec); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); + QTextCodec::setCodecForLocale(codec); +#endif + + frmNavButton w; + w.setWindowTitle("导航按钮控件"); + w.show(); + + return a.exec(); +} diff --git a/navbutton/main.qrc b/navbutton/main.qrc new file mode 100644 index 0000000..827aaf3 --- /dev/null +++ b/navbutton/main.qrc @@ -0,0 +1,5 @@ + + + image/fontawesome-webfont.ttf + + diff --git a/navbutton/navbutton.cpp b/navbutton/navbutton.cpp new file mode 100644 index 0000000..54b0910 --- /dev/null +++ b/navbutton/navbutton.cpp @@ -0,0 +1,629 @@ +#pragma execution_character_set("utf-8") + +#include "navbutton.h" +#include "qpainter.h" +#include "qdebug.h" + +NavButton::NavButton(QWidget *parent) : QPushButton(parent) +{ + paddingLeft = 20; + paddingRight = 5; + paddingTop = 5; + paddingBottom = 5; + textAlign = TextAlign_Left; + + showTriangle = false; + triangleLen = 5; + trianglePosition = TrianglePosition_Right; + triangleColor = QColor(255, 255, 255); + + showIcon = false; + iconSpace = 10; + iconSize = QSize(16, 16); + iconNormal = QPixmap(); + iconHover = QPixmap(); + iconCheck = QPixmap(); + + showLine = true; + lineSpace = 0; + lineWidth = 5; + linePosition = LinePosition_Left; + lineColor = QColor(0, 187, 158); + + normalBgColor = QColor(230, 230, 230); + hoverBgColor = QColor(130, 130, 130); + checkBgColor = QColor(80, 80, 80); + normalTextColor = QColor(100, 100, 100); + hoverTextColor = QColor(255, 255, 255); + checkTextColor = QColor(255, 255, 255); + + normalBgBrush = Qt::NoBrush; + hoverBgBrush = Qt::NoBrush; + checkBgBrush = Qt::NoBrush; + + hover = false; + setCheckable(true); +} + +void NavButton::enterEvent(QEvent *) +{ + hover = true; + this->update(); +} + +void NavButton::leaveEvent(QEvent *) +{ + hover = false; + this->update(); +} + +void NavButton::paintEvent(QPaintEvent *) +{ + //绘制准备工作,启用反锯齿 + QPainter painter(this); + painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing); + + //绘制背景 + drawBg(&painter); + //绘制文字 + drawText(&painter); + //绘制图标 + drawIcon(&painter); + //绘制边框线条 + drawLine(&painter); + //绘制倒三角 + drawTriangle(&painter); +} + +void NavButton::drawBg(QPainter *painter) +{ + painter->save(); + painter->setPen(Qt::NoPen); + + int width = this->width(); + int height = this->height(); + + QRect bgRect; + if (linePosition == LinePosition_Left) { + bgRect = QRect(lineSpace, 0, width - lineSpace, height); + } else if (linePosition == LinePosition_Right) { + bgRect = QRect(0, 0, width - lineSpace, height); + } else if (linePosition == LinePosition_Top) { + bgRect = QRect(0, lineSpace, width, height - lineSpace); + } else if (linePosition == LinePosition_Bottom) { + bgRect = QRect(0, 0, width, height - lineSpace); + } + + //如果画刷存在则取画刷 + QBrush bgBrush; + if (isChecked()) { + bgBrush = checkBgBrush; + } else if (hover) { + bgBrush = hoverBgBrush; + } else { + bgBrush = normalBgBrush; + } + + if (bgBrush != Qt::NoBrush) { + painter->setBrush(bgBrush); + } else { + //根据当前状态选择对应颜色 + QColor bgColor; + if (isChecked()) { + bgColor = checkBgColor; + } else if (hover) { + bgColor = hoverBgColor; + } else { + bgColor = normalBgColor; + } + + painter->setBrush(bgColor); + } + + painter->drawRect(bgRect); + + painter->restore(); +} + +void NavButton::drawText(QPainter *painter) +{ + painter->save(); + painter->setBrush(Qt::NoBrush); + + //根据当前状态选择对应颜色 + QColor textColor; + if (isChecked()) { + textColor = checkTextColor; + } else if (hover) { + textColor = hoverTextColor; + } else { + textColor = normalTextColor; + } + + QRect textRect = QRect(paddingLeft, paddingTop, width() - paddingLeft - paddingRight, height() - paddingTop - paddingBottom); + painter->setPen(textColor); + painter->drawText(textRect, textAlign | Qt::AlignVCenter, text()); + + painter->restore(); +} + +void NavButton::drawIcon(QPainter *painter) +{ + if (!showIcon) { + return; + } + + painter->save(); + + QPixmap pix; + if (isChecked()) { + pix = iconCheck; + } else if (hover) { + pix = iconHover; + } else { + pix = iconNormal; + } + + if (!pix.isNull()) { + //等比例平滑缩放图标 + pix = pix.scaled(iconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); + painter->drawPixmap(iconSpace, (height() - iconSize.height()) / 2, pix); + } + + painter->restore(); +} + +void NavButton::drawLine(QPainter *painter) +{ + if (!showLine) { + return; + } + + if (!isChecked()) { + return; + } + + painter->save(); + + QPen pen; + pen.setWidth(lineWidth); + pen.setColor(lineColor); + painter->setPen(pen); + + //根据线条位置设置线条坐标 + QPoint pointStart, pointEnd; + if (linePosition == LinePosition_Left) { + pointStart = QPoint(0, 0); + pointEnd = QPoint(0, height()); + } else if (linePosition == LinePosition_Right) { + pointStart = QPoint(width(), 0); + pointEnd = QPoint(width(), height()); + } else if (linePosition == LinePosition_Top) { + pointStart = QPoint(0, 0); + pointEnd = QPoint(width(), 0); + } else if (linePosition == LinePosition_Bottom) { + pointStart = QPoint(0, height()); + pointEnd = QPoint(width(), height()); + } + + painter->drawLine(pointStart, pointEnd); + + painter->restore(); +} + +void NavButton::drawTriangle(QPainter *painter) +{ + if (!showTriangle) { + return; + } + + //选中或者悬停显示 + if (!hover && !isChecked()) { + return; + } + + painter->save(); + painter->setPen(Qt::NoPen); + painter->setBrush(triangleColor); + + //绘制在右侧中间,根据设定的倒三角的边长设定三个点位置 + int width = this->width(); + int height = this->height(); + int midWidth = width / 2; + int midHeight = height / 2; + + QPolygon pts; + if (trianglePosition == TrianglePosition_Left) { + pts.setPoints(3, triangleLen, midHeight, 0, midHeight - triangleLen, 0, midHeight + triangleLen); + } else if (trianglePosition == TrianglePosition_Right) { + pts.setPoints(3, width - triangleLen, midHeight, width, midHeight - triangleLen, width, midHeight + triangleLen); + } else if (trianglePosition == TrianglePosition_Top) { + pts.setPoints(3, midWidth, triangleLen, midWidth - triangleLen, 0, midWidth + triangleLen, 0); + } else if (trianglePosition == TrianglePosition_Bottom) { + pts.setPoints(3, midWidth, height - triangleLen, midWidth - triangleLen, height, midWidth + triangleLen, height); + } + + painter->drawPolygon(pts); + + painter->restore(); +} + +int NavButton::getPaddingLeft() const +{ + return this->paddingLeft; +} + +int NavButton::getPaddingRight() const +{ + return this->paddingRight; +} + +int NavButton::getPaddingTop() const +{ + return this->paddingTop; +} + +int NavButton::getPaddingBottom() const +{ + return this->paddingBottom; +} + +NavButton::TextAlign NavButton::getTextAlign() const +{ + return this->textAlign; +} + +bool NavButton::getShowTriangle() const +{ + return this->showTriangle; +} + +int NavButton::getTriangleLen() const +{ + return this->triangleLen; +} + +NavButton::TrianglePosition NavButton::getTrianglePosition() const +{ + return this->trianglePosition; +} + +QColor NavButton::getTriangleColor() const +{ + return this->triangleColor; +} + +bool NavButton::getShowIcon() const +{ + return this->showIcon; +} + +int NavButton::getIconSpace() const +{ + return this->iconSpace; +} + +QSize NavButton::getIconSize() const +{ + return this->iconSize; +} + +QPixmap NavButton::getIconNormal() const +{ + return this->iconNormal; +} + +QPixmap NavButton::getIconHover() const +{ + return this->iconHover; +} + +QPixmap NavButton::getIconCheck() const +{ + return this->iconCheck; +} + +bool NavButton::getShowLine() const +{ + return this->showLine; +} + +int NavButton::getLineSpace() const +{ + return this->lineSpace; +} + +int NavButton::getLineWidth() const +{ + return this->lineWidth; +} + +NavButton::LinePosition NavButton::getLinePosition() const +{ + return this->linePosition; +} + +QColor NavButton::getLineColor() const +{ + return this->lineColor; +} + +QColor NavButton::getNormalBgColor() const +{ + return this->normalBgColor; +} + +QColor NavButton::getHoverBgColor() const +{ + return this->hoverBgColor; +} + +QColor NavButton::getCheckBgColor() const +{ + return this->checkBgColor; +} + +QColor NavButton::getNormalTextColor() const +{ + return this->normalTextColor; +} + +QColor NavButton::getHoverTextColor() const +{ + return this->hoverTextColor; +} + +QColor NavButton::getCheckTextColor() const +{ + return this->checkTextColor; +} + +QSize NavButton::sizeHint() const +{ + return QSize(100, 30); +} + +QSize NavButton::minimumSizeHint() const +{ + return QSize(20, 10); +} + +void NavButton::setPaddingLeft(int paddingLeft) +{ + if (this->paddingLeft != paddingLeft) { + this->paddingLeft = paddingLeft; + this->update(); + } +} + +void NavButton::setPaddingRight(int paddingRight) +{ + if (this->paddingRight != paddingRight) { + this->paddingRight = paddingRight; + this->update(); + } +} + +void NavButton::setPaddingTop(int paddingTop) +{ + if (this->paddingTop != paddingTop) { + this->paddingTop = paddingTop; + this->update(); + } +} + +void NavButton::setPaddingBottom(int paddingBottom) +{ + if (this->paddingBottom != paddingBottom) { + this->paddingBottom = paddingBottom; + this->update(); + } +} + +void NavButton::setPadding(int padding) +{ + setPadding(padding, padding, padding, padding); +} + +void NavButton::setPadding(int paddingLeft, int paddingRight, int paddingTop, int paddingBottom) +{ + this->paddingLeft = paddingLeft; + this->paddingRight = paddingRight; + this->paddingTop = paddingTop; + this->paddingBottom = paddingBottom; + this->update(); +} + +void NavButton::setTextAlign(const NavButton::TextAlign &textAlign) +{ + if (this->textAlign != textAlign) { + this->textAlign = textAlign; + this->update(); + } +} + +void NavButton::setShowTriangle(bool showTriangle) +{ + if (this->showTriangle != showTriangle) { + this->showTriangle = showTriangle; + this->update(); + } +} + +void NavButton::setTriangleLen(int triangleLen) +{ + if (this->triangleLen != triangleLen) { + this->triangleLen = triangleLen; + this->update(); + } +} + +void NavButton::setTrianglePosition(const NavButton::TrianglePosition &trianglePosition) +{ + if (this->trianglePosition != trianglePosition) { + this->trianglePosition = trianglePosition; + this->update(); + } +} + +void NavButton::setTriangleColor(const QColor &triangleColor) +{ + if (this->triangleColor != triangleColor) { + this->triangleColor = triangleColor; + this->update(); + } +} + +void NavButton::setShowIcon(bool showIcon) +{ + if (this->showIcon != showIcon) { + this->showIcon = showIcon; + this->update(); + } +} + +void NavButton::setIconSpace(int iconSpace) +{ + if (this->iconSpace != iconSpace) { + this->iconSpace = iconSpace; + this->update(); + } +} + +void NavButton::setIconSize(const QSize &iconSize) +{ + if (this->iconSize != iconSize) { + this->iconSize = iconSize; + this->update(); + } +} + +void NavButton::setIconNormal(const QPixmap &iconNormal) +{ + this->iconNormal = iconNormal; + this->update(); +} + +void NavButton::setIconHover(const QPixmap &iconHover) +{ + this->iconHover = iconHover; + this->update(); +} + +void NavButton::setIconCheck(const QPixmap &iconCheck) +{ + this->iconCheck = iconCheck; + this->update(); +} + +void NavButton::setShowLine(bool showLine) +{ + if (this->showLine != showLine) { + this->showLine = showLine; + this->update(); + } +} + +void NavButton::setLineSpace(int lineSpace) +{ + if (this->lineSpace != lineSpace) { + this->lineSpace = lineSpace; + this->update(); + } +} + +void NavButton::setLineWidth(int lineWidth) +{ + if (this->lineWidth != lineWidth) { + this->lineWidth = lineWidth; + this->update(); + } +} + +void NavButton::setLinePosition(const NavButton::LinePosition &linePosition) +{ + if (this->linePosition != linePosition) { + this->linePosition = linePosition; + this->update(); + } +} + +void NavButton::setLineColor(const QColor &lineColor) +{ + if (this->lineColor != lineColor) { + this->lineColor = lineColor; + this->update(); + } +} + +void NavButton::setNormalBgColor(const QColor &normalBgColor) +{ + if (this->normalBgColor != normalBgColor) { + this->normalBgColor = normalBgColor; + this->update(); + } +} + +void NavButton::setHoverBgColor(const QColor &hoverBgColor) +{ + if (this->hoverBgColor != hoverBgColor) { + this->hoverBgColor = hoverBgColor; + this->update(); + } +} + +void NavButton::setCheckBgColor(const QColor &checkBgColor) +{ + if (this->checkBgColor != checkBgColor) { + this->checkBgColor = checkBgColor; + this->update(); + } +} + +void NavButton::setNormalTextColor(const QColor &normalTextColor) +{ + if (this->normalTextColor != normalTextColor) { + this->normalTextColor = normalTextColor; + this->update(); + } +} + +void NavButton::setHoverTextColor(const QColor &hoverTextColor) +{ + if (this->hoverTextColor != hoverTextColor) { + this->hoverTextColor = hoverTextColor; + this->update(); + } +} + +void NavButton::setCheckTextColor(const QColor &checkTextColor) +{ + if (this->checkTextColor != checkTextColor) { + this->checkTextColor = checkTextColor; + this->update(); + } +} + +void NavButton::setNormalBgBrush(const QBrush &normalBgBrush) +{ + if (this->normalBgBrush != normalBgBrush) { + this->normalBgBrush = normalBgBrush; + this->update(); + } +} + +void NavButton::setHoverBgBrush(const QBrush &hoverBgBrush) +{ + if (this->hoverBgBrush != hoverBgBrush) { + this->hoverBgBrush = hoverBgBrush; + this->update(); + } +} + +void NavButton::setCheckBgBrush(const QBrush &checkBgBrush) +{ + if (this->checkBgBrush != checkBgBrush) { + this->checkBgBrush = checkBgBrush; + this->update(); + } +} diff --git a/navbutton/navbutton.h b/navbutton/navbutton.h new file mode 100644 index 0000000..fb8a671 --- /dev/null +++ b/navbutton/navbutton.h @@ -0,0 +1,251 @@ +#ifndef NAVBUTTON_H +#define NAVBUTTON_H + +/** + * 导航按钮控件 作者:feiyangqingyun(QQ:517216493) 2017-12-19 + * 1:可设置文字的左侧+右侧+顶部+底部间隔 + * 2:可设置文字对齐方式 + * 3:可设置显示倒三角/倒三角边长/倒三角位置/倒三角颜色 + * 4:可设置显示图标/图标间隔/图标尺寸/正常状态图标/悬停状态图标/选中状态图标 + * 5:可设置显示边框线条/线条宽度/线条间隔/线条位置/线条颜色 + * 6:可设置正常背景颜色/悬停背景颜色/选中背景颜色 + * 7:可设置正常文字颜色/悬停文字颜色/选中文字颜色 + * 8:可设置背景颜色为画刷颜色 + */ + +#include + +#ifdef quc +#if (QT_VERSION < QT_VERSION_CHECK(5,7,0)) +#include +#else +#include +#endif + +class QDESIGNER_WIDGET_EXPORT NavButton : public QPushButton +#else +class NavButton : public QPushButton +#endif + +{ + Q_OBJECT + Q_ENUMS(TextAlign) + Q_ENUMS(TrianglePosition) + Q_ENUMS(LinePosition) + Q_ENUMS(IconPosition) + + Q_PROPERTY(int paddingLeft READ getPaddingLeft WRITE setPaddingLeft) + Q_PROPERTY(int paddingRight READ getPaddingRight WRITE setPaddingRight) + Q_PROPERTY(int paddingTop READ getPaddingTop WRITE setPaddingTop) + Q_PROPERTY(int paddingBottom READ getPaddingBottom WRITE setPaddingBottom) + Q_PROPERTY(TextAlign textAlign READ getTextAlign WRITE setTextAlign) + + Q_PROPERTY(bool showTriangle READ getShowTriangle WRITE setShowTriangle) + Q_PROPERTY(int triangleLen READ getTriangleLen WRITE setTriangleLen) + Q_PROPERTY(TrianglePosition trianglePosition READ getTrianglePosition WRITE setTrianglePosition) + Q_PROPERTY(QColor triangleColor READ getTriangleColor WRITE setTriangleColor) + + Q_PROPERTY(bool showIcon READ getShowIcon WRITE setShowIcon) + Q_PROPERTY(int iconSpace READ getIconSpace WRITE setIconSpace) + Q_PROPERTY(QSize iconSize READ getIconSize WRITE setIconSize) + Q_PROPERTY(QPixmap iconNormal READ getIconNormal WRITE setIconNormal) + Q_PROPERTY(QPixmap iconHover READ getIconHover WRITE setIconHover) + Q_PROPERTY(QPixmap iconCheck READ getIconCheck WRITE setIconCheck) + + Q_PROPERTY(bool showLine READ getShowLine WRITE setShowLine) + Q_PROPERTY(int lineSpace READ getLineSpace WRITE setLineSpace) + Q_PROPERTY(int lineWidth READ getLineWidth WRITE setLineWidth) + Q_PROPERTY(LinePosition linePosition READ getLinePosition WRITE setLinePosition) + Q_PROPERTY(QColor lineColor READ getLineColor WRITE setLineColor) + + Q_PROPERTY(QColor normalBgColor READ getNormalBgColor WRITE setNormalBgColor) + Q_PROPERTY(QColor hoverBgColor READ getHoverBgColor WRITE setHoverBgColor) + Q_PROPERTY(QColor checkBgColor READ getCheckBgColor WRITE setCheckBgColor) + Q_PROPERTY(QColor normalTextColor READ getNormalTextColor WRITE setNormalTextColor) + Q_PROPERTY(QColor hoverTextColor READ getHoverTextColor WRITE setHoverTextColor) + Q_PROPERTY(QColor checkTextColor READ getCheckTextColor WRITE setCheckTextColor) + +public: + enum TextAlign { + TextAlign_Left = 0x0001, //左侧对齐 + TextAlign_Right = 0x0002, //右侧对齐 + TextAlign_Top = 0x0020, //顶部对齐 + TextAlign_Bottom = 0x0040, //底部对齐 + TextAlign_Center = 0x0004 //居中对齐 + }; + + enum TrianglePosition { + TrianglePosition_Left = 0, //左侧 + TrianglePosition_Right = 1, //右侧 + TrianglePosition_Top = 2, //顶部 + TrianglePosition_Bottom = 3 //底部 + }; + + enum IconPosition { + IconPosition_Left = 0, //左侧 + IconPosition_Right = 1, //右侧 + IconPosition_Top = 2, //顶部 + IconPosition_Bottom = 3 //底部 + }; + + enum LinePosition { + LinePosition_Left = 0, //左侧 + LinePosition_Right = 1, //右侧 + LinePosition_Top = 2, //顶部 + LinePosition_Bottom = 3 //底部 + }; + + explicit NavButton(QWidget *parent = 0); + +protected: + void enterEvent(QEvent *); + void leaveEvent(QEvent *); + void paintEvent(QPaintEvent *); + void drawBg(QPainter *painter); + void drawText(QPainter *painter); + void drawIcon(QPainter *painter); + void drawLine(QPainter *painter); + void drawTriangle(QPainter *painter); + +private: + int paddingLeft; //文字左侧间隔 + int paddingRight; //文字右侧间隔 + int paddingTop; //文字顶部间隔 + int paddingBottom; //文字底部间隔 + TextAlign textAlign; //文字对齐 + + bool showTriangle; //显示倒三角 + int triangleLen; //倒三角边长 + TrianglePosition trianglePosition; //倒三角位置 + QColor triangleColor; //倒三角颜色 + + bool showIcon; //显示图标 + int iconSpace; //图标间隔 + QSize iconSize; //图标尺寸 + QPixmap iconNormal; //正常图标 + QPixmap iconHover; //悬停图标 + QPixmap iconCheck; //选中图标 + + bool showLine; //显示线条 + int lineSpace; //线条间隔 + int lineWidth; //线条宽度 + LinePosition linePosition; //线条位置 + QColor lineColor; //线条颜色 + + QColor normalBgColor; //正常背景颜色 + QColor hoverBgColor; //悬停背景颜色 + QColor checkBgColor; //选中背景颜色 + QColor normalTextColor; //正常文字颜色 + QColor hoverTextColor; //悬停文字颜色 + QColor checkTextColor; //选中文字颜色 + + QBrush normalBgBrush; //正常背景画刷 + QBrush hoverBgBrush; //悬停背景画刷 + QBrush checkBgBrush; //选中背景画刷 + + bool hover; //悬停标志位 + +public: + int getPaddingLeft() const; + int getPaddingRight() const; + int getPaddingTop() const; + int getPaddingBottom() const; + TextAlign getTextAlign() const; + + bool getShowTriangle() const; + int getTriangleLen() const; + TrianglePosition getTrianglePosition()const; + QColor getTriangleColor() const; + + bool getShowIcon() const; + int getIconSpace() const; + QSize getIconSize() const; + QPixmap getIconNormal() const; + QPixmap getIconHover() const; + QPixmap getIconCheck() const; + + bool getShowLine() const; + int getLineSpace() const; + int getLineWidth() const; + LinePosition getLinePosition() const; + QColor getLineColor() const; + + QColor getNormalBgColor() const; + QColor getHoverBgColor() const; + QColor getCheckBgColor() const; + QColor getNormalTextColor() const; + QColor getHoverTextColor() const; + QColor getCheckTextColor() const; + + QSize sizeHint() const; + QSize minimumSizeHint() const; + +public Q_SLOTS: + //设置文字间隔 + void setPaddingLeft(int paddingLeft); + void setPaddingRight(int paddingRight); + void setPaddingTop(int paddingTop); + void setPaddingBottom(int paddingBottom); + void setPadding(int padding); + void setPadding(int paddingLeft, int paddingRight, int paddingTop, int paddingBottom); + + //设置文字对齐 + void setTextAlign(const TextAlign &textAlign); + + //设置显示倒三角 + void setShowTriangle(bool showTriangle); + //设置倒三角边长 + void setTriangleLen(int triangleLen); + //设置倒三角位置 + void setTrianglePosition(const TrianglePosition &trianglePosition); + //设置倒三角颜色 + void setTriangleColor(const QColor &triangleColor); + + //设置显示图标 + void setShowIcon(bool showIcon); + //设置图标间隔 + void setIconSpace(int iconSpace); + //设置图标尺寸 + void setIconSize(const QSize &iconSize); + //设置正常图标 + void setIconNormal(const QPixmap &iconNormal); + //设置悬停图标 + void setIconHover(const QPixmap &iconHover); + //设置按下图标 + void setIconCheck(const QPixmap &iconCheck); + + //设置显示线条 + void setShowLine(bool showLine); + //设置线条间隔 + void setLineSpace(int lineSpace); + //设置线条宽度 + void setLineWidth(int lineWidth); + //设置线条位置 + void setLinePosition(const LinePosition &linePosition); + //设置线条颜色 + void setLineColor(const QColor &lineColor); + + //设置正常背景颜色 + void setNormalBgColor(const QColor &normalBgColor); + //设置悬停背景颜色 + void setHoverBgColor(const QColor &hoverBgColor); + //设置选中背景颜色 + void setCheckBgColor(const QColor &checkBgColor); + + //设置正常文字颜色 + void setNormalTextColor(const QColor &normalTextColor); + //设置悬停文字颜色 + void setHoverTextColor(const QColor &hoverTextColor); + //设置选中文字颜色 + void setCheckTextColor(const QColor &checkTextColor); + + //设置正常背景画刷 + void setNormalBgBrush(const QBrush &normalBgBrush); + //设置悬停背景画刷 + void setHoverBgBrush(const QBrush &hoverBgBrush); + //设置选中背景画刷 + void setCheckBgBrush(const QBrush &checkBgBrush); + +}; + +#endif // NAVBUTTON_H diff --git a/navbutton/navbutton.pro b/navbutton/navbutton.pro new file mode 100644 index 0000000..31bb886 --- /dev/null +++ b/navbutton/navbutton.pro @@ -0,0 +1,27 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2017-02-08T15:12:35 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = navbutton +TEMPLATE = app +DESTDIR = $$PWD/../bin +CONFIG += warn_off + +SOURCES += main.cpp +SOURCES += iconhelper.cpp +SOURCES += frmnavbutton.cpp +SOURCES += navbutton.cpp + +HEADERS += frmnavbutton.h +HEADERS += iconhelper.h +HEADERS += navbutton.h + +FORMS += frmnavbutton.ui + +RESOURCES += main.qrc diff --git a/video_splite/bg_novideo.png b/video_splite/bg_novideo.png new file mode 100644 index 0000000..bdacfb2 Binary files /dev/null and b/video_splite/bg_novideo.png differ diff --git a/video_splite/frmmain.cpp b/video_splite/frmmain.cpp new file mode 100644 index 0000000..9aa3357 --- /dev/null +++ b/video_splite/frmmain.cpp @@ -0,0 +1,378 @@ +#include "frmmain.h" +#include "ui_frmmain.h" + +#pragma execution_character_set("utf-8") + +frmMain::frmMain(QWidget *parent) : QWidget(parent), ui(new Ui::frmMain) +{ + ui->setupUi(this); + this->initForm(); + this->initMenu(); + this->show_video_all(); + QTimer::singleShot(1000, this, SLOT(play_video_all())); +} + +frmMain::~frmMain() +{ + delete ui; +} + +bool frmMain::eventFilter(QObject *watched, QEvent *event) +{ + if (event->type() == QEvent::MouseButtonDblClick) { + QLabel *widget = (QLabel *) watched; + if (!videoMax) { + videoMax = true; + hide_video_all(); + ui->gridLayout->addWidget(widget, 0, 0); + widget->setVisible(true); + } else { + videoMax = false; + show_video_all(); + } + + widget->setFocus(); + } else if (event->type() == QEvent::MouseButtonPress) { + if (qApp->mouseButtons() == Qt::RightButton) { + videoMenu->exec(QCursor::pos()); + } + } + + return QWidget::eventFilter(watched, event); +} + +void frmMain::initForm() +{ + //设置样式表 + QStringList qss; + qss.append("QFrame{border:2px solid #000000;}"); + qss.append("QLabel{font:75 25px;color:#F0F0F0;border:2px solid #AAAAAA;background:#000000;}"); + qss.append("QLabel:focus{border:2px solid #00BB9E;background:#555555;}"); + ui->frame->setStyleSheet(qss.join("")); + + videoMax = false; + videoCount = 16; + videoType = "1_16"; + + for (int i = 0; i < videoCount; i++) { + QLabel *widget = new QLabel; + widget->setObjectName(QString("video%1").arg(i + 1)); + widget->installEventFilter(this); + widget->setFocusPolicy(Qt::StrongFocus); + widget->setAlignment(Qt::AlignCenter); + + //二选一可以选择显示文字,也可以选择显示背景图片 + //widget->setText(QString("通道 %1").arg(i + 1)); + widget->setPixmap(QPixmap(":/bg_novideo.png")); + widgets.append(widget); + } +} + +void frmMain::initMenu() +{ + videoMenu = new QMenu(this); + videoMenu->addAction("截图当前视频", this, SLOT(snapshot_video_one())); + videoMenu->addAction("截图所有视频", this, SLOT(snapshot_video_all())); + videoMenu->addSeparator(); + + QMenu *menu4 = videoMenu->addMenu("切换到4画面"); + menu4->addAction("通道1-通道4", this, SLOT(show_video_4())); + menu4->addAction("通道5-通道8", this, SLOT(show_video_4())); + menu4->addAction("通道9-通道12", this, SLOT(show_video_4())); + menu4->addAction("通道13-通道16", this, SLOT(show_video_4())); + + QMenu *menu6 = videoMenu->addMenu("切换到6画面"); + menu6->addAction("通道1-通道6", this, SLOT(show_video_6())); + menu6->addAction("通道6-通道11", this, SLOT(show_video_6())); + menu6->addAction("通道11-通道16", this, SLOT(show_video_6())); + + QMenu *menu8 = videoMenu->addMenu("切换到8画面"); + menu8->addAction("通道1-通道8", this, SLOT(show_video_8())); + menu8->addAction("通道9-通道16", this, SLOT(show_video_8())); + + QMenu *menu9 = videoMenu->addMenu("切换到9画面"); + menu9->addAction("通道1-通道9", this, SLOT(show_video_9())); + menu9->addAction("通道8-通道16", this, SLOT(show_video_9())); + + videoMenu->addAction("切换到16画面", this, SLOT(show_video_16())); +} + +void frmMain::play_video_all() +{ + +} + +void frmMain::snapshot_video_one() +{ + +} + +void frmMain::snapshot_video_all() +{ + +} + +void frmMain::show_video_all() +{ + if (videoType == "1_4") { + change_video_4(0); + } else if (videoType == "5_8") { + change_video_4(4); + } else if (videoType == "9_12") { + change_video_4(8); + } else if (videoType == "13_16") { + change_video_4(12); + } else if (videoType == "1_6") { + change_video_6(0); + } else if (videoType == "6_11") { + change_video_6(5); + } else if (videoType == "11_16") { + change_video_6(10); + } else if (videoType == "1_8") { + change_video_8(0); + } else if (videoType == "9_16") { + change_video_8(8); + } else if (videoType == "1_9") { + change_video_9(0); + } else if (videoType == "8_16") { + change_video_9(7); + } else if (videoType == "1_16") { + change_video_16(0); + } +} + +void frmMain::show_video_4() +{ + videoMax = false; + QString videoType; + int index = 0; + + QAction *action = (QAction *)sender(); + QString name = action->text(); + + if (name == "通道1-通道4") { + index = 0; + videoType = "1_4"; + } else if (name == "通道5-通道8") { + index = 4; + videoType = "5_8"; + } else if (name == "通道9-通道12") { + index = 8; + videoType = "9_12"; + } else if (name == "通道13-通道16") { + index = 12; + videoType = "13_16"; + } + + if (this->videoType != videoType) { + this->videoType = videoType; + change_video_4(index); + } +} + +void frmMain::show_video_6() +{ + videoMax = false; + QString videoType; + int index = 0; + + QAction *action = (QAction *)sender(); + QString name = action->text(); + + if (name == "通道1-通道6") { + index = 0; + videoType = "1_6"; + } else if (name == "通道6-通道11") { + index = 5; + videoType = "6_11"; + } else if (name == "通道11-通道16") { + index = 10; + videoType = "11_16"; + } + + if (this->videoType != videoType) { + this->videoType = videoType; + change_video_6(index); + } +} + +void frmMain::show_video_8() +{ + videoMax = false; + QString videoType; + int index = 0; + + QAction *action = (QAction *)sender(); + QString name = action->text(); + + if (name == "通道1-通道8") { + index = 0; + videoType = "1_8"; + } else if (name == "通道9-通道16") { + index = 8; + videoType = "9_16"; + } + + if (this->videoType != videoType) { + this->videoType = videoType; + change_video_8(index); + } +} + +void frmMain::show_video_9() +{ + videoMax = false; + QString videoType; + int index = 0; + + QAction *action = (QAction *)sender(); + QString name = action->text(); + + if (name == "通道1-通道9") { + index = 0; + videoType = "1_9"; + } else if (name == "通道8-通道16") { + index = 7; + videoType = "8_16"; + } + + if (this->videoType != videoType) { + this->videoType = videoType; + change_video_9(index); + } +} + +void frmMain::show_video_16() +{ + videoMax = false; + QString videoType; + int index = 0; + videoType = "1_16"; + + if (this->videoType != videoType) { + this->videoType = videoType; + change_video_16(index); + } +} + +void frmMain::hide_video_all() +{ + for (int i = 0; i < videoCount; i++) { + ui->gridLayout->removeWidget(widgets.at(i)); + widgets.at(i)->setVisible(false); + } +} + +void frmMain::change_video(int index, int flag) +{ + int count = 0; + int row = 0; + int column = 0; + + for (int i = 0; i < videoCount; i++) { + if (i >= index) { + ui->gridLayout->addWidget(widgets.at(i), row, column); + widgets.at(i)->setVisible(true); + + count++; + column++; + if (column == flag) { + row++; + column = 0; + } + } + + if (count == (flag * flag)) { + break; + } + } +} + +void frmMain::change_video_4(int index) +{ + hide_video_all(); + change_video(index, 2); +} + +void frmMain::change_video_6(int index) +{ + hide_video_all(); + if (index == 0) { + ui->gridLayout->addWidget(widgets.at(0), 0, 0, 2, 2); + ui->gridLayout->addWidget(widgets.at(1), 0, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(2), 1, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(3), 2, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(4), 2, 1, 1, 1); + ui->gridLayout->addWidget(widgets.at(5), 2, 0, 1, 1); + + for (int i = 0; i < 6; i++) { + widgets.at(i)->setVisible(true); + } + } else if (index == 5) { + ui->gridLayout->addWidget(widgets.at(5), 0, 0, 2, 2); + ui->gridLayout->addWidget(widgets.at(6), 0, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(7), 1, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(8), 2, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(9), 2, 1, 1, 1); + ui->gridLayout->addWidget(widgets.at(10), 2, 0, 1, 1); + + for (int i = 5; i < 11; i++) { + widgets.at(i)->setVisible(true); + } + } else if (index == 10) { + ui->gridLayout->addWidget(widgets.at(10), 0, 0, 2, 2); + ui->gridLayout->addWidget(widgets.at(11), 0, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(12), 1, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(13), 2, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(14), 2, 1, 1, 1); + ui->gridLayout->addWidget(widgets.at(15), 2, 0, 1, 1); + + for (int i = 10; i < 16; i++) { + widgets.at(i)->setVisible(true); + } + } +} + +void frmMain::change_video_8(int index) +{ + hide_video_all(); + if (index == 0) { + ui->gridLayout->addWidget(widgets.at(0), 0, 0, 3, 3); + ui->gridLayout->addWidget(widgets.at(1), 0, 3, 1, 1); + ui->gridLayout->addWidget(widgets.at(2), 1, 3, 1, 1); + ui->gridLayout->addWidget(widgets.at(3), 2, 3, 1, 1); + ui->gridLayout->addWidget(widgets.at(4), 3, 3, 1, 1); + ui->gridLayout->addWidget(widgets.at(5), 3, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(6), 3, 1, 1, 1); + ui->gridLayout->addWidget(widgets.at(7), 3, 0, 1, 1); + + for (int i = 0; i < 8; i++) { + widgets.at(i)->setVisible(true); + } + } else if (index == 8) { + ui->gridLayout->addWidget(widgets.at(8), 0, 0, 3, 3); + ui->gridLayout->addWidget(widgets.at(9), 0, 3, 1, 1); + ui->gridLayout->addWidget(widgets.at(10), 1, 3, 1, 1); + ui->gridLayout->addWidget(widgets.at(11), 2, 3, 1, 1); + ui->gridLayout->addWidget(widgets.at(12), 3, 3, 1, 1); + ui->gridLayout->addWidget(widgets.at(13), 3, 2, 1, 1); + ui->gridLayout->addWidget(widgets.at(14), 3, 1, 1, 1); + ui->gridLayout->addWidget(widgets.at(15), 3, 0, 1, 1); + + for (int i = 8; i < 16; i++) { + widgets.at(i)->setVisible(true); + } + } +} + +void frmMain::change_video_9(int index) +{ + hide_video_all(); + change_video(index, 3); +} + +void frmMain::change_video_16(int index) +{ + hide_video_all(); + change_video(index, 4); +} diff --git a/video_splite/frmmain.h b/video_splite/frmmain.h new file mode 100644 index 0000000..949adc7 --- /dev/null +++ b/video_splite/frmmain.h @@ -0,0 +1,59 @@ +#ifndef FRMMAIN_H +#define FRMMAIN_H + +#include +#if (QT_VERSION > QT_VERSION_CHECK(5,0,0)) +#include +#endif + +namespace Ui +{ +class frmMain; +} + +class frmMain : public QWidget +{ + Q_OBJECT + +public: + explicit frmMain(QWidget *parent = 0); + ~frmMain(); + +protected: + bool eventFilter(QObject *watched, QEvent *event); + +private: + Ui::frmMain *ui; + + bool videoMax; + int videoCount; + QString videoType; + QMenu *videoMenu; + QList widgets; + +private slots: + void initForm(); + void initMenu(); + +private slots: + void play_video_all(); + void snapshot_video_one(); + void snapshot_video_all(); + + void show_video_all(); + void show_video_4(); + void show_video_6(); + void show_video_8(); + void show_video_9(); + void show_video_16(); + + void hide_video_all(); + void change_video(int index, int flag); + void change_video_4(int index); + void change_video_6(int index); + void change_video_8(int index); + void change_video_9(int index); + void change_video_16(int index); +}; + +#endif // FRMMAIN_H diff --git a/video_splite/frmmain.ui b/video_splite/frmmain.ui new file mode 100644 index 0000000..feac423 --- /dev/null +++ b/video_splite/frmmain.ui @@ -0,0 +1,64 @@ + + + frmMain + + + + 0 + 0 + 1000 + 750 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 1 + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + + + + + + + diff --git a/video_splite/main.cpp b/video_splite/main.cpp new file mode 100644 index 0000000..7bb71e4 --- /dev/null +++ b/video_splite/main.cpp @@ -0,0 +1,31 @@ +#include "frmmain.h" +#include "qcoreapplication.h" + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + + QFont font; + font.setFamily("MicroSoft Yahei"); + font.setPixelSize(12); + a.setFont(font); + +#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0)) +#if _MSC_VER + QTextCodec *codec = QTextCodec::codecForName("gbk"); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); +#endif + QTextCodec::setCodecForLocale(codec); + QTextCodec::setCodecForCStrings(codec); + QTextCodec::setCodecForTr(codec); +#else + QTextCodec *codec = QTextCodec::codecForName("utf-8"); + QTextCodec::setCodecForLocale(codec); +#endif + + frmMain w; + w.showMaximized(); + + return a.exec(); +} diff --git a/video_splite/main.qrc b/video_splite/main.qrc new file mode 100644 index 0000000..fdc0fea --- /dev/null +++ b/video_splite/main.qrc @@ -0,0 +1,5 @@ + + + bg_novideo.png + + diff --git a/video_splite/snap/QQ截图20180430191412.png b/video_splite/snap/QQ截图20180430191412.png new file mode 100644 index 0000000..380d638 Binary files /dev/null and b/video_splite/snap/QQ截图20180430191412.png differ diff --git a/video_splite/snap/QQ截图20180430191420.png b/video_splite/snap/QQ截图20180430191420.png new file mode 100644 index 0000000..021b897 Binary files /dev/null and b/video_splite/snap/QQ截图20180430191420.png differ diff --git a/video_splite/snap/QQ截图20180430191429.png b/video_splite/snap/QQ截图20180430191429.png new file mode 100644 index 0000000..629d863 Binary files /dev/null and b/video_splite/snap/QQ截图20180430191429.png differ diff --git a/video_splite/snap/QQ截图20180430191440.png b/video_splite/snap/QQ截图20180430191440.png new file mode 100644 index 0000000..774e325 Binary files /dev/null and b/video_splite/snap/QQ截图20180430191440.png differ diff --git a/video_splite/snap/QQ截图20180430191448.png b/video_splite/snap/QQ截图20180430191448.png new file mode 100644 index 0000000..f7cd364 Binary files /dev/null and b/video_splite/snap/QQ截图20180430191448.png differ diff --git a/video_splite/snap/QQ截图20180430191527.png b/video_splite/snap/QQ截图20180430191527.png new file mode 100644 index 0000000..3cb551b Binary files /dev/null and b/video_splite/snap/QQ截图20180430191527.png differ diff --git a/video_splite/video_splite.pro b/video_splite/video_splite.pro new file mode 100644 index 0000000..80866e1 --- /dev/null +++ b/video_splite/video_splite.pro @@ -0,0 +1,24 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2016-09-29T09:37:26 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = video_splite +TEMPLATE = app +MOC_DIR = temp/moc +RCC_DIR = temp/rcc +UI_DIR = temp/ui +OBJECTS_DIR = temp/obj +DESTDIR = bin + +SOURCES += main.cpp +SOURCES += frmmain.cpp +HEADERS += frmmain.h +FORMS += frmmain.ui +RESOURCES += main.qrc +CONFIG += warn_off