修正部分错误

This commit is contained in:
feiyangqingyun
2020-09-26 10:15:33 +08:00
parent 2dec41afa7
commit bd33a53808
7 changed files with 574 additions and 388 deletions

View File

@@ -1,13 +1,14 @@
#include "quiwidget.h" #include "quiwidget.h"
#ifdef Q_OS_ANDROID
#include "qandroid.h"
#endif
#ifdef __arm__
#ifdef arma7 #ifdef arma7
#define TOOL true #define TOOL true
#else #else
#define TOOL false #define TOOL false
#endif #endif
#else
#define TOOL false
#endif
QUIWidget::QUIWidget(QWidget *parent) : QDialog(parent) QUIWidget::QUIWidget(QWidget *parent) : QDialog(parent)
{ {
@@ -17,7 +18,7 @@ QUIWidget::QUIWidget(QWidget *parent) : QDialog(parent)
} }
QUIWidget::~QUIWidget() QUIWidget::~QUIWidget()
{ {
} }
bool QUIWidget::eventFilter(QObject *watched, QEvent *event) bool QUIWidget::eventFilter(QObject *watched, QEvent *event)
@@ -34,7 +35,7 @@ bool QUIWidget::eventFilter(QObject *watched, QEvent *event)
} else if (mouseEvent->type() == QEvent::MouseButtonRelease) { } else if (mouseEvent->type() == QEvent::MouseButtonRelease) {
mousePressed = false; mousePressed = false;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
if (this->property("canMove").toBool()) { if (this->property("canMove").toBool()) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
} }
@@ -369,7 +370,7 @@ void QUIWidget::setIconMain(const QChar &str, quint32 size)
void QUIWidget::setPixmap(QUIWidget::Widget widget, const QString &file, const QSize &size) void QUIWidget::setPixmap(QUIWidget::Widget widget, const QString &file, const QSize &size)
{ {
//按照宽高比自动缩放 //按照宽高比自动缩放
QPixmap pix = QPixmap(file); QPixmap pix = QPixmap(file);
pix = pix.scaled(size, Qt::KeepAspectRatio); pix = pix.scaled(size, Qt::KeepAspectRatio);
if (widget == QUIWidget::Lab_Ico) { if (widget == QUIWidget::Lab_Ico) {
this->labIco->setPixmap(pix); this->labIco->setPixmap(pix);
@@ -454,12 +455,12 @@ void QUIWidget::setExitAll(bool exitAll)
void QUIWidget::setMainWidget(QWidget *mainWidget) void QUIWidget::setMainWidget(QWidget *mainWidget)
{ {
//一个QUI窗体对象只能设置一个主窗体 //一个QUI窗体对象只能设置一个主窗体
if (this->mainWidget == 0) { if (this->mainWidget == 0) {
//将子窗体添加到布局 //将子窗体添加到布局
this->widget->layout()->addWidget(mainWidget); this->widget->layout()->addWidget(mainWidget);
//自动设置大小 //自动设置大小
resize(mainWidget->width(), mainWidget->height() + this->widgetTitle->height()); resize(mainWidget->width(), mainWidget->height() + this->widgetTitle->height());
this->mainWidget = mainWidget; this->mainWidget = mainWidget;
} }
} }
@@ -549,7 +550,7 @@ bool QUIMessageBox::eventFilter(QObject *watched, QEvent *event)
mousePressed = false; mousePressed = false;
return true; return true;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
return true; return true;
} }
@@ -573,7 +574,6 @@ void QUIMessageBox::initControl()
sizePolicy.setVerticalStretch(0); sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth()); sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
widgetTitle->setSizePolicy(sizePolicy); widgetTitle->setSizePolicy(sizePolicy);
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
horizontalLayout3 = new QHBoxLayout(widgetTitle); horizontalLayout3 = new QHBoxLayout(widgetTitle);
horizontalLayout3->setSpacing(0); horizontalLayout3->setSpacing(0);
horizontalLayout3->setObjectName(QString::fromUtf8("horizontalLayout3")); horizontalLayout3->setObjectName(QString::fromUtf8("horizontalLayout3"));
@@ -585,7 +585,6 @@ void QUIMessageBox::initControl()
sizePolicy1.setVerticalStretch(0); sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
labIco->setSizePolicy(sizePolicy1); labIco->setSizePolicy(sizePolicy1);
labIco->setMinimumSize(QSize(TitleMinSize, 0));
labIco->setAlignment(Qt::AlignCenter); labIco->setAlignment(Qt::AlignCenter);
horizontalLayout3->addWidget(labIco); horizontalLayout3->addWidget(labIco);
@@ -622,8 +621,6 @@ void QUIMessageBox::initControl()
sizePolicy3.setVerticalStretch(0); sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth()); sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
btnMenu_Close->setSizePolicy(sizePolicy3); btnMenu_Close->setSizePolicy(sizePolicy3);
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor)); btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
btnMenu_Close->setFocusPolicy(Qt::NoFocus); btnMenu_Close->setFocusPolicy(Qt::NoFocus);
btnMenu_Close->setFlat(true); btnMenu_Close->setFlat(true);
@@ -704,31 +701,19 @@ void QUIMessageBox::initControl()
void QUIMessageBox::initForm() void QUIMessageBox::initForm()
{ {
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
IconHelper::Instance()->setIcon(btnMenu_Close, QUIConfig::IconClose, QUIConfig::FontSize);
this->setProperty("form", true);
this->widgetTitle->setProperty("form", "title");
if (TOOL) {
this->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
} else {
this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
}
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
this->setFixedSize(DialogMinWidth, DialogMinHeight);
labIcoMain->setFixedSize(TitleMinSize, TitleMinSize);
#ifdef __arm__ #ifdef __arm__
int width = 90; int width = 90;
int iconWidth = 22; int iconWidth = 22;
int iconHeight = 22; int iconHeight = 22;
this->setFixedSize(350, 180);
labIcoMain->setFixedSize(40, 40);
#else #else
int width = 80; int width = 80;
int iconWidth = 18; int iconWidth = 18;
int iconHeight = 18; int iconHeight = 18;
this->setFixedSize(280, 150);
labIcoMain->setFixedSize(30, 30);
#endif #endif
QList<QPushButton *> btns = this->frame->findChildren<QPushButton *>(); QList<QPushButton *> btns = this->frame->findChildren<QPushButton *>();
@@ -821,6 +806,13 @@ void QUIMessageBox::setMessage(const QString &msg, int type, int closeSec)
this->labInfo->setText(msg); this->labInfo->setText(msg);
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
//设置对话框的大小总以最合适的大小显示
if (msg.length() < 70) {
this->layout()->setSizeConstraint(QLayout::SetMinimumSize);
this->setFixedSize(DialogMinWidth, DialogMinHeight);
} else {
this->layout()->setSizeConstraint(QLayout::SetFixedSize);
}
} }
@@ -871,7 +863,7 @@ bool QUITipBox::eventFilter(QObject *watched, QEvent *event)
mousePressed = false; mousePressed = false;
return true; return true;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
return true; return true;
} }
@@ -901,7 +893,6 @@ void QUITipBox::initControl()
horizontalLayout2->setContentsMargins(0, 0, 0, 0); horizontalLayout2->setContentsMargins(0, 0, 0, 0);
labIco = new QLabel(widgetTitle); labIco = new QLabel(widgetTitle);
labIco->setObjectName(QString::fromUtf8("labIco")); labIco->setObjectName(QString::fromUtf8("labIco"));
labIco->setMinimumSize(QSize(TitleMinSize, 0));
labIco->setAlignment(Qt::AlignCenter); labIco->setAlignment(Qt::AlignCenter);
horizontalLayout2->addWidget(labIco); horizontalLayout2->addWidget(labIco);
@@ -917,6 +908,7 @@ void QUITipBox::initControl()
sizePolicy1.setVerticalStretch(0); sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(labTime->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(labTime->sizePolicy().hasHeightForWidth());
labTime->setSizePolicy(sizePolicy1); labTime->setSizePolicy(sizePolicy1);
labTime->setAlignment(Qt::AlignCenter);
horizontalLayout2->addWidget(labTime); horizontalLayout2->addWidget(labTime);
widgetMenu = new QWidget(widgetTitle); widgetMenu = new QWidget(widgetTitle);
@@ -937,8 +929,6 @@ void QUITipBox::initControl()
sizePolicy3.setVerticalStretch(0); sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth()); sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
btnMenu_Close->setSizePolicy(sizePolicy3); btnMenu_Close->setSizePolicy(sizePolicy3);
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor)); btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
btnMenu_Close->setFocusPolicy(Qt::NoFocus); btnMenu_Close->setFocusPolicy(Qt::NoFocus);
btnMenu_Close->setFlat(true); btnMenu_Close->setFlat(true);
@@ -963,12 +953,7 @@ void QUITipBox::initControl()
void QUITipBox::initForm() void QUITipBox::initForm()
{ {
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
IconHelper::Instance()->setIcon(btnMenu_Close, QUIConfig::IconClose, QUIConfig::FontSize);
this->setProperty("form", true);
this->widgetTitle->setProperty("form", "title");
this->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
#ifdef __arm__ #ifdef __arm__
@@ -1039,7 +1024,7 @@ void QUITipBox::setTip(const QString &title, const QString &tip, bool fullScreen
this->labInfo->setAlignment(center ? Qt::AlignCenter : Qt::AlignLeft); this->labInfo->setAlignment(center ? Qt::AlignCenter : Qt::AlignLeft);
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
QRect rect = fullScreen ? qApp->desktop()->availableGeometry() : qApp->desktop()->geometry(); QRect rect = fullScreen ? qApp->desktop()->geometry() : qApp->desktop()->availableGeometry();
int width = rect.width(); int width = rect.width();
int height = rect.height(); int height = rect.height();
int x = width - this->width(); int x = width - this->width();
@@ -1118,7 +1103,6 @@ void QUIInputBox::initControl()
sizePolicy.setVerticalStretch(0); sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth()); sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
widgetTitle->setSizePolicy(sizePolicy); widgetTitle->setSizePolicy(sizePolicy);
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
horizontalLayout1 = new QHBoxLayout(widgetTitle); horizontalLayout1 = new QHBoxLayout(widgetTitle);
horizontalLayout1->setSpacing(0); horizontalLayout1->setSpacing(0);
horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1")); horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1"));
@@ -1130,7 +1114,6 @@ void QUIInputBox::initControl()
sizePolicy1.setVerticalStretch(0); sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
labIco->setSizePolicy(sizePolicy1); labIco->setSizePolicy(sizePolicy1);
labIco->setMinimumSize(QSize(TitleMinSize, 0));
labIco->setAlignment(Qt::AlignCenter); labIco->setAlignment(Qt::AlignCenter);
horizontalLayout1->addWidget(labIco); horizontalLayout1->addWidget(labIco);
@@ -1167,8 +1150,6 @@ void QUIInputBox::initControl()
sizePolicy3.setVerticalStretch(0); sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth()); sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
btnMenu_Close->setSizePolicy(sizePolicy3); btnMenu_Close->setSizePolicy(sizePolicy3);
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor)); btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
btnMenu_Close->setFocusPolicy(Qt::NoFocus); btnMenu_Close->setFocusPolicy(Qt::NoFocus);
btnMenu_Close->setFlat(true); btnMenu_Close->setFlat(true);
@@ -1238,17 +1219,7 @@ void QUIInputBox::initControl()
void QUIInputBox::initForm() void QUIInputBox::initForm()
{ {
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
IconHelper::Instance()->setIcon(btnMenu_Close, QUIConfig::IconClose, QUIConfig::FontSize);
this->setProperty("form", true);
this->widgetTitle->setProperty("form", "title");
if (TOOL) {
this->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
} else {
this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
}
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
#ifdef __arm__ #ifdef __arm__
@@ -1347,7 +1318,7 @@ bool QUIInputBox::eventFilter(QObject *watched, QEvent *event)
mousePressed = false; mousePressed = false;
return true; return true;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
return true; return true;
} }
@@ -1422,7 +1393,7 @@ bool QUIDateSelect::eventFilter(QObject *watched, QEvent *event)
mousePressed = false; mousePressed = false;
return true; return true;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
return true; return true;
} }
@@ -1446,7 +1417,6 @@ void QUIDateSelect::initControl()
sizePolicy.setVerticalStretch(0); sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth()); sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
widgetTitle->setSizePolicy(sizePolicy); widgetTitle->setSizePolicy(sizePolicy);
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
horizontalLayout1 = new QHBoxLayout(widgetTitle); horizontalLayout1 = new QHBoxLayout(widgetTitle);
horizontalLayout1->setSpacing(0); horizontalLayout1->setSpacing(0);
horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1")); horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1"));
@@ -1458,7 +1428,6 @@ void QUIDateSelect::initControl()
sizePolicy1.setVerticalStretch(0); sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
labIco->setSizePolicy(sizePolicy1); labIco->setSizePolicy(sizePolicy1);
labIco->setMinimumSize(QSize(TitleMinSize, 0));
labIco->setAlignment(Qt::AlignCenter); labIco->setAlignment(Qt::AlignCenter);
horizontalLayout1->addWidget(labIco); horizontalLayout1->addWidget(labIco);
@@ -1487,8 +1456,6 @@ void QUIDateSelect::initControl()
sizePolicy3.setVerticalStretch(0); sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth()); sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
btnMenu_Close->setSizePolicy(sizePolicy3); btnMenu_Close->setSizePolicy(sizePolicy3);
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor)); btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
btnMenu_Close->setFocusPolicy(Qt::NoFocus); btnMenu_Close->setFocusPolicy(Qt::NoFocus);
btnMenu_Close->setFlat(true); btnMenu_Close->setFlat(true);
@@ -1583,17 +1550,7 @@ void QUIDateSelect::initControl()
void QUIDateSelect::initForm() void QUIDateSelect::initForm()
{ {
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
IconHelper::Instance()->setIcon(btnMenu_Close, QUIConfig::IconClose, QUIConfig::FontSize);
this->setProperty("form", true);
this->widgetTitle->setProperty("form", "title");
if (TOOL) {
this->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
} else {
this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
}
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
#ifdef __arm__ #ifdef __arm__
@@ -2053,14 +2010,14 @@ TrayIcon::TrayIcon(QObject *parent) : QObject(parent)
void TrayIcon::iconIsActived(QSystemTrayIcon::ActivationReason reason) void TrayIcon::iconIsActived(QSystemTrayIcon::ActivationReason reason)
{ {
switch (reason) { switch (reason) {
case QSystemTrayIcon::Trigger: case QSystemTrayIcon::Trigger:
case QSystemTrayIcon::DoubleClick: { case QSystemTrayIcon::DoubleClick: {
mainWidget->showNormal(); mainWidget->showNormal();
break; break;
} }
default: default:
break; break;
} }
} }
@@ -2141,6 +2098,7 @@ QString QUIHelper::appName()
static QString name; static QString name;
if (name.isEmpty()) { if (name.isEmpty()) {
name = qApp->applicationFilePath(); name = qApp->applicationFilePath();
//下面的方法主要为了过滤安卓的路径 lib程序名_armeabi-v7a
QStringList list = name.split("/"); QStringList list = name.split("/");
name = list.at(list.count() - 1).split(".").at(0); name = list.at(list.count() - 1).split(".").at(0);
} }
@@ -2151,7 +2109,8 @@ QString QUIHelper::appName()
QString QUIHelper::appPath() QString QUIHelper::appPath()
{ {
#ifdef Q_OS_ANDROID #ifdef Q_OS_ANDROID
return QString("/sdcard/Android/%1").arg(appName()); //return QString("/sdcard/Android/%1").arg(appName());
return QString("/storage/emulated/0/%1").arg(appName());
#else #else
return qApp->applicationDirPath(); return qApp->applicationDirPath();
#endif #endif
@@ -2195,8 +2154,12 @@ void QUIHelper::newDir(const QString &dirName)
} }
} }
void QUIHelper::writeInfo(const QString &info, const QString &filePath) void QUIHelper::writeInfo(const QString &info, bool needWrite, const QString &filePath)
{ {
if (!needWrite) {
return;
}
QString fileName = QString("%1/%2/%3_runinfo_%4.txt").arg(QUIHelper::appPath()) QString fileName = QString("%1/%2/%3_runinfo_%4.txt").arg(QUIHelper::appPath())
.arg(filePath).arg(QUIHelper::appName()).arg(QDate::currentDate().toString("yyyyMM")); .arg(filePath).arg(QUIHelper::appName()).arg(QDate::currentDate().toString("yyyyMM"));
@@ -2207,10 +2170,12 @@ void QUIHelper::writeInfo(const QString &info, const QString &filePath)
file.close(); file.close();
} }
void QUIHelper::writeError(const QString &info, const QString &filePath) void QUIHelper::writeError(const QString &info, bool needWrite, const QString &filePath)
{ {
//正式运行屏蔽掉输出错误信息,调试阶段才需要 if (!needWrite) {
return; return;
}
QString fileName = QString("%1/%2/%3_runerror_%4.txt").arg(QUIHelper::appPath()) QString fileName = QString("%1/%2/%3_runerror_%4.txt").arg(QUIHelper::appPath())
.arg(filePath).arg(QUIHelper::appName()).arg(QDate::currentDate().toString("yyyyMM")); .arg(filePath).arg(QUIHelper::appName()).arg(QDate::currentDate().toString("yyyyMM"));
@@ -2221,10 +2186,36 @@ void QUIHelper::writeError(const QString &info, const QString &filePath)
file.close(); file.close();
} }
void QUIHelper::setFramelessForm(QWidget *widgetMain, QWidget *widgetTitle, QLabel *labIco, QPushButton *btnClose, bool tool)
{
labIco->setFixedWidth(TitleMinSize);
btnClose->setFixedWidth(TitleMinSize);
widgetTitle->setFixedHeight(TitleMinSize);
widgetTitle->setProperty("form", "title");
widgetMain->setProperty("form", true);
widgetMain->setProperty("canMove", true);
#ifdef __arm__
if (tool) {
widgetMain->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
} else {
widgetMain->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
}
#else
if (tool) {
widgetMain->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
} else {
widgetMain->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
}
#endif
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2);
IconHelper::Instance()->setIcon(btnClose, QUIConfig::IconClose, QUIConfig::FontSize);
}
void QUIHelper::setStyle(QUIWidget::Style style) void QUIHelper::setStyle(QUIWidget::Style style)
{ {
QString qssFile = ":/qss/lightblue.css"; QString qssFile = ":/qss/lightblue.css";
if (style == QUIWidget::Style_Silvery) { if (style == QUIWidget::Style_Silvery) {
qssFile = ":/qss/silvery.css"; qssFile = ":/qss/silvery.css";
} else if (style == QUIWidget::Style_Blue) { } else if (style == QUIWidget::Style_Blue) {
@@ -2260,7 +2251,6 @@ void QUIHelper::setStyle(QUIWidget::Style style)
} }
QFile file(qssFile); QFile file(qssFile);
if (file.open(QFile::ReadOnly)) { if (file.open(QFile::ReadOnly)) {
QString qss = QLatin1String(file.readAll()); QString qss = QLatin1String(file.readAll());
QString paletteColor = qss.mid(20, 7); QString paletteColor = qss.mid(20, 7);
@@ -2308,7 +2298,6 @@ void QUIHelper::getQssColor(const QString &qss, QString &textColor, QString &pan
QString &darkColorStart, QString &darkColorEnd, QString &highColor) QString &darkColorStart, QString &darkColorEnd, QString &highColor)
{ {
QString str = qss; QString str = qss;
QString flagTextColor = "TextColor:"; QString flagTextColor = "TextColor:";
int indexTextColor = str.indexOf(flagTextColor); int indexTextColor = str.indexOf(flagTextColor);
if (indexTextColor >= 0) { if (indexTextColor >= 0) {
@@ -2398,7 +2387,6 @@ QPixmap QUIHelper::ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, i
QPainter painter; QPainter painter;
painter.begin(&resultImg); painter.begin(&resultImg);
if (!resultImg.isNull()) { if (!resultImg.isNull()) {
painter.drawPixmap(0, 0, pix1); painter.drawPixmap(0, 0, pix1);
painter.drawPixmap(horzSplit, 0, pix2); painter.drawPixmap(horzSplit, 0, pix2);
@@ -2414,27 +2402,55 @@ QPixmap QUIHelper::ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, i
} }
painter.end(); painter.end();
return resultImg; return resultImg;
} }
void QUIHelper::setLabStyle(QLabel *lab, quint8 type) void QUIHelper::setLabStyle(QLabel *lab, quint8 type, const QString &bgColor, const QString &textColor)
{ {
QString qssDisable = QString("QLabel::disabled{background:none;color:%1;}").arg(QUIConfig::BorderColor); QString colorBg = bgColor;
QString qssRed = "QLabel{border:none;background-color:rgb(214,64,48);color:rgb(255,255,255);}" + qssDisable; QString colorText = textColor;
QString qssGreen = "QLabel{border:none;background-color:rgb(46,138,87);color:rgb(255,255,255);}" + qssDisable;
QString qssBlue = "QLabel{border:none;background-color:rgb(67,122,203);color:rgb(255,255,255);}" + qssDisable;
QString qssDark = "QLabel{border:none;background-color:rgb(75,75,75);color:rgb(255,255,255);}" + qssDisable;
if (type == 0) { //如果设置了新颜色则启用新颜色
lab->setStyleSheet(qssRed); if (bgColor.isEmpty() || textColor.isEmpty()) {
} else if (type == 1) { if (type == 0) {
lab->setStyleSheet(qssGreen); colorBg = "#D64D54";
} else if (type == 2) { colorText = "#FFFFFF";
lab->setStyleSheet(qssBlue); } else if (type == 1) {
} else if (type == 3) { colorBg = "#17A086";
lab->setStyleSheet(qssDark); colorText = "#FFFFFF";
} else if (type == 2) {
colorBg = "#47A4E9";
colorText = "#FFFFFF";
} else if (type == 3) {
colorBg = "#282D30";
colorText = "#FFFFFF";
} else if (type == 4) {
colorBg = "#0E99A0";
colorText = "#FFFFFF";
} else if (type == 5) {
colorBg = "#A279C5";
colorText = "#FFFFFF";
} else if (type == 6) {
colorBg = "#8C2957";
colorText = "#FFFFFF";
} else if (type == 7) {
colorBg = "#04567E";
colorText = "#FFFFFF";
} else if (type == 8) {
colorBg = "#FD8B28";
colorText = "#FFFFFF";
} else if (type == 9) {
colorBg = "#5580A2";
colorText = "#FFFFFF";
}
} }
QStringList qss;
//禁用颜色
qss << QString("QLabel::disabled{background:none;color:%1;}").arg(QUIConfig::BorderColor);
//正常颜色
qss << QString("QLabel{border:none;background-color:%1;color:%2;}").arg(colorBg).arg(colorText);
lab->setStyleSheet(qss.join(""));
} }
void QUIHelper::setFormInCenter(QWidget *frm) void QUIHelper::setFormInCenter(QWidget *frm)
@@ -2474,9 +2490,15 @@ void QUIHelper::setCode()
void QUIHelper::sleep(int msec) void QUIHelper::sleep(int msec)
{ {
QTime dieTime = QTime::currentTime().addMSecs(msec); if (msec > 0) {
while (QTime::currentTime() < dieTime) { #if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
QCoreApplication::processEvents(QEventLoop::AllEvents, 100); QTime endTime = QTime::currentTime().addMSecs(msec);
while (QTime::currentTime() < endTime) {
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
#else
QThread::msleep(msec);
#endif
} }
} }
@@ -2687,8 +2709,8 @@ QByteArray QUIHelper::ushortToByteRec(ushort i)
{ {
QByteArray result; QByteArray result;
result.resize(2); result.resize(2);
result[0] = (uchar) (0x000000ff & i); result[0] = (uchar)(0x000000ff & i);
result[1] = (uchar) ((0x0000ff00 & i) >> 8); result[1] = (uchar)((0x0000ff00 & i) >> 8);
return result; return result;
} }
@@ -2751,15 +2773,6 @@ uchar QUIHelper::getCheckCode(const QByteArray &data)
return temp % 256; return temp % 256;
} }
QString QUIHelper::getValue(quint8 value)
{
QString result = QString::number(value);
if (result.length() <= 1) {
result = QString("0%1").arg(result);
}
return result;
}
//函数功能计算CRC16 //函数功能计算CRC16
//参数1*data 16位CRC校验数据 //参数1*data 16位CRC校验数据
//参数2len 数据流长度 //参数2len 数据流长度
@@ -2771,8 +2784,7 @@ quint16 QUIHelper::getRevCrc_16(quint8 *data, int len, quint16 init, const quint
{ {
quint16 cRc_16 = init; quint16 cRc_16 = init;
quint8 temp; quint8 temp;
while (len-- > 0) {
while(len-- > 0) {
temp = cRc_16 >> 8; temp = cRc_16 >> 8;
cRc_16 = (cRc_16 << 8) ^ table[(temp ^ *data++) & 0xff]; cRc_16 = (cRc_16 << 8) ^ table[(temp ^ *data++) & 0xff];
} }
@@ -2785,8 +2797,7 @@ quint16 QUIHelper::getCrc_16(quint8 *data, int len, quint16 init, const quint16
{ {
quint16 cRc_16 = init; quint16 cRc_16 = init;
quint8 temp; quint8 temp;
while (len-- > 0) {
while(len-- > 0) {
temp = cRc_16 & 0xff; temp = cRc_16 & 0xff;
cRc_16 = (cRc_16 >> 8) ^ table[(temp ^ *data++) & 0xff]; cRc_16 = (cRc_16 >> 8) ^ table[(temp ^ *data++) & 0xff];
} }
@@ -2847,7 +2858,6 @@ QString QUIHelper::byteArrayToAsciiStr(const QByteArray &data)
{ {
QString temp; QString temp;
int len = data.size(); int len = data.size();
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
//0x20为空格,空格以下都是不可见字符 //0x20为空格,空格以下都是不可见字符
char b = data.at(i); char b = data.at(i);
@@ -3278,12 +3288,33 @@ QString QUIHelper::byteArrayToHexStr(const QByteArray &data)
QString QUIHelper::getSaveName(const QString &filter, QString defaultDir) QString QUIHelper::getSaveName(const QString &filter, QString defaultDir)
{ {
return QFileDialog::getSaveFileName(0, "选择文件", defaultDir , filter); return QFileDialog::getSaveFileName(0, "选择文件", defaultDir, filter);
} }
QString QUIHelper::getFileName(const QString &filter, QString defaultDir) QString QUIHelper::getFileName(const QString &filter, QString defaultDir)
{ {
return QFileDialog::getOpenFileName(0, "选择文件", defaultDir , filter); return QFileDialog::getOpenFileName(0, "选择文件", defaultDir, filter);
}
QString QUIHelper::saveFileName(const QString &filter, const QString &defaultDir, const QString &fileName)
{
QString file;
QFileDialog dialog;
dialog.setFixedSize(900, 600);
dialog.setWindowModality(Qt::WindowModal);
dialog.setWindowTitle("保存文件");
dialog.setLabelText(QFileDialog::Accept, "保存(&S)");
dialog.setLabelText(QFileDialog::Reject, "取消(&C)");
dialog.selectFile(fileName);
dialog.setNameFilter(filter);
dialog.setDirectory(defaultDir);
if (dialog.exec() == 1) {
file = dialog.selectedFiles().value(0);
file = QFileInfo(file).suffix().isEmpty() ? "" : file;
}
return file;
} }
QStringList QUIHelper::getFileNames(const QString &filter, QString defaultDir) QStringList QUIHelper::getFileNames(const QString &filter, QString defaultDir)
@@ -3361,11 +3392,21 @@ void QUIHelper::deleteDirectory(const QString &path)
bool QUIHelper::ipLive(const QString &ip, int port, int timeout) bool QUIHelper::ipLive(const QString &ip, int port, int timeout)
{ {
QTcpSocket tcpClient; //局部的事件循环,不卡主界面
tcpClient.abort(); QEventLoop eventLoop;
tcpClient.connectToHost(ip, port);
//超时没有连接上则判断不在线 //设置超时
return tcpClient.waitForConnected(timeout); QTimer timer;
connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit()));
timer.setSingleShot(true);
timer.start(timeout);
QTcpSocket tcpSocket;
connect(&tcpSocket, SIGNAL(connected()), &eventLoop, SLOT(quit()));
tcpSocket.connectToHost(ip, port);
eventLoop.exec();
bool ok = (tcpSocket.state() == QAbstractSocket::ConnectedState);
return ok;
} }
QString QUIHelper::getHtml(const QString &url) QString QUIHelper::getHtml(const QString &url)
@@ -3394,17 +3435,9 @@ QString QUIHelper::getNetIP(const QString &webCode)
QString QUIHelper::getLocalIP() QString QUIHelper::getLocalIP()
{ {
QStringList ips;
QList<QHostAddress> addrs = QNetworkInterface::allAddresses();
foreach (QHostAddress addr, addrs) {
QString ip = addr.toString();
if (QUIHelper::isIP(ip)) {
ips << ip;
}
}
//优先取192开头的IP,如果获取不到IP则取127.0.0.1 //优先取192开头的IP,如果获取不到IP则取127.0.0.1
QString ip = "127.0.0.1"; QString ip = "127.0.0.1";
QStringList ips = getLocalIPs();
foreach (QString str, ips) { foreach (QString str, ips) {
if (str.startsWith("192.168.1") || str.startsWith("192")) { if (str.startsWith("192.168.1") || str.startsWith("192")) {
ip = str; ip = str;
@@ -3415,23 +3448,111 @@ QString QUIHelper::getLocalIP()
return ip; return ip;
} }
QStringList QUIHelper::getLocalIPs()
{
static QStringList ips;
if (ips.count() == 0) {
QList<QNetworkInterface> netInterfaces = QNetworkInterface::allInterfaces();
foreach (const QNetworkInterface &netInterface, netInterfaces) {
//移除虚拟机和抓包工具的虚拟网卡
QString humanReadableName = netInterface.humanReadableName().toLower();
if (humanReadableName.startsWith("vmware network adapter") || humanReadableName.startsWith("npcap loopback adapter")) {
continue;
}
//过滤当前网络接口
bool flag = (netInterface.flags() == (QNetworkInterface::IsUp | QNetworkInterface::IsRunning | QNetworkInterface::CanBroadcast | QNetworkInterface::CanMulticast));
if (flag) {
QList<QNetworkAddressEntry> addrs = netInterface.addressEntries();
foreach (QNetworkAddressEntry addr, addrs) {
//只取出IPV4的地址
if (addr.ip().protocol() == QAbstractSocket::IPv4Protocol) {
QString ip4 = addr.ip().toString();
if (ip4 != "127.0.0.1") {
ips.append(ip4);
}
}
}
}
}
}
return ips;
}
QString QUIHelper::urlToIP(const QString &url) QString QUIHelper::urlToIP(const QString &url)
{ {
QHostInfo host = QHostInfo::fromName(url); QHostInfo host = QHostInfo::fromName(url);
return host.addresses().at(0).toString(); return host.addresses().at(0).toString();
} }
QString QUIHelper::getValue(quint8 value)
{
QString result = QString::number(value);
if (result.length() <= 1) {
result = QString("0%1").arg(result);
}
return result;
}
bool QUIHelper::isWebOk() bool QUIHelper::isWebOk()
{ {
//能接通百度IP说明可以通外网 //能接通百度IP说明可以通外网
return ipLive("115.239.211.112", 80); return ipLive("115.239.211.112", 80);
} }
void QUIHelper::initTableView(QTableView *tableView, int rowHeight, bool headVisible, bool edit)
{
//奇数偶数行颜色交替
tableView->setAlternatingRowColors(false);
//垂直表头是否可见
tableView->verticalHeader()->setVisible(headVisible);
//选中一行表头是否加粗
tableView->horizontalHeader()->setHighlightSections(false);
//最后一行拉伸填充
tableView->horizontalHeader()->setStretchLastSection(true);
//行标题最小宽度尺寸
tableView->horizontalHeader()->setMinimumSectionSize(0);
//行标题最大高度
tableView->horizontalHeader()->setMaximumHeight(rowHeight);
//默认行高
tableView->verticalHeader()->setDefaultSectionSize(rowHeight);
//选中时一行整体选中
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
//只允许选择单个
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
//表头不可单击
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
tableView->horizontalHeader()->setSectionsClickable(false);
#else
tableView->horizontalHeader()->setClickable(false);
#endif
//鼠标按下即进入编辑模式
if (edit) {
tableView->setEditTriggers(QAbstractItemView::CurrentChanged | QAbstractItemView::DoubleClicked);
} else {
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
}
int QUIHelper::showMessageBox(const QString &info, int type, int closeSec, bool exec)
{
int result = 0;
if (type == 0) {
showMessageBoxInfo(info, closeSec, exec);
} else if (type == 1) {
showMessageBoxError(info, closeSec, exec);
} else if (type == 2) {
result = showMessageBoxQuestion(info);
}
return result;
}
void QUIHelper::showMessageBoxInfo(const QString &info, int closeSec, bool exec) void QUIHelper::showMessageBoxInfo(const QString &info, int closeSec, bool exec)
{ {
#ifdef Q_OS_ANDROID
QAndroid::Instance()->makeToast(info);
#else
if (exec) { if (exec) {
QUIMessageBox msg; QUIMessageBox msg;
msg.setMessage(info, 0, closeSec); msg.setMessage(info, 0, closeSec);
@@ -3440,14 +3561,10 @@ void QUIHelper::showMessageBoxInfo(const QString &info, int closeSec, bool exec)
QUIMessageBox::Instance()->setMessage(info, 0, closeSec); QUIMessageBox::Instance()->setMessage(info, 0, closeSec);
QUIMessageBox::Instance()->show(); QUIMessageBox::Instance()->show();
} }
#endif
} }
void QUIHelper::showMessageBoxError(const QString &info, int closeSec, bool exec) void QUIHelper::showMessageBoxError(const QString &info, int closeSec, bool exec)
{ {
#ifdef Q_OS_ANDROID
QAndroid::Instance()->makeToast(info);
#else
if (exec) { if (exec) {
QUIMessageBox msg; QUIMessageBox msg;
msg.setMessage(info, 2, closeSec); msg.setMessage(info, 2, closeSec);
@@ -3456,7 +3573,6 @@ void QUIHelper::showMessageBoxError(const QString &info, int closeSec, bool exec
QUIMessageBox::Instance()->setMessage(info, 2, closeSec); QUIMessageBox::Instance()->setMessage(info, 2, closeSec);
QUIMessageBox::Instance()->show(); QUIMessageBox::Instance()->show();
} }
#endif
} }
int QUIHelper::showMessageBoxQuestion(const QString &info) int QUIHelper::showMessageBoxQuestion(const QString &info)
@@ -3666,13 +3782,8 @@ QChar QUIConfig::IconNormal = QChar(0xf2d0);
QChar QUIConfig::IconClose = QChar(0xf00d); QChar QUIConfig::IconClose = QChar(0xf00d);
#ifdef __arm__ #ifdef __arm__
#ifdef Q_OS_ANDROID
QString QUIConfig::FontName = "Droid Sans Fallback";
int QUIConfig::FontSize = 15;
#else
QString QUIConfig::FontName = "WenQuanYi Micro Hei"; QString QUIConfig::FontName = "WenQuanYi Micro Hei";
int QUIConfig::FontSize = 18; int QUIConfig::FontSize = 18;
#endif
#else #else
QString QUIConfig::FontName = "Microsoft Yahei"; QString QUIConfig::FontName = "Microsoft Yahei";
int QUIConfig::FontSize = 12; int QUIConfig::FontSize = 12;

View File

@@ -9,16 +9,22 @@
#define STRDATETIME qPrintable(QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss")) #define STRDATETIME qPrintable(QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss"))
#define STRDATETIMEMS qPrintable(QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss-zzz")) #define STRDATETIMEMS qPrintable(QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss-zzz"))
//定义换行符
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
#define NEWLINE "\r\n" #define NEWLINE "\r\n"
#else #else
#define NEWLINE "\n" #define NEWLINE "\n"
#endif #endif
//定义无边框标题栏高度+对话框最小宽高
#ifdef __arm__ #ifdef __arm__
#define TitleMinSize 40 #define TitleMinSize 40
#define DialogMinWidth 350
#define DialogMinHeight 180
#else #else
#define TitleMinSize 30 #define TitleMinSize 30
#define DialogMinWidth 280
#define DialogMinHeight 150
#endif #endif
/** /**
@@ -56,7 +62,7 @@ class QUIWidget : public QDialog
{ {
Q_OBJECT Q_OBJECT
Q_ENUMS(Style) Q_ENUMS(Style)
Q_PROPERTY(QString title READ getTitle WRITE setTitle) Q_PROPERTY(QString title READ getTitle WRITE setTitle)
Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment) Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment)
Q_PROPERTY(bool minHide READ getMinHide WRITE setMinHide) Q_PROPERTY(bool minHide READ getMinHide WRITE setMinHide)
@@ -488,8 +494,7 @@ public:
QString checkedBgColor; QString checkedBgColor;
QString checkedTextColor; QString checkedTextColor;
StyleColor() StyleColor() {
{
iconSize = 12; iconSize = 12;
iconWidth = 15; iconWidth = 15;
iconHeight = 15; iconHeight = 15;
@@ -578,9 +583,8 @@ public:
static int deskWidth(); static int deskWidth();
static int deskHeight(); static int deskHeight();
//程序本身文件名称 //程序文件名称+当前所在路径
static QString appName(); static QString appName();
//程序当前所在路径
static QString appPath(); static QString appPath();
//初始化随机数种子 //初始化随机数种子
@@ -595,8 +599,11 @@ public:
static void newDir(const QString &dirName); static void newDir(const QString &dirName);
//写入消息到额外的的消息日志文件 //写入消息到额外的的消息日志文件
static void writeInfo(const QString &info, const QString &filePath = "log"); static void writeInfo(const QString &info, bool needWrite = false, const QString &filePath = "log");
static void writeError(const QString &info, const QString &filePath = "log"); static void writeError(const QString &info, bool needWrite = false, const QString &filePath = "log");
//设置无边框窗体
static void setFramelessForm(QWidget *widgetMain, QWidget *widgetTitle, QLabel *labIco, QPushButton *btnClose, bool tool = true);
//设置全局样式 //设置全局样式
static void setStyle(QUIWidget::Style style); static void setStyle(QUIWidget::Style style);
@@ -619,7 +626,7 @@ public:
static QPixmap ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, int dstWidth, int dstHeight); static QPixmap ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, int dstWidth, int dstHeight);
//设置标签颜色 //设置标签颜色
static void setLabStyle(QLabel *lab, quint8 type); static void setLabStyle(QLabel *lab, quint8 type, const QString &bgColor = "", const QString &textColor = "");
//设置窗体居中显示 //设置窗体居中显示
static void setFormInCenter(QWidget *frm); static void setFormInCenter(QWidget *frm);
@@ -637,39 +644,30 @@ public:
//判断是否是IP地址 //判断是否是IP地址
static bool isIP(const QString &ip); static bool isIP(const QString &ip);
//判断是否是MAC地址 //判断是否是MAC地址
static bool isMac(const QString &mac); static bool isMac(const QString &mac);
//判断是否是合法的电话号码 //判断是否是合法的电话号码
static bool isTel(const QString &tel); static bool isTel(const QString &tel);
//判断是否是合法的邮箱地址 //判断是否是合法的邮箱地址
static bool isEmail(const QString &email); static bool isEmail(const QString &email);
//16进制字符串转10进制 //16进制字符串转10进制
static int strHexToDecimal(const QString &strHex); static int strHexToDecimal(const QString &strHex);
//10进制字符串转10进制 //10进制字符串转10进制
static int strDecimalToDecimal(const QString &strDecimal); static int strDecimalToDecimal(const QString &strDecimal);
//2进制字符串转10进制 //2进制字符串转10进制
static int strBinToDecimal(const QString &strBin); static int strBinToDecimal(const QString &strBin);
//16进制字符串转2进制字符串 //16进制字符串转2进制字符串
static QString strHexToStrBin(const QString &strHex); static QString strHexToStrBin(const QString &strHex);
//10进制转2进制字符串一个字节 //10进制转2进制字符串一个字节
static QString decimalToStrBin1(int decimal); static QString decimalToStrBin1(int decimal);
//10进制转2进制字符串两个字节 //10进制转2进制字符串两个字节
static QString decimalToStrBin2(int decimal); static QString decimalToStrBin2(int decimal);
//10进制转16进制字符串,补零. //10进制转16进制字符串,补零.
static QString decimalToStrHex(int decimal); static QString decimalToStrHex(int decimal);
//int转字节数组 //int转字节数组
static QByteArray intToByte(int i); static QByteArray intToByte(int i);
static QByteArray intToByteRec(int i); static QByteArray intToByteRec(int i);
@@ -690,85 +688,76 @@ public:
//异或加密算法 //异或加密算法
static QString getXorEncryptDecrypt(const QString &str, char key); static QString getXorEncryptDecrypt(const QString &str, char key);
//异或校验 //异或校验
static uchar getOrCode(const QByteArray &data); static uchar getOrCode(const QByteArray &data);
//计算校验码 //计算校验码
static uchar getCheckCode(const QByteArray &data); static uchar getCheckCode(const QByteArray &data);
//字符串补全
static QString getValue(quint8 value);
//CRC校验 //CRC校验
static quint16 getRevCrc_16(quint8 *data, int len, quint16 init, const quint16 *table); static quint16 getRevCrc_16(quint8 *data, int len, quint16 init, const quint16 *table);
static quint16 getCrc_16(quint8 *data, int len, quint16 init, const quint16 *table); static quint16 getCrc_16(quint8 *data, int len, quint16 init, const quint16 *table);
static quint16 getModbus16(quint8 *data, int len); static quint16 getModbus16(quint8 *data, int len);
static QByteArray getCRCCode(const QByteArray &data); static QByteArray getCRCCode(const QByteArray &data);
//字节数组转Ascii字符串 //字节数组转Ascii字符串
static QString byteArrayToAsciiStr(const QByteArray &data); static QString byteArrayToAsciiStr(const QByteArray &data);
//16进制字符串转字节数组 //16进制字符串转字节数组
static QByteArray hexStrToByteArray(const QString &str); static QByteArray hexStrToByteArray(const QString &str);
static char convertHexChar(char ch); static char convertHexChar(char ch);
//Ascii字符串转字节数组 //Ascii字符串转字节数组
static QByteArray asciiStrToByteArray(const QString &str); static QByteArray asciiStrToByteArray(const QString &str);
//字节数组转16进制字符串 //字节数组转16进制字符串
static QString byteArrayToHexStr(const QByteArray &data); static QString byteArrayToHexStr(const QByteArray &data);
//获取保存的文件 //获取保存的文件
static QString getSaveName(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath()); static QString getSaveName(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath());
//获取选择的文件 //获取选择的文件
static QString getFileName(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath()); static QString getFileName(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath());
//非阻塞保存文件对话框
static QString saveFileName(const QString &filter, const QString &defaultDir = "", const QString &fileName = "");
//获取选择的文件集合 //获取选择的文件集合
static QStringList getFileNames(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath()); static QStringList getFileNames(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath());
//获取选择的目录 //获取选择的目录
static QString getFolderName(); static QString getFolderName();
//获取文件名,含拓展名 //获取文件名,含拓展名
static QString getFileNameWithExtension(const QString &strFilePath); static QString getFileNameWithExtension(const QString &strFilePath);
//获取选择文件夹中的文件 //获取选择文件夹中的文件
static QStringList getFolderFileNames(const QStringList &filter); static QStringList getFolderFileNames(const QStringList &filter);
//文件夹是否存在 //文件夹是否存在
static bool folderIsExist(const QString &strFolder); static bool folderIsExist(const QString &strFolder);
//文件是否存在 //文件是否存在
static bool fileIsExist(const QString &strFile); static bool fileIsExist(const QString &strFile);
//复制文件 //复制文件
static bool copyFile(const QString &sourceFile, const QString &targetFile); static bool copyFile(const QString &sourceFile, const QString &targetFile);
//删除文件夹下所有文件 //删除文件夹下所有文件
static void deleteDirectory(const QString &path); static void deleteDirectory(const QString &path);
//判断IP地址及端口是否在线 //判断IP地址及端口是否在线
static bool ipLive(const QString &ip, int port, int timeout = 1000); static bool ipLive(const QString &ip, int port, int timeout = 1000);
//获取网页所有源代码 //获取网页所有源代码
static QString getHtml(const QString &url); static QString getHtml(const QString &url);
//获取本机公网IP地址 //获取本机公网IP地址
static QString getNetIP(const QString &webCode); static QString getNetIP(const QString &webCode);
//获取本机IP //获取本机IP
static QString getLocalIP(); static QString getLocalIP();
//获取本机IP地址集合
static QStringList getLocalIPs();
//Url地址转为IP地址 //Url地址转为IP地址
static QString urlToIP(const QString &url); static QString urlToIP(const QString &url);
//字符串补全
static QString getValue(quint8 value);
//判断是否通外网 //判断是否通外网
static bool isWebOk(); static bool isWebOk();
//初始化表格
static void initTableView(QTableView *tableView, int rowHeight = 25, bool headVisible = false, bool edit = false);
//弹出框
static int showMessageBox(const QString &info, int type = 0, int closeSec = 0, bool exec = false);
//弹出消息框 //弹出消息框
static void showMessageBoxInfo(const QString &info, int closeSec = 0, bool exec = false); static void showMessageBoxInfo(const QString &info, int closeSec = 0, bool exec = false);
//弹出错误框 //弹出错误框
@@ -785,7 +774,6 @@ public:
static QString showInputBox(const QString &title, int type = 0, int closeSec = 0, static QString showInputBox(const QString &title, int type = 0, int closeSec = 0,
const QString &placeholderText = QString(), bool pwd = false, const QString &placeholderText = QString(), bool pwd = false,
const QString &defaultValue = QString()); const QString &defaultValue = QString());
//弹出日期选择框 //弹出日期选择框
static void showDateSelect(QString &dateStart, QString &dateEnd, const QString &format = "yyyy-MM-dd"); static void showDateSelect(QString &dateStart, QString &dateEnd, const QString &format = "yyyy-MM-dd");
@@ -800,14 +788,12 @@ public:
const QString &hoverTextColor = "#F0F0F0", //悬停文字颜色 const QString &hoverTextColor = "#F0F0F0", //悬停文字颜色
const QString &pressedColor = "#2D3E50", //按下颜色 const QString &pressedColor = "#2D3E50", //按下颜色
const QString &pressedTextColor = "#B8C6D1"); //按下文字颜色 const QString &pressedTextColor = "#B8C6D1"); //按下文字颜色
//设置文本框样式 //设置文本框样式
static QString setLineEditQss(QLineEdit *txt, //文本框对象 static QString setLineEditQss(QLineEdit *txt, //文本框对象
int radius = 3, //圆角半径 int radius = 3, //圆角半径
int borderWidth = 2, //边框大小 int borderWidth = 2, //边框大小
const QString &normalColor = "#DCE4EC", //正常颜色 const QString &normalColor = "#DCE4EC", //正常颜色
const QString &focusColor = "#34495E"); //选中颜色 const QString &focusColor = "#34495E"); //选中颜色
//设置进度条样式 //设置进度条样式
static QString setProgressBarQss(QProgressBar *bar, static QString setProgressBarQss(QProgressBar *bar,
int barHeight = 8, //进度条高度 int barHeight = 8, //进度条高度
@@ -815,7 +801,6 @@ public:
int fontSize = 9, //文字字号 int fontSize = 9, //文字字号
const QString &normalColor = "#E8EDF2", //正常颜色 const QString &normalColor = "#E8EDF2", //正常颜色
const QString &chunkColor = "#E74C3C"); //进度颜色 const QString &chunkColor = "#E74C3C"); //进度颜色
//设置滑块条样式 //设置滑块条样式
static QString setSliderQss(QSlider *slider, //滑动条对象 static QString setSliderQss(QSlider *slider, //滑动条对象
int sliderHeight = 8, //滑动条高度 int sliderHeight = 8, //滑动条高度
@@ -824,13 +809,11 @@ public:
const QString &handleBorderColor = "#1ABC9C", //指示器边框颜色 const QString &handleBorderColor = "#1ABC9C", //指示器边框颜色
const QString &handleColor = "#FFFFFF", //指示器颜色 const QString &handleColor = "#FFFFFF", //指示器颜色
const QString &textColor = "#000000"); //文字颜色 const QString &textColor = "#000000"); //文字颜色
//设置单选框样式 //设置单选框样式
static QString setRadioButtonQss(QRadioButton *rbtn, //单选框对象 static QString setRadioButtonQss(QRadioButton *rbtn, //单选框对象
int indicatorRadius = 8, //指示器圆角角度 int indicatorRadius = 8, //指示器圆角角度
const QString &normalColor = "#D7DBDE", //正常颜色 const QString &normalColor = "#D7DBDE", //正常颜色
const QString &checkColor = "#34495E"); //选中颜色 const QString &checkColor = "#34495E"); //选中颜色
//设置滚动条样式 //设置滚动条样式
static QString setScrollBarQss(QWidget *scroll, //滚动条对象 static QString setScrollBarQss(QWidget *scroll, //滚动条对象
int radius = 6, //圆角角度 int radius = 6, //圆角角度

View File

@@ -58,7 +58,7 @@ bool GifWidget::eventFilter(QObject *watched, QEvent *event)
mousePressed = false; mousePressed = false;
return true; return true;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
return true; return true;
} }

View File

@@ -1,13 +1,14 @@
#include "quiwidget.h" #include "quiwidget.h"
#ifdef Q_OS_ANDROID
#include "qandroid.h"
#endif
#ifdef __arm__
#ifdef arma7 #ifdef arma7
#define TOOL true #define TOOL true
#else #else
#define TOOL false #define TOOL false
#endif #endif
#else
#define TOOL false
#endif
QUIWidget::QUIWidget(QWidget *parent) : QDialog(parent) QUIWidget::QUIWidget(QWidget *parent) : QDialog(parent)
{ {
@@ -34,7 +35,7 @@ bool QUIWidget::eventFilter(QObject *watched, QEvent *event)
} else if (mouseEvent->type() == QEvent::MouseButtonRelease) { } else if (mouseEvent->type() == QEvent::MouseButtonRelease) {
mousePressed = false; mousePressed = false;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
if (this->property("canMove").toBool()) { if (this->property("canMove").toBool()) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
} }
@@ -549,7 +550,7 @@ bool QUIMessageBox::eventFilter(QObject *watched, QEvent *event)
mousePressed = false; mousePressed = false;
return true; return true;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
return true; return true;
} }
@@ -573,7 +574,6 @@ void QUIMessageBox::initControl()
sizePolicy.setVerticalStretch(0); sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth()); sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
widgetTitle->setSizePolicy(sizePolicy); widgetTitle->setSizePolicy(sizePolicy);
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
horizontalLayout3 = new QHBoxLayout(widgetTitle); horizontalLayout3 = new QHBoxLayout(widgetTitle);
horizontalLayout3->setSpacing(0); horizontalLayout3->setSpacing(0);
horizontalLayout3->setObjectName(QString::fromUtf8("horizontalLayout3")); horizontalLayout3->setObjectName(QString::fromUtf8("horizontalLayout3"));
@@ -585,7 +585,6 @@ void QUIMessageBox::initControl()
sizePolicy1.setVerticalStretch(0); sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
labIco->setSizePolicy(sizePolicy1); labIco->setSizePolicy(sizePolicy1);
labIco->setMinimumSize(QSize(TitleMinSize, 0));
labIco->setAlignment(Qt::AlignCenter); labIco->setAlignment(Qt::AlignCenter);
horizontalLayout3->addWidget(labIco); horizontalLayout3->addWidget(labIco);
@@ -622,8 +621,6 @@ void QUIMessageBox::initControl()
sizePolicy3.setVerticalStretch(0); sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth()); sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
btnMenu_Close->setSizePolicy(sizePolicy3); btnMenu_Close->setSizePolicy(sizePolicy3);
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor)); btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
btnMenu_Close->setFocusPolicy(Qt::NoFocus); btnMenu_Close->setFocusPolicy(Qt::NoFocus);
btnMenu_Close->setFlat(true); btnMenu_Close->setFlat(true);
@@ -704,31 +701,19 @@ void QUIMessageBox::initControl()
void QUIMessageBox::initForm() void QUIMessageBox::initForm()
{ {
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
IconHelper::Instance()->setIcon(btnMenu_Close, QUIConfig::IconClose, QUIConfig::FontSize);
this->setProperty("form", true);
this->widgetTitle->setProperty("form", "title");
if (TOOL) {
this->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
} else {
this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
}
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
this->setFixedSize(DialogMinWidth, DialogMinHeight);
labIcoMain->setFixedSize(TitleMinSize, TitleMinSize);
#ifdef __arm__ #ifdef __arm__
int width = 90; int width = 90;
int iconWidth = 22; int iconWidth = 22;
int iconHeight = 22; int iconHeight = 22;
this->setFixedSize(350, 180);
labIcoMain->setFixedSize(40, 40);
#else #else
int width = 80; int width = 80;
int iconWidth = 18; int iconWidth = 18;
int iconHeight = 18; int iconHeight = 18;
this->setFixedSize(280, 150);
labIcoMain->setFixedSize(30, 30);
#endif #endif
QList<QPushButton *> btns = this->frame->findChildren<QPushButton *>(); QList<QPushButton *> btns = this->frame->findChildren<QPushButton *>();
@@ -821,6 +806,13 @@ void QUIMessageBox::setMessage(const QString &msg, int type, int closeSec)
this->labInfo->setText(msg); this->labInfo->setText(msg);
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
//设置对话框的大小总以最合适的大小显示
if (msg.length() < 70) {
this->layout()->setSizeConstraint(QLayout::SetMinimumSize);
this->setFixedSize(DialogMinWidth, DialogMinHeight);
} else {
this->layout()->setSizeConstraint(QLayout::SetFixedSize);
}
} }
@@ -871,7 +863,7 @@ bool QUITipBox::eventFilter(QObject *watched, QEvent *event)
mousePressed = false; mousePressed = false;
return true; return true;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
return true; return true;
} }
@@ -901,7 +893,6 @@ void QUITipBox::initControl()
horizontalLayout2->setContentsMargins(0, 0, 0, 0); horizontalLayout2->setContentsMargins(0, 0, 0, 0);
labIco = new QLabel(widgetTitle); labIco = new QLabel(widgetTitle);
labIco->setObjectName(QString::fromUtf8("labIco")); labIco->setObjectName(QString::fromUtf8("labIco"));
labIco->setMinimumSize(QSize(TitleMinSize, 0));
labIco->setAlignment(Qt::AlignCenter); labIco->setAlignment(Qt::AlignCenter);
horizontalLayout2->addWidget(labIco); horizontalLayout2->addWidget(labIco);
@@ -938,13 +929,10 @@ void QUITipBox::initControl()
sizePolicy3.setVerticalStretch(0); sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth()); sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
btnMenu_Close->setSizePolicy(sizePolicy3); btnMenu_Close->setSizePolicy(sizePolicy3);
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor)); btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
btnMenu_Close->setFocusPolicy(Qt::NoFocus); btnMenu_Close->setFocusPolicy(Qt::NoFocus);
btnMenu_Close->setFlat(true); btnMenu_Close->setFlat(true);
widgetTitle->setMinimumHeight(TitleMinSize);
horizontalLayout->addWidget(btnMenu_Close); horizontalLayout->addWidget(btnMenu_Close);
horizontalLayout2->addWidget(widgetMenu); horizontalLayout2->addWidget(widgetMenu);
verticalLayout->addWidget(widgetTitle); verticalLayout->addWidget(widgetTitle);
@@ -965,12 +953,7 @@ void QUITipBox::initControl()
void QUITipBox::initForm() void QUITipBox::initForm()
{ {
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
IconHelper::Instance()->setIcon(btnMenu_Close, QUIConfig::IconClose, QUIConfig::FontSize);
this->setProperty("form", true);
this->widgetTitle->setProperty("form", "title");
this->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
#ifdef __arm__ #ifdef __arm__
@@ -1120,7 +1103,6 @@ void QUIInputBox::initControl()
sizePolicy.setVerticalStretch(0); sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth()); sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
widgetTitle->setSizePolicy(sizePolicy); widgetTitle->setSizePolicy(sizePolicy);
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
horizontalLayout1 = new QHBoxLayout(widgetTitle); horizontalLayout1 = new QHBoxLayout(widgetTitle);
horizontalLayout1->setSpacing(0); horizontalLayout1->setSpacing(0);
horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1")); horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1"));
@@ -1132,7 +1114,6 @@ void QUIInputBox::initControl()
sizePolicy1.setVerticalStretch(0); sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
labIco->setSizePolicy(sizePolicy1); labIco->setSizePolicy(sizePolicy1);
labIco->setMinimumSize(QSize(TitleMinSize, 0));
labIco->setAlignment(Qt::AlignCenter); labIco->setAlignment(Qt::AlignCenter);
horizontalLayout1->addWidget(labIco); horizontalLayout1->addWidget(labIco);
@@ -1169,8 +1150,6 @@ void QUIInputBox::initControl()
sizePolicy3.setVerticalStretch(0); sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth()); sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
btnMenu_Close->setSizePolicy(sizePolicy3); btnMenu_Close->setSizePolicy(sizePolicy3);
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor)); btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
btnMenu_Close->setFocusPolicy(Qt::NoFocus); btnMenu_Close->setFocusPolicy(Qt::NoFocus);
btnMenu_Close->setFlat(true); btnMenu_Close->setFlat(true);
@@ -1240,17 +1219,7 @@ void QUIInputBox::initControl()
void QUIInputBox::initForm() void QUIInputBox::initForm()
{ {
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
IconHelper::Instance()->setIcon(btnMenu_Close, QUIConfig::IconClose, QUIConfig::FontSize);
this->setProperty("form", true);
this->widgetTitle->setProperty("form", "title");
if (TOOL) {
this->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
} else {
this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
}
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
#ifdef __arm__ #ifdef __arm__
@@ -1349,7 +1318,7 @@ bool QUIInputBox::eventFilter(QObject *watched, QEvent *event)
mousePressed = false; mousePressed = false;
return true; return true;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
return true; return true;
} }
@@ -1424,7 +1393,7 @@ bool QUIDateSelect::eventFilter(QObject *watched, QEvent *event)
mousePressed = false; mousePressed = false;
return true; return true;
} else if (mouseEvent->type() == QEvent::MouseMove) { } else if (mouseEvent->type() == QEvent::MouseMove) {
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) { if (mousePressed) {
this->move(mouseEvent->globalPos() - mousePoint); this->move(mouseEvent->globalPos() - mousePoint);
return true; return true;
} }
@@ -1448,7 +1417,6 @@ void QUIDateSelect::initControl()
sizePolicy.setVerticalStretch(0); sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth()); sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
widgetTitle->setSizePolicy(sizePolicy); widgetTitle->setSizePolicy(sizePolicy);
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
horizontalLayout1 = new QHBoxLayout(widgetTitle); horizontalLayout1 = new QHBoxLayout(widgetTitle);
horizontalLayout1->setSpacing(0); horizontalLayout1->setSpacing(0);
horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1")); horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1"));
@@ -1460,7 +1428,6 @@ void QUIDateSelect::initControl()
sizePolicy1.setVerticalStretch(0); sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
labIco->setSizePolicy(sizePolicy1); labIco->setSizePolicy(sizePolicy1);
labIco->setMinimumSize(QSize(TitleMinSize, 0));
labIco->setAlignment(Qt::AlignCenter); labIco->setAlignment(Qt::AlignCenter);
horizontalLayout1->addWidget(labIco); horizontalLayout1->addWidget(labIco);
@@ -1489,8 +1456,6 @@ void QUIDateSelect::initControl()
sizePolicy3.setVerticalStretch(0); sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth()); sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
btnMenu_Close->setSizePolicy(sizePolicy3); btnMenu_Close->setSizePolicy(sizePolicy3);
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor)); btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
btnMenu_Close->setFocusPolicy(Qt::NoFocus); btnMenu_Close->setFocusPolicy(Qt::NoFocus);
btnMenu_Close->setFlat(true); btnMenu_Close->setFlat(true);
@@ -1585,17 +1550,7 @@ void QUIDateSelect::initControl()
void QUIDateSelect::initForm() void QUIDateSelect::initForm()
{ {
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2); QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
IconHelper::Instance()->setIcon(btnMenu_Close, QUIConfig::IconClose, QUIConfig::FontSize);
this->setProperty("form", true);
this->widgetTitle->setProperty("form", "title");
if (TOOL) {
this->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
} else {
this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
}
this->setWindowTitle(this->labTitle->text()); this->setWindowTitle(this->labTitle->text());
#ifdef __arm__ #ifdef __arm__
@@ -2055,14 +2010,14 @@ TrayIcon::TrayIcon(QObject *parent) : QObject(parent)
void TrayIcon::iconIsActived(QSystemTrayIcon::ActivationReason reason) void TrayIcon::iconIsActived(QSystemTrayIcon::ActivationReason reason)
{ {
switch (reason) { switch (reason) {
case QSystemTrayIcon::Trigger: case QSystemTrayIcon::Trigger:
case QSystemTrayIcon::DoubleClick: { case QSystemTrayIcon::DoubleClick: {
mainWidget->showNormal(); mainWidget->showNormal();
break; break;
} }
default: default:
break; break;
} }
} }
@@ -2143,6 +2098,7 @@ QString QUIHelper::appName()
static QString name; static QString name;
if (name.isEmpty()) { if (name.isEmpty()) {
name = qApp->applicationFilePath(); name = qApp->applicationFilePath();
//下面的方法主要为了过滤安卓的路径 lib程序名_armeabi-v7a
QStringList list = name.split("/"); QStringList list = name.split("/");
name = list.at(list.count() - 1).split(".").at(0); name = list.at(list.count() - 1).split(".").at(0);
} }
@@ -2153,7 +2109,8 @@ QString QUIHelper::appName()
QString QUIHelper::appPath() QString QUIHelper::appPath()
{ {
#ifdef Q_OS_ANDROID #ifdef Q_OS_ANDROID
return QString("/sdcard/Android/%1").arg(appName()); //return QString("/sdcard/Android/%1").arg(appName());
return QString("/storage/emulated/0/%1").arg(appName());
#else #else
return qApp->applicationDirPath(); return qApp->applicationDirPath();
#endif #endif
@@ -2197,8 +2154,12 @@ void QUIHelper::newDir(const QString &dirName)
} }
} }
void QUIHelper::writeInfo(const QString &info, const QString &filePath) void QUIHelper::writeInfo(const QString &info, bool needWrite, const QString &filePath)
{ {
if (!needWrite) {
return;
}
QString fileName = QString("%1/%2/%3_runinfo_%4.txt").arg(QUIHelper::appPath()) QString fileName = QString("%1/%2/%3_runinfo_%4.txt").arg(QUIHelper::appPath())
.arg(filePath).arg(QUIHelper::appName()).arg(QDate::currentDate().toString("yyyyMM")); .arg(filePath).arg(QUIHelper::appName()).arg(QDate::currentDate().toString("yyyyMM"));
@@ -2209,10 +2170,12 @@ void QUIHelper::writeInfo(const QString &info, const QString &filePath)
file.close(); file.close();
} }
void QUIHelper::writeError(const QString &info, const QString &filePath) void QUIHelper::writeError(const QString &info, bool needWrite, const QString &filePath)
{ {
//正式运行屏蔽掉输出错误信息,调试阶段才需要 if (!needWrite) {
return; return;
}
QString fileName = QString("%1/%2/%3_runerror_%4.txt").arg(QUIHelper::appPath()) QString fileName = QString("%1/%2/%3_runerror_%4.txt").arg(QUIHelper::appPath())
.arg(filePath).arg(QUIHelper::appName()).arg(QDate::currentDate().toString("yyyyMM")); .arg(filePath).arg(QUIHelper::appName()).arg(QDate::currentDate().toString("yyyyMM"));
@@ -2223,10 +2186,36 @@ void QUIHelper::writeError(const QString &info, const QString &filePath)
file.close(); file.close();
} }
void QUIHelper::setFramelessForm(QWidget *widgetMain, QWidget *widgetTitle, QLabel *labIco, QPushButton *btnClose, bool tool)
{
labIco->setFixedWidth(TitleMinSize);
btnClose->setFixedWidth(TitleMinSize);
widgetTitle->setFixedHeight(TitleMinSize);
widgetTitle->setProperty("form", "title");
widgetMain->setProperty("form", true);
widgetMain->setProperty("canMove", true);
#ifdef __arm__
if (tool) {
widgetMain->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
} else {
widgetMain->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
}
#else
if (tool) {
widgetMain->setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
} else {
widgetMain->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
}
#endif
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2);
IconHelper::Instance()->setIcon(btnClose, QUIConfig::IconClose, QUIConfig::FontSize);
}
void QUIHelper::setStyle(QUIWidget::Style style) void QUIHelper::setStyle(QUIWidget::Style style)
{ {
QString qssFile = ":/qss/lightblue.css"; QString qssFile = ":/qss/lightblue.css";
if (style == QUIWidget::Style_Silvery) { if (style == QUIWidget::Style_Silvery) {
qssFile = ":/qss/silvery.css"; qssFile = ":/qss/silvery.css";
} else if (style == QUIWidget::Style_Blue) { } else if (style == QUIWidget::Style_Blue) {
@@ -2262,7 +2251,6 @@ void QUIHelper::setStyle(QUIWidget::Style style)
} }
QFile file(qssFile); QFile file(qssFile);
if (file.open(QFile::ReadOnly)) { if (file.open(QFile::ReadOnly)) {
QString qss = QLatin1String(file.readAll()); QString qss = QLatin1String(file.readAll());
QString paletteColor = qss.mid(20, 7); QString paletteColor = qss.mid(20, 7);
@@ -2310,7 +2298,6 @@ void QUIHelper::getQssColor(const QString &qss, QString &textColor, QString &pan
QString &darkColorStart, QString &darkColorEnd, QString &highColor) QString &darkColorStart, QString &darkColorEnd, QString &highColor)
{ {
QString str = qss; QString str = qss;
QString flagTextColor = "TextColor:"; QString flagTextColor = "TextColor:";
int indexTextColor = str.indexOf(flagTextColor); int indexTextColor = str.indexOf(flagTextColor);
if (indexTextColor >= 0) { if (indexTextColor >= 0) {
@@ -2400,7 +2387,6 @@ QPixmap QUIHelper::ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, i
QPainter painter; QPainter painter;
painter.begin(&resultImg); painter.begin(&resultImg);
if (!resultImg.isNull()) { if (!resultImg.isNull()) {
painter.drawPixmap(0, 0, pix1); painter.drawPixmap(0, 0, pix1);
painter.drawPixmap(horzSplit, 0, pix2); painter.drawPixmap(horzSplit, 0, pix2);
@@ -2416,27 +2402,55 @@ QPixmap QUIHelper::ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, i
} }
painter.end(); painter.end();
return resultImg; return resultImg;
} }
void QUIHelper::setLabStyle(QLabel *lab, quint8 type) void QUIHelper::setLabStyle(QLabel *lab, quint8 type, const QString &bgColor, const QString &textColor)
{ {
QString qssDisable = QString("QLabel::disabled{background:none;color:%1;}").arg(QUIConfig::BorderColor); QString colorBg = bgColor;
QString qssRed = "QLabel{border:none;background-color:rgb(214,64,48);color:rgb(255,255,255);}" + qssDisable; QString colorText = textColor;
QString qssGreen = "QLabel{border:none;background-color:rgb(46,138,87);color:rgb(255,255,255);}" + qssDisable;
QString qssBlue = "QLabel{border:none;background-color:rgb(67,122,203);color:rgb(255,255,255);}" + qssDisable;
QString qssDark = "QLabel{border:none;background-color:rgb(75,75,75);color:rgb(255,255,255);}" + qssDisable;
if (type == 0) { //如果设置了新颜色则启用新颜色
lab->setStyleSheet(qssRed); if (bgColor.isEmpty() || textColor.isEmpty()) {
} else if (type == 1) { if (type == 0) {
lab->setStyleSheet(qssGreen); colorBg = "#D64D54";
} else if (type == 2) { colorText = "#FFFFFF";
lab->setStyleSheet(qssBlue); } else if (type == 1) {
} else if (type == 3) { colorBg = "#17A086";
lab->setStyleSheet(qssDark); colorText = "#FFFFFF";
} else if (type == 2) {
colorBg = "#47A4E9";
colorText = "#FFFFFF";
} else if (type == 3) {
colorBg = "#282D30";
colorText = "#FFFFFF";
} else if (type == 4) {
colorBg = "#0E99A0";
colorText = "#FFFFFF";
} else if (type == 5) {
colorBg = "#A279C5";
colorText = "#FFFFFF";
} else if (type == 6) {
colorBg = "#8C2957";
colorText = "#FFFFFF";
} else if (type == 7) {
colorBg = "#04567E";
colorText = "#FFFFFF";
} else if (type == 8) {
colorBg = "#FD8B28";
colorText = "#FFFFFF";
} else if (type == 9) {
colorBg = "#5580A2";
colorText = "#FFFFFF";
}
} }
QStringList qss;
//禁用颜色
qss << QString("QLabel::disabled{background:none;color:%1;}").arg(QUIConfig::BorderColor);
//正常颜色
qss << QString("QLabel{border:none;background-color:%1;color:%2;}").arg(colorBg).arg(colorText);
lab->setStyleSheet(qss.join(""));
} }
void QUIHelper::setFormInCenter(QWidget *frm) void QUIHelper::setFormInCenter(QWidget *frm)
@@ -2476,9 +2490,15 @@ void QUIHelper::setCode()
void QUIHelper::sleep(int msec) void QUIHelper::sleep(int msec)
{ {
QTime dieTime = QTime::currentTime().addMSecs(msec); if (msec > 0) {
while (QTime::currentTime() < dieTime) { #if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
QCoreApplication::processEvents(QEventLoop::AllEvents, 100); QTime endTime = QTime::currentTime().addMSecs(msec);
while (QTime::currentTime() < endTime) {
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
}
#else
QThread::msleep(msec);
#endif
} }
} }
@@ -2689,8 +2709,8 @@ QByteArray QUIHelper::ushortToByteRec(ushort i)
{ {
QByteArray result; QByteArray result;
result.resize(2); result.resize(2);
result[0] = (uchar) (0x000000ff & i); result[0] = (uchar)(0x000000ff & i);
result[1] = (uchar) ((0x0000ff00 & i) >> 8); result[1] = (uchar)((0x0000ff00 & i) >> 8);
return result; return result;
} }
@@ -2753,15 +2773,6 @@ uchar QUIHelper::getCheckCode(const QByteArray &data)
return temp % 256; return temp % 256;
} }
QString QUIHelper::getValue(quint8 value)
{
QString result = QString::number(value);
if (result.length() <= 1) {
result = QString("0%1").arg(result);
}
return result;
}
//函数功能计算CRC16 //函数功能计算CRC16
//参数1*data 16位CRC校验数据 //参数1*data 16位CRC校验数据
//参数2len 数据流长度 //参数2len 数据流长度
@@ -2773,8 +2784,7 @@ quint16 QUIHelper::getRevCrc_16(quint8 *data, int len, quint16 init, const quint
{ {
quint16 cRc_16 = init; quint16 cRc_16 = init;
quint8 temp; quint8 temp;
while (len-- > 0) {
while(len-- > 0) {
temp = cRc_16 >> 8; temp = cRc_16 >> 8;
cRc_16 = (cRc_16 << 8) ^ table[(temp ^ *data++) & 0xff]; cRc_16 = (cRc_16 << 8) ^ table[(temp ^ *data++) & 0xff];
} }
@@ -2787,8 +2797,7 @@ quint16 QUIHelper::getCrc_16(quint8 *data, int len, quint16 init, const quint16
{ {
quint16 cRc_16 = init; quint16 cRc_16 = init;
quint8 temp; quint8 temp;
while (len-- > 0) {
while(len-- > 0) {
temp = cRc_16 & 0xff; temp = cRc_16 & 0xff;
cRc_16 = (cRc_16 >> 8) ^ table[(temp ^ *data++) & 0xff]; cRc_16 = (cRc_16 >> 8) ^ table[(temp ^ *data++) & 0xff];
} }
@@ -2849,7 +2858,6 @@ QString QUIHelper::byteArrayToAsciiStr(const QByteArray &data)
{ {
QString temp; QString temp;
int len = data.size(); int len = data.size();
for (int i = 0; i < len; i++) { for (int i = 0; i < len; i++) {
//0x20为空格,空格以下都是不可见字符 //0x20为空格,空格以下都是不可见字符
char b = data.at(i); char b = data.at(i);
@@ -3280,12 +3288,33 @@ QString QUIHelper::byteArrayToHexStr(const QByteArray &data)
QString QUIHelper::getSaveName(const QString &filter, QString defaultDir) QString QUIHelper::getSaveName(const QString &filter, QString defaultDir)
{ {
return QFileDialog::getSaveFileName(0, "选择文件", defaultDir , filter); return QFileDialog::getSaveFileName(0, "选择文件", defaultDir, filter);
} }
QString QUIHelper::getFileName(const QString &filter, QString defaultDir) QString QUIHelper::getFileName(const QString &filter, QString defaultDir)
{ {
return QFileDialog::getOpenFileName(0, "选择文件", defaultDir , filter); return QFileDialog::getOpenFileName(0, "选择文件", defaultDir, filter);
}
QString QUIHelper::saveFileName(const QString &filter, const QString &defaultDir, const QString &fileName)
{
QString file;
QFileDialog dialog;
dialog.setFixedSize(900, 600);
dialog.setWindowModality(Qt::WindowModal);
dialog.setWindowTitle("保存文件");
dialog.setLabelText(QFileDialog::Accept, "保存(&S)");
dialog.setLabelText(QFileDialog::Reject, "取消(&C)");
dialog.selectFile(fileName);
dialog.setNameFilter(filter);
dialog.setDirectory(defaultDir);
if (dialog.exec() == 1) {
file = dialog.selectedFiles().value(0);
file = QFileInfo(file).suffix().isEmpty() ? "" : file;
}
return file;
} }
QStringList QUIHelper::getFileNames(const QString &filter, QString defaultDir) QStringList QUIHelper::getFileNames(const QString &filter, QString defaultDir)
@@ -3363,11 +3392,21 @@ void QUIHelper::deleteDirectory(const QString &path)
bool QUIHelper::ipLive(const QString &ip, int port, int timeout) bool QUIHelper::ipLive(const QString &ip, int port, int timeout)
{ {
QTcpSocket tcpClient; //局部的事件循环,不卡主界面
tcpClient.abort(); QEventLoop eventLoop;
tcpClient.connectToHost(ip, port);
//超时没有连接上则判断不在线 //设置超时
return tcpClient.waitForConnected(timeout); QTimer timer;
connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit()));
timer.setSingleShot(true);
timer.start(timeout);
QTcpSocket tcpSocket;
connect(&tcpSocket, SIGNAL(connected()), &eventLoop, SLOT(quit()));
tcpSocket.connectToHost(ip, port);
eventLoop.exec();
bool ok = (tcpSocket.state() == QAbstractSocket::ConnectedState);
return ok;
} }
QString QUIHelper::getHtml(const QString &url) QString QUIHelper::getHtml(const QString &url)
@@ -3396,17 +3435,9 @@ QString QUIHelper::getNetIP(const QString &webCode)
QString QUIHelper::getLocalIP() QString QUIHelper::getLocalIP()
{ {
QStringList ips;
QList<QHostAddress> addrs = QNetworkInterface::allAddresses();
foreach (QHostAddress addr, addrs) {
QString ip = addr.toString();
if (QUIHelper::isIP(ip)) {
ips << ip;
}
}
//优先取192开头的IP,如果获取不到IP则取127.0.0.1 //优先取192开头的IP,如果获取不到IP则取127.0.0.1
QString ip = "127.0.0.1"; QString ip = "127.0.0.1";
QStringList ips = getLocalIPs();
foreach (QString str, ips) { foreach (QString str, ips) {
if (str.startsWith("192.168.1") || str.startsWith("192")) { if (str.startsWith("192.168.1") || str.startsWith("192")) {
ip = str; ip = str;
@@ -3417,23 +3448,111 @@ QString QUIHelper::getLocalIP()
return ip; return ip;
} }
QStringList QUIHelper::getLocalIPs()
{
static QStringList ips;
if (ips.count() == 0) {
QList<QNetworkInterface> netInterfaces = QNetworkInterface::allInterfaces();
foreach (const QNetworkInterface &netInterface, netInterfaces) {
//移除虚拟机和抓包工具的虚拟网卡
QString humanReadableName = netInterface.humanReadableName().toLower();
if (humanReadableName.startsWith("vmware network adapter") || humanReadableName.startsWith("npcap loopback adapter")) {
continue;
}
//过滤当前网络接口
bool flag = (netInterface.flags() == (QNetworkInterface::IsUp | QNetworkInterface::IsRunning | QNetworkInterface::CanBroadcast | QNetworkInterface::CanMulticast));
if (flag) {
QList<QNetworkAddressEntry> addrs = netInterface.addressEntries();
foreach (QNetworkAddressEntry addr, addrs) {
//只取出IPV4的地址
if (addr.ip().protocol() == QAbstractSocket::IPv4Protocol) {
QString ip4 = addr.ip().toString();
if (ip4 != "127.0.0.1") {
ips.append(ip4);
}
}
}
}
}
}
return ips;
}
QString QUIHelper::urlToIP(const QString &url) QString QUIHelper::urlToIP(const QString &url)
{ {
QHostInfo host = QHostInfo::fromName(url); QHostInfo host = QHostInfo::fromName(url);
return host.addresses().at(0).toString(); return host.addresses().at(0).toString();
} }
QString QUIHelper::getValue(quint8 value)
{
QString result = QString::number(value);
if (result.length() <= 1) {
result = QString("0%1").arg(result);
}
return result;
}
bool QUIHelper::isWebOk() bool QUIHelper::isWebOk()
{ {
//能接通百度IP说明可以通外网 //能接通百度IP说明可以通外网
return ipLive("115.239.211.112", 80); return ipLive("115.239.211.112", 80);
} }
void QUIHelper::initTableView(QTableView *tableView, int rowHeight, bool headVisible, bool edit)
{
//奇数偶数行颜色交替
tableView->setAlternatingRowColors(false);
//垂直表头是否可见
tableView->verticalHeader()->setVisible(headVisible);
//选中一行表头是否加粗
tableView->horizontalHeader()->setHighlightSections(false);
//最后一行拉伸填充
tableView->horizontalHeader()->setStretchLastSection(true);
//行标题最小宽度尺寸
tableView->horizontalHeader()->setMinimumSectionSize(0);
//行标题最大高度
tableView->horizontalHeader()->setMaximumHeight(rowHeight);
//默认行高
tableView->verticalHeader()->setDefaultSectionSize(rowHeight);
//选中时一行整体选中
tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
//只允许选择单个
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
//表头不可单击
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
tableView->horizontalHeader()->setSectionsClickable(false);
#else
tableView->horizontalHeader()->setClickable(false);
#endif
//鼠标按下即进入编辑模式
if (edit) {
tableView->setEditTriggers(QAbstractItemView::CurrentChanged | QAbstractItemView::DoubleClicked);
} else {
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
}
int QUIHelper::showMessageBox(const QString &info, int type, int closeSec, bool exec)
{
int result = 0;
if (type == 0) {
showMessageBoxInfo(info, closeSec, exec);
} else if (type == 1) {
showMessageBoxError(info, closeSec, exec);
} else if (type == 2) {
result = showMessageBoxQuestion(info);
}
return result;
}
void QUIHelper::showMessageBoxInfo(const QString &info, int closeSec, bool exec) void QUIHelper::showMessageBoxInfo(const QString &info, int closeSec, bool exec)
{ {
#ifdef Q_OS_ANDROID
QAndroid::Instance()->makeToast(info);
#else
if (exec) { if (exec) {
QUIMessageBox msg; QUIMessageBox msg;
msg.setMessage(info, 0, closeSec); msg.setMessage(info, 0, closeSec);
@@ -3442,14 +3561,10 @@ void QUIHelper::showMessageBoxInfo(const QString &info, int closeSec, bool exec)
QUIMessageBox::Instance()->setMessage(info, 0, closeSec); QUIMessageBox::Instance()->setMessage(info, 0, closeSec);
QUIMessageBox::Instance()->show(); QUIMessageBox::Instance()->show();
} }
#endif
} }
void QUIHelper::showMessageBoxError(const QString &info, int closeSec, bool exec) void QUIHelper::showMessageBoxError(const QString &info, int closeSec, bool exec)
{ {
#ifdef Q_OS_ANDROID
QAndroid::Instance()->makeToast(info);
#else
if (exec) { if (exec) {
QUIMessageBox msg; QUIMessageBox msg;
msg.setMessage(info, 2, closeSec); msg.setMessage(info, 2, closeSec);
@@ -3458,7 +3573,6 @@ void QUIHelper::showMessageBoxError(const QString &info, int closeSec, bool exec
QUIMessageBox::Instance()->setMessage(info, 2, closeSec); QUIMessageBox::Instance()->setMessage(info, 2, closeSec);
QUIMessageBox::Instance()->show(); QUIMessageBox::Instance()->show();
} }
#endif
} }
int QUIHelper::showMessageBoxQuestion(const QString &info) int QUIHelper::showMessageBoxQuestion(const QString &info)
@@ -3668,13 +3782,8 @@ QChar QUIConfig::IconNormal = QChar(0xf2d0);
QChar QUIConfig::IconClose = QChar(0xf00d); QChar QUIConfig::IconClose = QChar(0xf00d);
#ifdef __arm__ #ifdef __arm__
#ifdef Q_OS_ANDROID
QString QUIConfig::FontName = "Droid Sans Fallback";
int QUIConfig::FontSize = 15;
#else
QString QUIConfig::FontName = "WenQuanYi Micro Hei"; QString QUIConfig::FontName = "WenQuanYi Micro Hei";
int QUIConfig::FontSize = 18; int QUIConfig::FontSize = 18;
#endif
#else #else
QString QUIConfig::FontName = "Microsoft Yahei"; QString QUIConfig::FontName = "Microsoft Yahei";
int QUIConfig::FontSize = 12; int QUIConfig::FontSize = 12;

View File

@@ -9,16 +9,22 @@
#define STRDATETIME qPrintable(QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss")) #define STRDATETIME qPrintable(QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss"))
#define STRDATETIMEMS qPrintable(QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss-zzz")) #define STRDATETIMEMS qPrintable(QDateTime::currentDateTime().toString("yyyy-MM-dd-HH-mm-ss-zzz"))
//定义换行符
#ifdef Q_OS_WIN #ifdef Q_OS_WIN
#define NEWLINE "\r\n" #define NEWLINE "\r\n"
#else #else
#define NEWLINE "\n" #define NEWLINE "\n"
#endif #endif
//定义无边框标题栏高度+对话框最小宽高
#ifdef __arm__ #ifdef __arm__
#define TitleMinSize 40 #define TitleMinSize 40
#define DialogMinWidth 350
#define DialogMinHeight 180
#else #else
#define TitleMinSize 30 #define TitleMinSize 30
#define DialogMinWidth 280
#define DialogMinHeight 150
#endif #endif
/** /**
@@ -56,7 +62,7 @@ class QUIWidget : public QDialog
{ {
Q_OBJECT Q_OBJECT
Q_ENUMS(Style) Q_ENUMS(Style)
Q_PROPERTY(QString title READ getTitle WRITE setTitle) Q_PROPERTY(QString title READ getTitle WRITE setTitle)
Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment) Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment)
Q_PROPERTY(bool minHide READ getMinHide WRITE setMinHide) Q_PROPERTY(bool minHide READ getMinHide WRITE setMinHide)
@@ -488,8 +494,7 @@ public:
QString checkedBgColor; QString checkedBgColor;
QString checkedTextColor; QString checkedTextColor;
StyleColor() StyleColor() {
{
iconSize = 12; iconSize = 12;
iconWidth = 15; iconWidth = 15;
iconHeight = 15; iconHeight = 15;
@@ -578,9 +583,8 @@ public:
static int deskWidth(); static int deskWidth();
static int deskHeight(); static int deskHeight();
//程序本身文件名称 //程序文件名称+当前所在路径
static QString appName(); static QString appName();
//程序当前所在路径
static QString appPath(); static QString appPath();
//初始化随机数种子 //初始化随机数种子
@@ -595,8 +599,11 @@ public:
static void newDir(const QString &dirName); static void newDir(const QString &dirName);
//写入消息到额外的的消息日志文件 //写入消息到额外的的消息日志文件
static void writeInfo(const QString &info, const QString &filePath = "log"); static void writeInfo(const QString &info, bool needWrite = false, const QString &filePath = "log");
static void writeError(const QString &info, const QString &filePath = "log"); static void writeError(const QString &info, bool needWrite = false, const QString &filePath = "log");
//设置无边框窗体
static void setFramelessForm(QWidget *widgetMain, QWidget *widgetTitle, QLabel *labIco, QPushButton *btnClose, bool tool = true);
//设置全局样式 //设置全局样式
static void setStyle(QUIWidget::Style style); static void setStyle(QUIWidget::Style style);
@@ -619,7 +626,7 @@ public:
static QPixmap ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, int dstWidth, int dstHeight); static QPixmap ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, int dstWidth, int dstHeight);
//设置标签颜色 //设置标签颜色
static void setLabStyle(QLabel *lab, quint8 type); static void setLabStyle(QLabel *lab, quint8 type, const QString &bgColor = "", const QString &textColor = "");
//设置窗体居中显示 //设置窗体居中显示
static void setFormInCenter(QWidget *frm); static void setFormInCenter(QWidget *frm);
@@ -637,39 +644,30 @@ public:
//判断是否是IP地址 //判断是否是IP地址
static bool isIP(const QString &ip); static bool isIP(const QString &ip);
//判断是否是MAC地址 //判断是否是MAC地址
static bool isMac(const QString &mac); static bool isMac(const QString &mac);
//判断是否是合法的电话号码 //判断是否是合法的电话号码
static bool isTel(const QString &tel); static bool isTel(const QString &tel);
//判断是否是合法的邮箱地址 //判断是否是合法的邮箱地址
static bool isEmail(const QString &email); static bool isEmail(const QString &email);
//16进制字符串转10进制 //16进制字符串转10进制
static int strHexToDecimal(const QString &strHex); static int strHexToDecimal(const QString &strHex);
//10进制字符串转10进制 //10进制字符串转10进制
static int strDecimalToDecimal(const QString &strDecimal); static int strDecimalToDecimal(const QString &strDecimal);
//2进制字符串转10进制 //2进制字符串转10进制
static int strBinToDecimal(const QString &strBin); static int strBinToDecimal(const QString &strBin);
//16进制字符串转2进制字符串 //16进制字符串转2进制字符串
static QString strHexToStrBin(const QString &strHex); static QString strHexToStrBin(const QString &strHex);
//10进制转2进制字符串一个字节 //10进制转2进制字符串一个字节
static QString decimalToStrBin1(int decimal); static QString decimalToStrBin1(int decimal);
//10进制转2进制字符串两个字节 //10进制转2进制字符串两个字节
static QString decimalToStrBin2(int decimal); static QString decimalToStrBin2(int decimal);
//10进制转16进制字符串,补零. //10进制转16进制字符串,补零.
static QString decimalToStrHex(int decimal); static QString decimalToStrHex(int decimal);
//int转字节数组 //int转字节数组
static QByteArray intToByte(int i); static QByteArray intToByte(int i);
static QByteArray intToByteRec(int i); static QByteArray intToByteRec(int i);
@@ -690,85 +688,76 @@ public:
//异或加密算法 //异或加密算法
static QString getXorEncryptDecrypt(const QString &str, char key); static QString getXorEncryptDecrypt(const QString &str, char key);
//异或校验 //异或校验
static uchar getOrCode(const QByteArray &data); static uchar getOrCode(const QByteArray &data);
//计算校验码 //计算校验码
static uchar getCheckCode(const QByteArray &data); static uchar getCheckCode(const QByteArray &data);
//字符串补全
static QString getValue(quint8 value);
//CRC校验 //CRC校验
static quint16 getRevCrc_16(quint8 *data, int len, quint16 init, const quint16 *table); static quint16 getRevCrc_16(quint8 *data, int len, quint16 init, const quint16 *table);
static quint16 getCrc_16(quint8 *data, int len, quint16 init, const quint16 *table); static quint16 getCrc_16(quint8 *data, int len, quint16 init, const quint16 *table);
static quint16 getModbus16(quint8 *data, int len); static quint16 getModbus16(quint8 *data, int len);
static QByteArray getCRCCode(const QByteArray &data); static QByteArray getCRCCode(const QByteArray &data);
//字节数组转Ascii字符串 //字节数组转Ascii字符串
static QString byteArrayToAsciiStr(const QByteArray &data); static QString byteArrayToAsciiStr(const QByteArray &data);
//16进制字符串转字节数组 //16进制字符串转字节数组
static QByteArray hexStrToByteArray(const QString &str); static QByteArray hexStrToByteArray(const QString &str);
static char convertHexChar(char ch); static char convertHexChar(char ch);
//Ascii字符串转字节数组 //Ascii字符串转字节数组
static QByteArray asciiStrToByteArray(const QString &str); static QByteArray asciiStrToByteArray(const QString &str);
//字节数组转16进制字符串 //字节数组转16进制字符串
static QString byteArrayToHexStr(const QByteArray &data); static QString byteArrayToHexStr(const QByteArray &data);
//获取保存的文件 //获取保存的文件
static QString getSaveName(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath()); static QString getSaveName(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath());
//获取选择的文件 //获取选择的文件
static QString getFileName(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath()); static QString getFileName(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath());
//非阻塞保存文件对话框
static QString saveFileName(const QString &filter, const QString &defaultDir = "", const QString &fileName = "");
//获取选择的文件集合 //获取选择的文件集合
static QStringList getFileNames(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath()); static QStringList getFileNames(const QString &filter, QString defaultDir = QCoreApplication::applicationDirPath());
//获取选择的目录 //获取选择的目录
static QString getFolderName(); static QString getFolderName();
//获取文件名,含拓展名 //获取文件名,含拓展名
static QString getFileNameWithExtension(const QString &strFilePath); static QString getFileNameWithExtension(const QString &strFilePath);
//获取选择文件夹中的文件 //获取选择文件夹中的文件
static QStringList getFolderFileNames(const QStringList &filter); static QStringList getFolderFileNames(const QStringList &filter);
//文件夹是否存在 //文件夹是否存在
static bool folderIsExist(const QString &strFolder); static bool folderIsExist(const QString &strFolder);
//文件是否存在 //文件是否存在
static bool fileIsExist(const QString &strFile); static bool fileIsExist(const QString &strFile);
//复制文件 //复制文件
static bool copyFile(const QString &sourceFile, const QString &targetFile); static bool copyFile(const QString &sourceFile, const QString &targetFile);
//删除文件夹下所有文件 //删除文件夹下所有文件
static void deleteDirectory(const QString &path); static void deleteDirectory(const QString &path);
//判断IP地址及端口是否在线 //判断IP地址及端口是否在线
static bool ipLive(const QString &ip, int port, int timeout = 1000); static bool ipLive(const QString &ip, int port, int timeout = 1000);
//获取网页所有源代码 //获取网页所有源代码
static QString getHtml(const QString &url); static QString getHtml(const QString &url);
//获取本机公网IP地址 //获取本机公网IP地址
static QString getNetIP(const QString &webCode); static QString getNetIP(const QString &webCode);
//获取本机IP //获取本机IP
static QString getLocalIP(); static QString getLocalIP();
//获取本机IP地址集合
static QStringList getLocalIPs();
//Url地址转为IP地址 //Url地址转为IP地址
static QString urlToIP(const QString &url); static QString urlToIP(const QString &url);
//字符串补全
static QString getValue(quint8 value);
//判断是否通外网 //判断是否通外网
static bool isWebOk(); static bool isWebOk();
//初始化表格
static void initTableView(QTableView *tableView, int rowHeight = 25, bool headVisible = false, bool edit = false);
//弹出框
static int showMessageBox(const QString &info, int type = 0, int closeSec = 0, bool exec = false);
//弹出消息框 //弹出消息框
static void showMessageBoxInfo(const QString &info, int closeSec = 0, bool exec = false); static void showMessageBoxInfo(const QString &info, int closeSec = 0, bool exec = false);
//弹出错误框 //弹出错误框
@@ -785,7 +774,6 @@ public:
static QString showInputBox(const QString &title, int type = 0, int closeSec = 0, static QString showInputBox(const QString &title, int type = 0, int closeSec = 0,
const QString &placeholderText = QString(), bool pwd = false, const QString &placeholderText = QString(), bool pwd = false,
const QString &defaultValue = QString()); const QString &defaultValue = QString());
//弹出日期选择框 //弹出日期选择框
static void showDateSelect(QString &dateStart, QString &dateEnd, const QString &format = "yyyy-MM-dd"); static void showDateSelect(QString &dateStart, QString &dateEnd, const QString &format = "yyyy-MM-dd");
@@ -800,14 +788,12 @@ public:
const QString &hoverTextColor = "#F0F0F0", //悬停文字颜色 const QString &hoverTextColor = "#F0F0F0", //悬停文字颜色
const QString &pressedColor = "#2D3E50", //按下颜色 const QString &pressedColor = "#2D3E50", //按下颜色
const QString &pressedTextColor = "#B8C6D1"); //按下文字颜色 const QString &pressedTextColor = "#B8C6D1"); //按下文字颜色
//设置文本框样式 //设置文本框样式
static QString setLineEditQss(QLineEdit *txt, //文本框对象 static QString setLineEditQss(QLineEdit *txt, //文本框对象
int radius = 3, //圆角半径 int radius = 3, //圆角半径
int borderWidth = 2, //边框大小 int borderWidth = 2, //边框大小
const QString &normalColor = "#DCE4EC", //正常颜色 const QString &normalColor = "#DCE4EC", //正常颜色
const QString &focusColor = "#34495E"); //选中颜色 const QString &focusColor = "#34495E"); //选中颜色
//设置进度条样式 //设置进度条样式
static QString setProgressBarQss(QProgressBar *bar, static QString setProgressBarQss(QProgressBar *bar,
int barHeight = 8, //进度条高度 int barHeight = 8, //进度条高度
@@ -815,7 +801,6 @@ public:
int fontSize = 9, //文字字号 int fontSize = 9, //文字字号
const QString &normalColor = "#E8EDF2", //正常颜色 const QString &normalColor = "#E8EDF2", //正常颜色
const QString &chunkColor = "#E74C3C"); //进度颜色 const QString &chunkColor = "#E74C3C"); //进度颜色
//设置滑块条样式 //设置滑块条样式
static QString setSliderQss(QSlider *slider, //滑动条对象 static QString setSliderQss(QSlider *slider, //滑动条对象
int sliderHeight = 8, //滑动条高度 int sliderHeight = 8, //滑动条高度
@@ -824,13 +809,11 @@ public:
const QString &handleBorderColor = "#1ABC9C", //指示器边框颜色 const QString &handleBorderColor = "#1ABC9C", //指示器边框颜色
const QString &handleColor = "#FFFFFF", //指示器颜色 const QString &handleColor = "#FFFFFF", //指示器颜色
const QString &textColor = "#000000"); //文字颜色 const QString &textColor = "#000000"); //文字颜色
//设置单选框样式 //设置单选框样式
static QString setRadioButtonQss(QRadioButton *rbtn, //单选框对象 static QString setRadioButtonQss(QRadioButton *rbtn, //单选框对象
int indicatorRadius = 8, //指示器圆角角度 int indicatorRadius = 8, //指示器圆角角度
const QString &normalColor = "#D7DBDE", //正常颜色 const QString &normalColor = "#D7DBDE", //正常颜色
const QString &checkColor = "#34495E"); //选中颜色 const QString &checkColor = "#34495E"); //选中颜色
//设置滚动条样式 //设置滚动条样式
static QString setScrollBarQss(QWidget *scroll, //滚动条对象 static QString setScrollBarQss(QWidget *scroll, //滚动条对象
int radius = 6, //圆角角度 int radius = 6, //圆角角度

View File

@@ -281,9 +281,9 @@ void VideoWidget::drawBg(QPainter *painter)
painter->drawText(rect(), Qt::AlignCenter, bgText); painter->drawText(rect(), Qt::AlignCenter, bgText);
} else { } else {
//居中绘制 //居中绘制
int pixX = rect().center().x() - bgImage.width() / 2; int x = rect().center().x() - bgImage.width() / 2;
int pixY = rect().center().y() - bgImage.height() / 2; int y = rect().center().y() - bgImage.height() / 2;
QPoint point(pixX, pixY); QPoint point(x, y);
painter->drawImage(point, bgImage); painter->drawImage(point, bgImage);
} }
@@ -301,9 +301,9 @@ void VideoWidget::drawImg(QPainter *painter, QImage img)
} else { } else {
//按照比例自动居中绘制 //按照比例自动居中绘制
img = img.scaled(width() - offset, height() - offset, Qt::KeepAspectRatio); img = img.scaled(width() - offset, height() - offset, Qt::KeepAspectRatio);
int pixX = rect().center().x() - img.width() / 2; int x = rect().center().x() - img.width() / 2;
int pixY = rect().center().y() - img.height() / 2; int y = rect().center().y() - img.height() / 2;
QPoint point(pixX, pixY); QPoint point(x, y);
painter->drawImage(point, img); painter->drawImage(point, img);
} }

View File

@@ -206,7 +206,7 @@ private slots:
signals: signals:
//播放成功 //播放成功
void receivePlayOk(); void receivePlayStart();
//播放失败 //播放失败
void receivePlayError(); void receivePlayError();
//播放结束 //播放结束