修正部分错误
parent
0ee67807f0
commit
8289db89ce
|
@ -1,13 +1,14 @@
|
|||
#include "quiwidget.h"
|
||||
#ifdef Q_OS_ANDROID
|
||||
#include "qandroid.h"
|
||||
#endif
|
||||
|
||||
#ifdef __arm__
|
||||
#ifdef arma7
|
||||
#define TOOL true
|
||||
#else
|
||||
#define TOOL false
|
||||
#endif
|
||||
#else
|
||||
#define TOOL false
|
||||
#endif
|
||||
|
||||
QUIWidget::QUIWidget(QWidget *parent) : QDialog(parent)
|
||||
{
|
||||
|
@ -17,7 +18,7 @@ QUIWidget::QUIWidget(QWidget *parent) : QDialog(parent)
|
|||
}
|
||||
|
||||
QUIWidget::~QUIWidget()
|
||||
{
|
||||
{
|
||||
}
|
||||
|
||||
bool QUIWidget::eventFilter(QObject *watched, QEvent *event)
|
||||
|
@ -34,7 +35,7 @@ bool QUIWidget::eventFilter(QObject *watched, QEvent *event)
|
|||
} else if (mouseEvent->type() == QEvent::MouseButtonRelease) {
|
||||
mousePressed = false;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
if (this->property("canMove").toBool()) {
|
||||
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)
|
||||
{
|
||||
//按照宽高比自动缩放
|
||||
QPixmap pix = QPixmap(file);
|
||||
QPixmap pix = QPixmap(file);
|
||||
pix = pix.scaled(size, Qt::KeepAspectRatio);
|
||||
if (widget == QUIWidget::Lab_Ico) {
|
||||
this->labIco->setPixmap(pix);
|
||||
|
@ -454,12 +455,12 @@ void QUIWidget::setExitAll(bool exitAll)
|
|||
void QUIWidget::setMainWidget(QWidget *mainWidget)
|
||||
{
|
||||
//一个QUI窗体对象只能设置一个主窗体
|
||||
if (this->mainWidget == 0) {
|
||||
if (this->mainWidget == 0) {
|
||||
//将子窗体添加到布局
|
||||
this->widget->layout()->addWidget(mainWidget);
|
||||
//自动设置大小
|
||||
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;
|
||||
return true;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
this->move(mouseEvent->globalPos() - mousePoint);
|
||||
return true;
|
||||
}
|
||||
|
@ -573,7 +574,6 @@ void QUIMessageBox::initControl()
|
|||
sizePolicy.setVerticalStretch(0);
|
||||
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
|
||||
widgetTitle->setSizePolicy(sizePolicy);
|
||||
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
|
||||
horizontalLayout3 = new QHBoxLayout(widgetTitle);
|
||||
horizontalLayout3->setSpacing(0);
|
||||
horizontalLayout3->setObjectName(QString::fromUtf8("horizontalLayout3"));
|
||||
|
@ -585,7 +585,6 @@ void QUIMessageBox::initControl()
|
|||
sizePolicy1.setVerticalStretch(0);
|
||||
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
|
||||
labIco->setSizePolicy(sizePolicy1);
|
||||
labIco->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
labIco->setAlignment(Qt::AlignCenter);
|
||||
|
||||
horizontalLayout3->addWidget(labIco);
|
||||
|
@ -622,8 +621,6 @@ void QUIMessageBox::initControl()
|
|||
sizePolicy3.setVerticalStretch(0);
|
||||
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
|
||||
btnMenu_Close->setSizePolicy(sizePolicy3);
|
||||
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
|
||||
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
|
||||
btnMenu_Close->setFocusPolicy(Qt::NoFocus);
|
||||
btnMenu_Close->setFlat(true);
|
||||
|
@ -704,31 +701,19 @@ void QUIMessageBox::initControl()
|
|||
|
||||
void QUIMessageBox::initForm()
|
||||
{
|
||||
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2);
|
||||
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);
|
||||
}
|
||||
|
||||
QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
|
||||
this->setWindowTitle(this->labTitle->text());
|
||||
this->setFixedSize(DialogMinWidth, DialogMinHeight);
|
||||
labIcoMain->setFixedSize(TitleMinSize, TitleMinSize);
|
||||
|
||||
#ifdef __arm__
|
||||
int width = 90;
|
||||
int iconWidth = 22;
|
||||
int iconHeight = 22;
|
||||
this->setFixedSize(350, 180);
|
||||
labIcoMain->setFixedSize(40, 40);
|
||||
#else
|
||||
int width = 80;
|
||||
int iconWidth = 18;
|
||||
int iconHeight = 18;
|
||||
this->setFixedSize(280, 150);
|
||||
labIcoMain->setFixedSize(30, 30);
|
||||
#endif
|
||||
|
||||
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->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;
|
||||
return true;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
this->move(mouseEvent->globalPos() - mousePoint);
|
||||
return true;
|
||||
}
|
||||
|
@ -901,7 +893,6 @@ void QUITipBox::initControl()
|
|||
horizontalLayout2->setContentsMargins(0, 0, 0, 0);
|
||||
labIco = new QLabel(widgetTitle);
|
||||
labIco->setObjectName(QString::fromUtf8("labIco"));
|
||||
labIco->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
labIco->setAlignment(Qt::AlignCenter);
|
||||
horizontalLayout2->addWidget(labIco);
|
||||
|
||||
|
@ -917,6 +908,7 @@ void QUITipBox::initControl()
|
|||
sizePolicy1.setVerticalStretch(0);
|
||||
sizePolicy1.setHeightForWidth(labTime->sizePolicy().hasHeightForWidth());
|
||||
labTime->setSizePolicy(sizePolicy1);
|
||||
labTime->setAlignment(Qt::AlignCenter);
|
||||
horizontalLayout2->addWidget(labTime);
|
||||
|
||||
widgetMenu = new QWidget(widgetTitle);
|
||||
|
@ -937,8 +929,6 @@ void QUITipBox::initControl()
|
|||
sizePolicy3.setVerticalStretch(0);
|
||||
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
|
||||
btnMenu_Close->setSizePolicy(sizePolicy3);
|
||||
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
|
||||
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
|
||||
btnMenu_Close->setFocusPolicy(Qt::NoFocus);
|
||||
btnMenu_Close->setFlat(true);
|
||||
|
@ -963,12 +953,7 @@ void QUITipBox::initControl()
|
|||
|
||||
void QUITipBox::initForm()
|
||||
{
|
||||
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2);
|
||||
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);
|
||||
QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
|
||||
this->setWindowTitle(this->labTitle->text());
|
||||
|
||||
#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->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 height = rect.height();
|
||||
int x = width - this->width();
|
||||
|
@ -1118,7 +1103,6 @@ void QUIInputBox::initControl()
|
|||
sizePolicy.setVerticalStretch(0);
|
||||
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
|
||||
widgetTitle->setSizePolicy(sizePolicy);
|
||||
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
|
||||
horizontalLayout1 = new QHBoxLayout(widgetTitle);
|
||||
horizontalLayout1->setSpacing(0);
|
||||
horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1"));
|
||||
|
@ -1130,7 +1114,6 @@ void QUIInputBox::initControl()
|
|||
sizePolicy1.setVerticalStretch(0);
|
||||
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
|
||||
labIco->setSizePolicy(sizePolicy1);
|
||||
labIco->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
labIco->setAlignment(Qt::AlignCenter);
|
||||
|
||||
horizontalLayout1->addWidget(labIco);
|
||||
|
@ -1167,8 +1150,6 @@ void QUIInputBox::initControl()
|
|||
sizePolicy3.setVerticalStretch(0);
|
||||
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
|
||||
btnMenu_Close->setSizePolicy(sizePolicy3);
|
||||
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
|
||||
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
|
||||
btnMenu_Close->setFocusPolicy(Qt::NoFocus);
|
||||
btnMenu_Close->setFlat(true);
|
||||
|
@ -1238,17 +1219,7 @@ void QUIInputBox::initControl()
|
|||
|
||||
void QUIInputBox::initForm()
|
||||
{
|
||||
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2);
|
||||
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);
|
||||
}
|
||||
|
||||
QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
|
||||
this->setWindowTitle(this->labTitle->text());
|
||||
|
||||
#ifdef __arm__
|
||||
|
@ -1347,7 +1318,7 @@ bool QUIInputBox::eventFilter(QObject *watched, QEvent *event)
|
|||
mousePressed = false;
|
||||
return true;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
this->move(mouseEvent->globalPos() - mousePoint);
|
||||
return true;
|
||||
}
|
||||
|
@ -1422,7 +1393,7 @@ bool QUIDateSelect::eventFilter(QObject *watched, QEvent *event)
|
|||
mousePressed = false;
|
||||
return true;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
this->move(mouseEvent->globalPos() - mousePoint);
|
||||
return true;
|
||||
}
|
||||
|
@ -1446,7 +1417,6 @@ void QUIDateSelect::initControl()
|
|||
sizePolicy.setVerticalStretch(0);
|
||||
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
|
||||
widgetTitle->setSizePolicy(sizePolicy);
|
||||
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
|
||||
horizontalLayout1 = new QHBoxLayout(widgetTitle);
|
||||
horizontalLayout1->setSpacing(0);
|
||||
horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1"));
|
||||
|
@ -1458,7 +1428,6 @@ void QUIDateSelect::initControl()
|
|||
sizePolicy1.setVerticalStretch(0);
|
||||
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
|
||||
labIco->setSizePolicy(sizePolicy1);
|
||||
labIco->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
labIco->setAlignment(Qt::AlignCenter);
|
||||
horizontalLayout1->addWidget(labIco);
|
||||
|
||||
|
@ -1487,8 +1456,6 @@ void QUIDateSelect::initControl()
|
|||
sizePolicy3.setVerticalStretch(0);
|
||||
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
|
||||
btnMenu_Close->setSizePolicy(sizePolicy3);
|
||||
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
|
||||
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
|
||||
btnMenu_Close->setFocusPolicy(Qt::NoFocus);
|
||||
btnMenu_Close->setFlat(true);
|
||||
|
@ -1583,17 +1550,7 @@ void QUIDateSelect::initControl()
|
|||
|
||||
void QUIDateSelect::initForm()
|
||||
{
|
||||
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2);
|
||||
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);
|
||||
}
|
||||
|
||||
QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
|
||||
this->setWindowTitle(this->labTitle->text());
|
||||
|
||||
#ifdef __arm__
|
||||
|
@ -2053,14 +2010,14 @@ TrayIcon::TrayIcon(QObject *parent) : QObject(parent)
|
|||
void TrayIcon::iconIsActived(QSystemTrayIcon::ActivationReason reason)
|
||||
{
|
||||
switch (reason) {
|
||||
case QSystemTrayIcon::Trigger:
|
||||
case QSystemTrayIcon::DoubleClick: {
|
||||
mainWidget->showNormal();
|
||||
break;
|
||||
}
|
||||
case QSystemTrayIcon::Trigger:
|
||||
case QSystemTrayIcon::DoubleClick: {
|
||||
mainWidget->showNormal();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2141,6 +2098,7 @@ QString QUIHelper::appName()
|
|||
static QString name;
|
||||
if (name.isEmpty()) {
|
||||
name = qApp->applicationFilePath();
|
||||
//下面的方法主要为了过滤安卓的路径 lib程序名_armeabi-v7a
|
||||
QStringList list = name.split("/");
|
||||
name = list.at(list.count() - 1).split(".").at(0);
|
||||
}
|
||||
|
@ -2151,7 +2109,8 @@ QString QUIHelper::appName()
|
|||
QString QUIHelper::appPath()
|
||||
{
|
||||
#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
|
||||
return qApp->applicationDirPath();
|
||||
#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())
|
||||
.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();
|
||||
}
|
||||
|
||||
void QUIHelper::writeError(const QString &info, const QString &filePath)
|
||||
void QUIHelper::writeError(const QString &info, bool needWrite, const QString &filePath)
|
||||
{
|
||||
//正式运行屏蔽掉输出错误信息,调试阶段才需要
|
||||
return;
|
||||
if (!needWrite) {
|
||||
return;
|
||||
}
|
||||
|
||||
QString fileName = QString("%1/%2/%3_runerror_%4.txt").arg(QUIHelper::appPath())
|
||||
.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();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
QString qssFile = ":/qss/lightblue.css";
|
||||
|
||||
if (style == QUIWidget::Style_Silvery) {
|
||||
qssFile = ":/qss/silvery.css";
|
||||
} else if (style == QUIWidget::Style_Blue) {
|
||||
|
@ -2260,7 +2251,6 @@ void QUIHelper::setStyle(QUIWidget::Style style)
|
|||
}
|
||||
|
||||
QFile file(qssFile);
|
||||
|
||||
if (file.open(QFile::ReadOnly)) {
|
||||
QString qss = QLatin1String(file.readAll());
|
||||
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 str = qss;
|
||||
|
||||
QString flagTextColor = "TextColor:";
|
||||
int indexTextColor = str.indexOf(flagTextColor);
|
||||
if (indexTextColor >= 0) {
|
||||
|
@ -2398,7 +2387,6 @@ QPixmap QUIHelper::ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, i
|
|||
|
||||
QPainter painter;
|
||||
painter.begin(&resultImg);
|
||||
|
||||
if (!resultImg.isNull()) {
|
||||
painter.drawPixmap(0, 0, pix1);
|
||||
painter.drawPixmap(horzSplit, 0, pix2);
|
||||
|
@ -2414,27 +2402,55 @@ QPixmap QUIHelper::ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, i
|
|||
}
|
||||
|
||||
painter.end();
|
||||
|
||||
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 qssRed = "QLabel{border:none;background-color:rgb(214,64,48);color:rgb(255,255,255);}" + qssDisable;
|
||||
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;
|
||||
QString colorBg = bgColor;
|
||||
QString colorText = textColor;
|
||||
|
||||
if (type == 0) {
|
||||
lab->setStyleSheet(qssRed);
|
||||
} else if (type == 1) {
|
||||
lab->setStyleSheet(qssGreen);
|
||||
} else if (type == 2) {
|
||||
lab->setStyleSheet(qssBlue);
|
||||
} else if (type == 3) {
|
||||
lab->setStyleSheet(qssDark);
|
||||
//如果设置了新颜色则启用新颜色
|
||||
if (bgColor.isEmpty() || textColor.isEmpty()) {
|
||||
if (type == 0) {
|
||||
colorBg = "#D64D54";
|
||||
colorText = "#FFFFFF";
|
||||
} else if (type == 1) {
|
||||
colorBg = "#17A086";
|
||||
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)
|
||||
|
@ -2474,9 +2490,15 @@ void QUIHelper::setCode()
|
|||
|
||||
void QUIHelper::sleep(int msec)
|
||||
{
|
||||
QTime dieTime = QTime::currentTime().addMSecs(msec);
|
||||
while (QTime::currentTime() < dieTime) {
|
||||
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
|
||||
if (msec > 0) {
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
|
||||
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;
|
||||
result.resize(2);
|
||||
result[0] = (uchar) (0x000000ff & i);
|
||||
result[1] = (uchar) ((0x0000ff00 & i) >> 8);
|
||||
result[0] = (uchar)(0x000000ff & i);
|
||||
result[1] = (uchar)((0x0000ff00 & i) >> 8);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -2751,15 +2773,6 @@ uchar QUIHelper::getCheckCode(const QByteArray &data)
|
|||
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
|
||||
//参数1:*data 16位CRC校验数据,
|
||||
//参数2:len 数据流长度
|
||||
|
@ -2771,8 +2784,7 @@ quint16 QUIHelper::getRevCrc_16(quint8 *data, int len, quint16 init, const quint
|
|||
{
|
||||
quint16 cRc_16 = init;
|
||||
quint8 temp;
|
||||
|
||||
while(len-- > 0) {
|
||||
while (len-- > 0) {
|
||||
temp = cRc_16 >> 8;
|
||||
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;
|
||||
quint8 temp;
|
||||
|
||||
while(len-- > 0) {
|
||||
while (len-- > 0) {
|
||||
temp = cRc_16 & 0xff;
|
||||
cRc_16 = (cRc_16 >> 8) ^ table[(temp ^ *data++) & 0xff];
|
||||
}
|
||||
|
@ -2847,7 +2858,6 @@ QString QUIHelper::byteArrayToAsciiStr(const QByteArray &data)
|
|||
{
|
||||
QString temp;
|
||||
int len = data.size();
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
//0x20为空格,空格以下都是不可见字符
|
||||
char b = data.at(i);
|
||||
|
@ -3278,12 +3288,33 @@ QString QUIHelper::byteArrayToHexStr(const QByteArray &data)
|
|||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
|
@ -3361,11 +3392,21 @@ void QUIHelper::deleteDirectory(const QString &path)
|
|||
|
||||
bool QUIHelper::ipLive(const QString &ip, int port, int timeout)
|
||||
{
|
||||
QTcpSocket tcpClient;
|
||||
tcpClient.abort();
|
||||
tcpClient.connectToHost(ip, port);
|
||||
//超时没有连接上则判断不在线
|
||||
return tcpClient.waitForConnected(timeout);
|
||||
//局部的事件循环,不卡主界面
|
||||
QEventLoop eventLoop;
|
||||
|
||||
//设置超时
|
||||
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)
|
||||
|
@ -3394,17 +3435,9 @@ QString QUIHelper::getNetIP(const QString &webCode)
|
|||
|
||||
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
|
||||
QString ip = "127.0.0.1";
|
||||
QStringList ips = getLocalIPs();
|
||||
foreach (QString str, ips) {
|
||||
if (str.startsWith("192.168.1") || str.startsWith("192")) {
|
||||
ip = str;
|
||||
|
@ -3415,23 +3448,111 @@ QString QUIHelper::getLocalIP()
|
|||
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)
|
||||
{
|
||||
QHostInfo host = QHostInfo::fromName(url);
|
||||
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()
|
||||
{
|
||||
//能接通百度IP说明可以通外网
|
||||
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)
|
||||
{
|
||||
#ifdef Q_OS_ANDROID
|
||||
QAndroid::Instance()->makeToast(info);
|
||||
#else
|
||||
if (exec) {
|
||||
QUIMessageBox msg;
|
||||
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()->show();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void QUIHelper::showMessageBoxError(const QString &info, int closeSec, bool exec)
|
||||
{
|
||||
#ifdef Q_OS_ANDROID
|
||||
QAndroid::Instance()->makeToast(info);
|
||||
#else
|
||||
if (exec) {
|
||||
QUIMessageBox msg;
|
||||
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()->show();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int QUIHelper::showMessageBoxQuestion(const QString &info)
|
||||
|
@ -3666,13 +3782,8 @@ QChar QUIConfig::IconNormal = QChar(0xf2d0);
|
|||
QChar QUIConfig::IconClose = QChar(0xf00d);
|
||||
|
||||
#ifdef __arm__
|
||||
#ifdef Q_OS_ANDROID
|
||||
QString QUIConfig::FontName = "Droid Sans Fallback";
|
||||
int QUIConfig::FontSize = 15;
|
||||
#else
|
||||
QString QUIConfig::FontName = "WenQuanYi Micro Hei";
|
||||
int QUIConfig::FontSize = 18;
|
||||
#endif
|
||||
#else
|
||||
QString QUIConfig::FontName = "Microsoft Yahei";
|
||||
int QUIConfig::FontSize = 12;
|
||||
|
|
|
@ -9,16 +9,22 @@
|
|||
#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"))
|
||||
|
||||
//定义换行符
|
||||
#ifdef Q_OS_WIN
|
||||
#define NEWLINE "\r\n"
|
||||
#else
|
||||
#define NEWLINE "\n"
|
||||
#endif
|
||||
|
||||
//定义无边框标题栏高度+对话框最小宽高
|
||||
#ifdef __arm__
|
||||
#define TitleMinSize 40
|
||||
#define DialogMinWidth 350
|
||||
#define DialogMinHeight 180
|
||||
#else
|
||||
#define TitleMinSize 30
|
||||
#define DialogMinWidth 280
|
||||
#define DialogMinHeight 150
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -56,7 +62,7 @@ class QUIWidget : public QDialog
|
|||
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_ENUMS(Style)
|
||||
Q_ENUMS(Style)
|
||||
Q_PROPERTY(QString title READ getTitle WRITE setTitle)
|
||||
Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment)
|
||||
Q_PROPERTY(bool minHide READ getMinHide WRITE setMinHide)
|
||||
|
@ -488,8 +494,7 @@ public:
|
|||
QString checkedBgColor;
|
||||
QString checkedTextColor;
|
||||
|
||||
StyleColor()
|
||||
{
|
||||
StyleColor() {
|
||||
iconSize = 12;
|
||||
iconWidth = 15;
|
||||
iconHeight = 15;
|
||||
|
@ -578,9 +583,8 @@ public:
|
|||
static int deskWidth();
|
||||
static int deskHeight();
|
||||
|
||||
//程序本身文件名称
|
||||
//程序文件名称+当前所在路径
|
||||
static QString appName();
|
||||
//程序当前所在路径
|
||||
static QString appPath();
|
||||
|
||||
//初始化随机数种子
|
||||
|
@ -595,8 +599,11 @@ public:
|
|||
static void newDir(const QString &dirName);
|
||||
|
||||
//写入消息到额外的的消息日志文件
|
||||
static void writeInfo(const QString &info, const QString &filePath = "log");
|
||||
static void writeError(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, 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);
|
||||
|
@ -619,7 +626,7 @@ public:
|
|||
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);
|
||||
|
@ -637,39 +644,30 @@ public:
|
|||
|
||||
//判断是否是IP地址
|
||||
static bool isIP(const QString &ip);
|
||||
|
||||
//判断是否是MAC地址
|
||||
static bool isMac(const QString &mac);
|
||||
|
||||
//判断是否是合法的电话号码
|
||||
static bool isTel(const QString &tel);
|
||||
|
||||
//判断是否是合法的邮箱地址
|
||||
static bool isEmail(const QString &email);
|
||||
|
||||
|
||||
//16进制字符串转10进制
|
||||
static int strHexToDecimal(const QString &strHex);
|
||||
|
||||
//10进制字符串转10进制
|
||||
static int strDecimalToDecimal(const QString &strDecimal);
|
||||
|
||||
//2进制字符串转10进制
|
||||
static int strBinToDecimal(const QString &strBin);
|
||||
|
||||
//16进制字符串转2进制字符串
|
||||
static QString strHexToStrBin(const QString &strHex);
|
||||
|
||||
//10进制转2进制字符串一个字节
|
||||
static QString decimalToStrBin1(int decimal);
|
||||
|
||||
//10进制转2进制字符串两个字节
|
||||
static QString decimalToStrBin2(int decimal);
|
||||
|
||||
//10进制转16进制字符串,补零.
|
||||
static QString decimalToStrHex(int decimal);
|
||||
|
||||
|
||||
//int转字节数组
|
||||
static QByteArray intToByte(int i);
|
||||
static QByteArray intToByteRec(int i);
|
||||
|
@ -690,85 +688,76 @@ public:
|
|||
|
||||
//异或加密算法
|
||||
static QString getXorEncryptDecrypt(const QString &str, char key);
|
||||
|
||||
//异或校验
|
||||
static uchar getOrCode(const QByteArray &data);
|
||||
|
||||
//计算校验码
|
||||
static uchar getCheckCode(const QByteArray &data);
|
||||
|
||||
//字符串补全
|
||||
static QString getValue(quint8 value);
|
||||
|
||||
//CRC校验
|
||||
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 getModbus16(quint8 *data, int len);
|
||||
static QByteArray getCRCCode(const QByteArray &data);
|
||||
|
||||
|
||||
//字节数组转Ascii字符串
|
||||
static QString byteArrayToAsciiStr(const QByteArray &data);
|
||||
|
||||
//16进制字符串转字节数组
|
||||
static QByteArray hexStrToByteArray(const QString &str);
|
||||
static char convertHexChar(char ch);
|
||||
|
||||
//Ascii字符串转字节数组
|
||||
static QByteArray asciiStrToByteArray(const QString &str);
|
||||
|
||||
//字节数组转16进制字符串
|
||||
static QString byteArrayToHexStr(const QByteArray &data);
|
||||
|
||||
//获取保存的文件
|
||||
static QString getSaveName(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 QString getFolderName();
|
||||
|
||||
//获取文件名,含拓展名
|
||||
static QString getFileNameWithExtension(const QString &strFilePath);
|
||||
|
||||
//获取选择文件夹中的文件
|
||||
static QStringList getFolderFileNames(const QStringList &filter);
|
||||
|
||||
//文件夹是否存在
|
||||
static bool folderIsExist(const QString &strFolder);
|
||||
|
||||
//文件是否存在
|
||||
static bool fileIsExist(const QString &strFile);
|
||||
|
||||
//复制文件
|
||||
static bool copyFile(const QString &sourceFile, const QString &targetFile);
|
||||
|
||||
//删除文件夹下所有文件
|
||||
static void deleteDirectory(const QString &path);
|
||||
|
||||
//判断IP地址及端口是否在线
|
||||
static bool ipLive(const QString &ip, int port, int timeout = 1000);
|
||||
|
||||
//获取网页所有源代码
|
||||
static QString getHtml(const QString &url);
|
||||
|
||||
//获取本机公网IP地址
|
||||
static QString getNetIP(const QString &webCode);
|
||||
|
||||
//获取本机IP
|
||||
static QString getLocalIP();
|
||||
|
||||
//获取本机IP地址集合
|
||||
static QStringList getLocalIPs();
|
||||
//Url地址转为IP地址
|
||||
static QString urlToIP(const QString &url);
|
||||
|
||||
//字符串补全
|
||||
static QString getValue(quint8 value);
|
||||
//判断是否通外网
|
||||
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);
|
||||
//弹出错误框
|
||||
|
@ -785,7 +774,6 @@ public:
|
|||
static QString showInputBox(const QString &title, int type = 0, int closeSec = 0,
|
||||
const QString &placeholderText = QString(), bool pwd = false,
|
||||
const QString &defaultValue = QString());
|
||||
|
||||
//弹出日期选择框
|
||||
static void showDateSelect(QString &dateStart, QString &dateEnd, const QString &format = "yyyy-MM-dd");
|
||||
|
||||
|
@ -800,14 +788,12 @@ public:
|
|||
const QString &hoverTextColor = "#F0F0F0", //悬停文字颜色
|
||||
const QString &pressedColor = "#2D3E50", //按下颜色
|
||||
const QString &pressedTextColor = "#B8C6D1"); //按下文字颜色
|
||||
|
||||
//设置文本框样式
|
||||
static QString setLineEditQss(QLineEdit *txt, //文本框对象
|
||||
int radius = 3, //圆角半径
|
||||
int borderWidth = 2, //边框大小
|
||||
const QString &normalColor = "#DCE4EC", //正常颜色
|
||||
const QString &focusColor = "#34495E"); //选中颜色
|
||||
|
||||
//设置进度条样式
|
||||
static QString setProgressBarQss(QProgressBar *bar,
|
||||
int barHeight = 8, //进度条高度
|
||||
|
@ -815,7 +801,6 @@ public:
|
|||
int fontSize = 9, //文字字号
|
||||
const QString &normalColor = "#E8EDF2", //正常颜色
|
||||
const QString &chunkColor = "#E74C3C"); //进度颜色
|
||||
|
||||
//设置滑块条样式
|
||||
static QString setSliderQss(QSlider *slider, //滑动条对象
|
||||
int sliderHeight = 8, //滑动条高度
|
||||
|
@ -824,13 +809,11 @@ public:
|
|||
const QString &handleBorderColor = "#1ABC9C", //指示器边框颜色
|
||||
const QString &handleColor = "#FFFFFF", //指示器颜色
|
||||
const QString &textColor = "#000000"); //文字颜色
|
||||
|
||||
//设置单选框样式
|
||||
static QString setRadioButtonQss(QRadioButton *rbtn, //单选框对象
|
||||
int indicatorRadius = 8, //指示器圆角角度
|
||||
const QString &normalColor = "#D7DBDE", //正常颜色
|
||||
const QString &checkColor = "#34495E"); //选中颜色
|
||||
|
||||
//设置滚动条样式
|
||||
static QString setScrollBarQss(QWidget *scroll, //滚动条对象
|
||||
int radius = 6, //圆角角度
|
||||
|
|
|
@ -58,7 +58,7 @@ bool GifWidget::eventFilter(QObject *watched, QEvent *event)
|
|||
mousePressed = false;
|
||||
return true;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
this->move(mouseEvent->globalPos() - mousePoint);
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
#include "quiwidget.h"
|
||||
#ifdef Q_OS_ANDROID
|
||||
#include "qandroid.h"
|
||||
#endif
|
||||
|
||||
#ifdef __arm__
|
||||
#ifdef arma7
|
||||
#define TOOL true
|
||||
#else
|
||||
#define TOOL false
|
||||
#endif
|
||||
#else
|
||||
#define TOOL false
|
||||
#endif
|
||||
|
||||
QUIWidget::QUIWidget(QWidget *parent) : QDialog(parent)
|
||||
{
|
||||
|
@ -34,7 +35,7 @@ bool QUIWidget::eventFilter(QObject *watched, QEvent *event)
|
|||
} else if (mouseEvent->type() == QEvent::MouseButtonRelease) {
|
||||
mousePressed = false;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
if (this->property("canMove").toBool()) {
|
||||
this->move(mouseEvent->globalPos() - mousePoint);
|
||||
}
|
||||
|
@ -549,7 +550,7 @@ bool QUIMessageBox::eventFilter(QObject *watched, QEvent *event)
|
|||
mousePressed = false;
|
||||
return true;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
this->move(mouseEvent->globalPos() - mousePoint);
|
||||
return true;
|
||||
}
|
||||
|
@ -573,7 +574,6 @@ void QUIMessageBox::initControl()
|
|||
sizePolicy.setVerticalStretch(0);
|
||||
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
|
||||
widgetTitle->setSizePolicy(sizePolicy);
|
||||
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
|
||||
horizontalLayout3 = new QHBoxLayout(widgetTitle);
|
||||
horizontalLayout3->setSpacing(0);
|
||||
horizontalLayout3->setObjectName(QString::fromUtf8("horizontalLayout3"));
|
||||
|
@ -585,7 +585,6 @@ void QUIMessageBox::initControl()
|
|||
sizePolicy1.setVerticalStretch(0);
|
||||
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
|
||||
labIco->setSizePolicy(sizePolicy1);
|
||||
labIco->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
labIco->setAlignment(Qt::AlignCenter);
|
||||
|
||||
horizontalLayout3->addWidget(labIco);
|
||||
|
@ -622,8 +621,6 @@ void QUIMessageBox::initControl()
|
|||
sizePolicy3.setVerticalStretch(0);
|
||||
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
|
||||
btnMenu_Close->setSizePolicy(sizePolicy3);
|
||||
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
|
||||
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
|
||||
btnMenu_Close->setFocusPolicy(Qt::NoFocus);
|
||||
btnMenu_Close->setFlat(true);
|
||||
|
@ -704,31 +701,19 @@ void QUIMessageBox::initControl()
|
|||
|
||||
void QUIMessageBox::initForm()
|
||||
{
|
||||
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2);
|
||||
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);
|
||||
}
|
||||
|
||||
QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
|
||||
this->setWindowTitle(this->labTitle->text());
|
||||
this->setFixedSize(DialogMinWidth, DialogMinHeight);
|
||||
labIcoMain->setFixedSize(TitleMinSize, TitleMinSize);
|
||||
|
||||
#ifdef __arm__
|
||||
int width = 90;
|
||||
int iconWidth = 22;
|
||||
int iconHeight = 22;
|
||||
this->setFixedSize(350, 180);
|
||||
labIcoMain->setFixedSize(40, 40);
|
||||
#else
|
||||
int width = 80;
|
||||
int iconWidth = 18;
|
||||
int iconHeight = 18;
|
||||
this->setFixedSize(280, 150);
|
||||
labIcoMain->setFixedSize(30, 30);
|
||||
#endif
|
||||
|
||||
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->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;
|
||||
return true;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
this->move(mouseEvent->globalPos() - mousePoint);
|
||||
return true;
|
||||
}
|
||||
|
@ -901,7 +893,6 @@ void QUITipBox::initControl()
|
|||
horizontalLayout2->setContentsMargins(0, 0, 0, 0);
|
||||
labIco = new QLabel(widgetTitle);
|
||||
labIco->setObjectName(QString::fromUtf8("labIco"));
|
||||
labIco->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
labIco->setAlignment(Qt::AlignCenter);
|
||||
horizontalLayout2->addWidget(labIco);
|
||||
|
||||
|
@ -938,13 +929,10 @@ void QUITipBox::initControl()
|
|||
sizePolicy3.setVerticalStretch(0);
|
||||
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
|
||||
btnMenu_Close->setSizePolicy(sizePolicy3);
|
||||
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
|
||||
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
|
||||
btnMenu_Close->setFocusPolicy(Qt::NoFocus);
|
||||
btnMenu_Close->setFlat(true);
|
||||
|
||||
widgetTitle->setMinimumHeight(TitleMinSize);
|
||||
horizontalLayout->addWidget(btnMenu_Close);
|
||||
horizontalLayout2->addWidget(widgetMenu);
|
||||
verticalLayout->addWidget(widgetTitle);
|
||||
|
@ -965,12 +953,7 @@ void QUITipBox::initControl()
|
|||
|
||||
void QUITipBox::initForm()
|
||||
{
|
||||
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2);
|
||||
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);
|
||||
QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
|
||||
this->setWindowTitle(this->labTitle->text());
|
||||
|
||||
#ifdef __arm__
|
||||
|
@ -1120,7 +1103,6 @@ void QUIInputBox::initControl()
|
|||
sizePolicy.setVerticalStretch(0);
|
||||
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
|
||||
widgetTitle->setSizePolicy(sizePolicy);
|
||||
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
|
||||
horizontalLayout1 = new QHBoxLayout(widgetTitle);
|
||||
horizontalLayout1->setSpacing(0);
|
||||
horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1"));
|
||||
|
@ -1132,7 +1114,6 @@ void QUIInputBox::initControl()
|
|||
sizePolicy1.setVerticalStretch(0);
|
||||
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
|
||||
labIco->setSizePolicy(sizePolicy1);
|
||||
labIco->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
labIco->setAlignment(Qt::AlignCenter);
|
||||
|
||||
horizontalLayout1->addWidget(labIco);
|
||||
|
@ -1169,8 +1150,6 @@ void QUIInputBox::initControl()
|
|||
sizePolicy3.setVerticalStretch(0);
|
||||
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
|
||||
btnMenu_Close->setSizePolicy(sizePolicy3);
|
||||
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
|
||||
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
|
||||
btnMenu_Close->setFocusPolicy(Qt::NoFocus);
|
||||
btnMenu_Close->setFlat(true);
|
||||
|
@ -1240,17 +1219,7 @@ void QUIInputBox::initControl()
|
|||
|
||||
void QUIInputBox::initForm()
|
||||
{
|
||||
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2);
|
||||
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);
|
||||
}
|
||||
|
||||
QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
|
||||
this->setWindowTitle(this->labTitle->text());
|
||||
|
||||
#ifdef __arm__
|
||||
|
@ -1349,7 +1318,7 @@ bool QUIInputBox::eventFilter(QObject *watched, QEvent *event)
|
|||
mousePressed = false;
|
||||
return true;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
this->move(mouseEvent->globalPos() - mousePoint);
|
||||
return true;
|
||||
}
|
||||
|
@ -1424,7 +1393,7 @@ bool QUIDateSelect::eventFilter(QObject *watched, QEvent *event)
|
|||
mousePressed = false;
|
||||
return true;
|
||||
} else if (mouseEvent->type() == QEvent::MouseMove) {
|
||||
if (mousePressed && (mouseEvent->buttons() && Qt::LeftButton)) {
|
||||
if (mousePressed) {
|
||||
this->move(mouseEvent->globalPos() - mousePoint);
|
||||
return true;
|
||||
}
|
||||
|
@ -1448,7 +1417,6 @@ void QUIDateSelect::initControl()
|
|||
sizePolicy.setVerticalStretch(0);
|
||||
sizePolicy.setHeightForWidth(widgetTitle->sizePolicy().hasHeightForWidth());
|
||||
widgetTitle->setSizePolicy(sizePolicy);
|
||||
widgetTitle->setMinimumSize(QSize(0, TitleMinSize));
|
||||
horizontalLayout1 = new QHBoxLayout(widgetTitle);
|
||||
horizontalLayout1->setSpacing(0);
|
||||
horizontalLayout1->setObjectName(QString::fromUtf8("horizontalLayout1"));
|
||||
|
@ -1460,7 +1428,6 @@ void QUIDateSelect::initControl()
|
|||
sizePolicy1.setVerticalStretch(0);
|
||||
sizePolicy1.setHeightForWidth(labIco->sizePolicy().hasHeightForWidth());
|
||||
labIco->setSizePolicy(sizePolicy1);
|
||||
labIco->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
labIco->setAlignment(Qt::AlignCenter);
|
||||
horizontalLayout1->addWidget(labIco);
|
||||
|
||||
|
@ -1489,8 +1456,6 @@ void QUIDateSelect::initControl()
|
|||
sizePolicy3.setVerticalStretch(0);
|
||||
sizePolicy3.setHeightForWidth(btnMenu_Close->sizePolicy().hasHeightForWidth());
|
||||
btnMenu_Close->setSizePolicy(sizePolicy3);
|
||||
btnMenu_Close->setMinimumSize(QSize(TitleMinSize, 0));
|
||||
btnMenu_Close->setMaximumSize(QSize(TitleMinSize, 16777215));
|
||||
btnMenu_Close->setCursor(QCursor(Qt::ArrowCursor));
|
||||
btnMenu_Close->setFocusPolicy(Qt::NoFocus);
|
||||
btnMenu_Close->setFlat(true);
|
||||
|
@ -1585,17 +1550,7 @@ void QUIDateSelect::initControl()
|
|||
|
||||
void QUIDateSelect::initForm()
|
||||
{
|
||||
IconHelper::Instance()->setIcon(labIco, QUIConfig::IconMain, QUIConfig::FontSize + 2);
|
||||
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);
|
||||
}
|
||||
|
||||
QUIHelper::setFramelessForm(this, widgetTitle, labIco, btnMenu_Close);
|
||||
this->setWindowTitle(this->labTitle->text());
|
||||
|
||||
#ifdef __arm__
|
||||
|
@ -2055,14 +2010,14 @@ TrayIcon::TrayIcon(QObject *parent) : QObject(parent)
|
|||
void TrayIcon::iconIsActived(QSystemTrayIcon::ActivationReason reason)
|
||||
{
|
||||
switch (reason) {
|
||||
case QSystemTrayIcon::Trigger:
|
||||
case QSystemTrayIcon::DoubleClick: {
|
||||
mainWidget->showNormal();
|
||||
break;
|
||||
}
|
||||
case QSystemTrayIcon::Trigger:
|
||||
case QSystemTrayIcon::DoubleClick: {
|
||||
mainWidget->showNormal();
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2143,6 +2098,7 @@ QString QUIHelper::appName()
|
|||
static QString name;
|
||||
if (name.isEmpty()) {
|
||||
name = qApp->applicationFilePath();
|
||||
//下面的方法主要为了过滤安卓的路径 lib程序名_armeabi-v7a
|
||||
QStringList list = name.split("/");
|
||||
name = list.at(list.count() - 1).split(".").at(0);
|
||||
}
|
||||
|
@ -2153,7 +2109,8 @@ QString QUIHelper::appName()
|
|||
QString QUIHelper::appPath()
|
||||
{
|
||||
#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
|
||||
return qApp->applicationDirPath();
|
||||
#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())
|
||||
.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();
|
||||
}
|
||||
|
||||
void QUIHelper::writeError(const QString &info, const QString &filePath)
|
||||
void QUIHelper::writeError(const QString &info, bool needWrite, const QString &filePath)
|
||||
{
|
||||
//正式运行屏蔽掉输出错误信息,调试阶段才需要
|
||||
return;
|
||||
if (!needWrite) {
|
||||
return;
|
||||
}
|
||||
|
||||
QString fileName = QString("%1/%2/%3_runerror_%4.txt").arg(QUIHelper::appPath())
|
||||
.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();
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
QString qssFile = ":/qss/lightblue.css";
|
||||
|
||||
if (style == QUIWidget::Style_Silvery) {
|
||||
qssFile = ":/qss/silvery.css";
|
||||
} else if (style == QUIWidget::Style_Blue) {
|
||||
|
@ -2262,7 +2251,6 @@ void QUIHelper::setStyle(QUIWidget::Style style)
|
|||
}
|
||||
|
||||
QFile file(qssFile);
|
||||
|
||||
if (file.open(QFile::ReadOnly)) {
|
||||
QString qss = QLatin1String(file.readAll());
|
||||
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 str = qss;
|
||||
|
||||
QString flagTextColor = "TextColor:";
|
||||
int indexTextColor = str.indexOf(flagTextColor);
|
||||
if (indexTextColor >= 0) {
|
||||
|
@ -2400,7 +2387,6 @@ QPixmap QUIHelper::ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, i
|
|||
|
||||
QPainter painter;
|
||||
painter.begin(&resultImg);
|
||||
|
||||
if (!resultImg.isNull()) {
|
||||
painter.drawPixmap(0, 0, pix1);
|
||||
painter.drawPixmap(horzSplit, 0, pix2);
|
||||
|
@ -2416,27 +2402,55 @@ QPixmap QUIHelper::ninePatch(const QPixmap &pix, int horzSplit, int vertSplit, i
|
|||
}
|
||||
|
||||
painter.end();
|
||||
|
||||
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 qssRed = "QLabel{border:none;background-color:rgb(214,64,48);color:rgb(255,255,255);}" + qssDisable;
|
||||
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;
|
||||
QString colorBg = bgColor;
|
||||
QString colorText = textColor;
|
||||
|
||||
if (type == 0) {
|
||||
lab->setStyleSheet(qssRed);
|
||||
} else if (type == 1) {
|
||||
lab->setStyleSheet(qssGreen);
|
||||
} else if (type == 2) {
|
||||
lab->setStyleSheet(qssBlue);
|
||||
} else if (type == 3) {
|
||||
lab->setStyleSheet(qssDark);
|
||||
//如果设置了新颜色则启用新颜色
|
||||
if (bgColor.isEmpty() || textColor.isEmpty()) {
|
||||
if (type == 0) {
|
||||
colorBg = "#D64D54";
|
||||
colorText = "#FFFFFF";
|
||||
} else if (type == 1) {
|
||||
colorBg = "#17A086";
|
||||
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)
|
||||
|
@ -2476,9 +2490,15 @@ void QUIHelper::setCode()
|
|||
|
||||
void QUIHelper::sleep(int msec)
|
||||
{
|
||||
QTime dieTime = QTime::currentTime().addMSecs(msec);
|
||||
while (QTime::currentTime() < dieTime) {
|
||||
QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
|
||||
if (msec > 0) {
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
|
||||
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;
|
||||
result.resize(2);
|
||||
result[0] = (uchar) (0x000000ff & i);
|
||||
result[1] = (uchar) ((0x0000ff00 & i) >> 8);
|
||||
result[0] = (uchar)(0x000000ff & i);
|
||||
result[1] = (uchar)((0x0000ff00 & i) >> 8);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -2753,15 +2773,6 @@ uchar QUIHelper::getCheckCode(const QByteArray &data)
|
|||
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
|
||||
//参数1:*data 16位CRC校验数据,
|
||||
//参数2:len 数据流长度
|
||||
|
@ -2773,8 +2784,7 @@ quint16 QUIHelper::getRevCrc_16(quint8 *data, int len, quint16 init, const quint
|
|||
{
|
||||
quint16 cRc_16 = init;
|
||||
quint8 temp;
|
||||
|
||||
while(len-- > 0) {
|
||||
while (len-- > 0) {
|
||||
temp = cRc_16 >> 8;
|
||||
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;
|
||||
quint8 temp;
|
||||
|
||||
while(len-- > 0) {
|
||||
while (len-- > 0) {
|
||||
temp = cRc_16 & 0xff;
|
||||
cRc_16 = (cRc_16 >> 8) ^ table[(temp ^ *data++) & 0xff];
|
||||
}
|
||||
|
@ -2849,7 +2858,6 @@ QString QUIHelper::byteArrayToAsciiStr(const QByteArray &data)
|
|||
{
|
||||
QString temp;
|
||||
int len = data.size();
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
//0x20为空格,空格以下都是不可见字符
|
||||
char b = data.at(i);
|
||||
|
@ -3280,12 +3288,33 @@ QString QUIHelper::byteArrayToHexStr(const QByteArray &data)
|
|||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
|
@ -3363,11 +3392,21 @@ void QUIHelper::deleteDirectory(const QString &path)
|
|||
|
||||
bool QUIHelper::ipLive(const QString &ip, int port, int timeout)
|
||||
{
|
||||
QTcpSocket tcpClient;
|
||||
tcpClient.abort();
|
||||
tcpClient.connectToHost(ip, port);
|
||||
//超时没有连接上则判断不在线
|
||||
return tcpClient.waitForConnected(timeout);
|
||||
//局部的事件循环,不卡主界面
|
||||
QEventLoop eventLoop;
|
||||
|
||||
//设置超时
|
||||
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)
|
||||
|
@ -3396,17 +3435,9 @@ QString QUIHelper::getNetIP(const QString &webCode)
|
|||
|
||||
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
|
||||
QString ip = "127.0.0.1";
|
||||
QStringList ips = getLocalIPs();
|
||||
foreach (QString str, ips) {
|
||||
if (str.startsWith("192.168.1") || str.startsWith("192")) {
|
||||
ip = str;
|
||||
|
@ -3417,23 +3448,111 @@ QString QUIHelper::getLocalIP()
|
|||
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)
|
||||
{
|
||||
QHostInfo host = QHostInfo::fromName(url);
|
||||
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()
|
||||
{
|
||||
//能接通百度IP说明可以通外网
|
||||
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)
|
||||
{
|
||||
#ifdef Q_OS_ANDROID
|
||||
QAndroid::Instance()->makeToast(info);
|
||||
#else
|
||||
if (exec) {
|
||||
QUIMessageBox msg;
|
||||
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()->show();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void QUIHelper::showMessageBoxError(const QString &info, int closeSec, bool exec)
|
||||
{
|
||||
#ifdef Q_OS_ANDROID
|
||||
QAndroid::Instance()->makeToast(info);
|
||||
#else
|
||||
if (exec) {
|
||||
QUIMessageBox msg;
|
||||
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()->show();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
int QUIHelper::showMessageBoxQuestion(const QString &info)
|
||||
|
@ -3668,13 +3782,8 @@ QChar QUIConfig::IconNormal = QChar(0xf2d0);
|
|||
QChar QUIConfig::IconClose = QChar(0xf00d);
|
||||
|
||||
#ifdef __arm__
|
||||
#ifdef Q_OS_ANDROID
|
||||
QString QUIConfig::FontName = "Droid Sans Fallback";
|
||||
int QUIConfig::FontSize = 15;
|
||||
#else
|
||||
QString QUIConfig::FontName = "WenQuanYi Micro Hei";
|
||||
int QUIConfig::FontSize = 18;
|
||||
#endif
|
||||
#else
|
||||
QString QUIConfig::FontName = "Microsoft Yahei";
|
||||
int QUIConfig::FontSize = 12;
|
||||
|
|
|
@ -9,16 +9,22 @@
|
|||
#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"))
|
||||
|
||||
//定义换行符
|
||||
#ifdef Q_OS_WIN
|
||||
#define NEWLINE "\r\n"
|
||||
#else
|
||||
#define NEWLINE "\n"
|
||||
#endif
|
||||
|
||||
//定义无边框标题栏高度+对话框最小宽高
|
||||
#ifdef __arm__
|
||||
#define TitleMinSize 40
|
||||
#define DialogMinWidth 350
|
||||
#define DialogMinHeight 180
|
||||
#else
|
||||
#define TitleMinSize 30
|
||||
#define DialogMinWidth 280
|
||||
#define DialogMinHeight 150
|
||||
#endif
|
||||
|
||||
/**
|
||||
|
@ -56,7 +62,7 @@ class QUIWidget : public QDialog
|
|||
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_ENUMS(Style)
|
||||
Q_ENUMS(Style)
|
||||
Q_PROPERTY(QString title READ getTitle WRITE setTitle)
|
||||
Q_PROPERTY(Qt::Alignment alignment READ getAlignment WRITE setAlignment)
|
||||
Q_PROPERTY(bool minHide READ getMinHide WRITE setMinHide)
|
||||
|
@ -488,8 +494,7 @@ public:
|
|||
QString checkedBgColor;
|
||||
QString checkedTextColor;
|
||||
|
||||
StyleColor()
|
||||
{
|
||||
StyleColor() {
|
||||
iconSize = 12;
|
||||
iconWidth = 15;
|
||||
iconHeight = 15;
|
||||
|
@ -578,9 +583,8 @@ public:
|
|||
static int deskWidth();
|
||||
static int deskHeight();
|
||||
|
||||
//程序本身文件名称
|
||||
//程序文件名称+当前所在路径
|
||||
static QString appName();
|
||||
//程序当前所在路径
|
||||
static QString appPath();
|
||||
|
||||
//初始化随机数种子
|
||||
|
@ -595,8 +599,11 @@ public:
|
|||
static void newDir(const QString &dirName);
|
||||
|
||||
//写入消息到额外的的消息日志文件
|
||||
static void writeInfo(const QString &info, const QString &filePath = "log");
|
||||
static void writeError(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, 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);
|
||||
|
@ -619,7 +626,7 @@ public:
|
|||
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);
|
||||
|
@ -637,39 +644,30 @@ public:
|
|||
|
||||
//判断是否是IP地址
|
||||
static bool isIP(const QString &ip);
|
||||
|
||||
//判断是否是MAC地址
|
||||
static bool isMac(const QString &mac);
|
||||
|
||||
//判断是否是合法的电话号码
|
||||
static bool isTel(const QString &tel);
|
||||
|
||||
//判断是否是合法的邮箱地址
|
||||
static bool isEmail(const QString &email);
|
||||
|
||||
|
||||
//16进制字符串转10进制
|
||||
static int strHexToDecimal(const QString &strHex);
|
||||
|
||||
//10进制字符串转10进制
|
||||
static int strDecimalToDecimal(const QString &strDecimal);
|
||||
|
||||
//2进制字符串转10进制
|
||||
static int strBinToDecimal(const QString &strBin);
|
||||
|
||||
//16进制字符串转2进制字符串
|
||||
static QString strHexToStrBin(const QString &strHex);
|
||||
|
||||
//10进制转2进制字符串一个字节
|
||||
static QString decimalToStrBin1(int decimal);
|
||||
|
||||
//10进制转2进制字符串两个字节
|
||||
static QString decimalToStrBin2(int decimal);
|
||||
|
||||
//10进制转16进制字符串,补零.
|
||||
static QString decimalToStrHex(int decimal);
|
||||
|
||||
|
||||
//int转字节数组
|
||||
static QByteArray intToByte(int i);
|
||||
static QByteArray intToByteRec(int i);
|
||||
|
@ -690,85 +688,76 @@ public:
|
|||
|
||||
//异或加密算法
|
||||
static QString getXorEncryptDecrypt(const QString &str, char key);
|
||||
|
||||
//异或校验
|
||||
static uchar getOrCode(const QByteArray &data);
|
||||
|
||||
//计算校验码
|
||||
static uchar getCheckCode(const QByteArray &data);
|
||||
|
||||
//字符串补全
|
||||
static QString getValue(quint8 value);
|
||||
|
||||
//CRC校验
|
||||
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 getModbus16(quint8 *data, int len);
|
||||
static QByteArray getCRCCode(const QByteArray &data);
|
||||
|
||||
|
||||
//字节数组转Ascii字符串
|
||||
static QString byteArrayToAsciiStr(const QByteArray &data);
|
||||
|
||||
//16进制字符串转字节数组
|
||||
static QByteArray hexStrToByteArray(const QString &str);
|
||||
static char convertHexChar(char ch);
|
||||
|
||||
//Ascii字符串转字节数组
|
||||
static QByteArray asciiStrToByteArray(const QString &str);
|
||||
|
||||
//字节数组转16进制字符串
|
||||
static QString byteArrayToHexStr(const QByteArray &data);
|
||||
|
||||
//获取保存的文件
|
||||
static QString getSaveName(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 QString getFolderName();
|
||||
|
||||
//获取文件名,含拓展名
|
||||
static QString getFileNameWithExtension(const QString &strFilePath);
|
||||
|
||||
//获取选择文件夹中的文件
|
||||
static QStringList getFolderFileNames(const QStringList &filter);
|
||||
|
||||
//文件夹是否存在
|
||||
static bool folderIsExist(const QString &strFolder);
|
||||
|
||||
//文件是否存在
|
||||
static bool fileIsExist(const QString &strFile);
|
||||
|
||||
//复制文件
|
||||
static bool copyFile(const QString &sourceFile, const QString &targetFile);
|
||||
|
||||
//删除文件夹下所有文件
|
||||
static void deleteDirectory(const QString &path);
|
||||
|
||||
//判断IP地址及端口是否在线
|
||||
static bool ipLive(const QString &ip, int port, int timeout = 1000);
|
||||
|
||||
//获取网页所有源代码
|
||||
static QString getHtml(const QString &url);
|
||||
|
||||
//获取本机公网IP地址
|
||||
static QString getNetIP(const QString &webCode);
|
||||
|
||||
//获取本机IP
|
||||
static QString getLocalIP();
|
||||
|
||||
//获取本机IP地址集合
|
||||
static QStringList getLocalIPs();
|
||||
//Url地址转为IP地址
|
||||
static QString urlToIP(const QString &url);
|
||||
|
||||
//字符串补全
|
||||
static QString getValue(quint8 value);
|
||||
//判断是否通外网
|
||||
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);
|
||||
//弹出错误框
|
||||
|
@ -785,7 +774,6 @@ public:
|
|||
static QString showInputBox(const QString &title, int type = 0, int closeSec = 0,
|
||||
const QString &placeholderText = QString(), bool pwd = false,
|
||||
const QString &defaultValue = QString());
|
||||
|
||||
//弹出日期选择框
|
||||
static void showDateSelect(QString &dateStart, QString &dateEnd, const QString &format = "yyyy-MM-dd");
|
||||
|
||||
|
@ -800,14 +788,12 @@ public:
|
|||
const QString &hoverTextColor = "#F0F0F0", //悬停文字颜色
|
||||
const QString &pressedColor = "#2D3E50", //按下颜色
|
||||
const QString &pressedTextColor = "#B8C6D1"); //按下文字颜色
|
||||
|
||||
//设置文本框样式
|
||||
static QString setLineEditQss(QLineEdit *txt, //文本框对象
|
||||
int radius = 3, //圆角半径
|
||||
int borderWidth = 2, //边框大小
|
||||
const QString &normalColor = "#DCE4EC", //正常颜色
|
||||
const QString &focusColor = "#34495E"); //选中颜色
|
||||
|
||||
//设置进度条样式
|
||||
static QString setProgressBarQss(QProgressBar *bar,
|
||||
int barHeight = 8, //进度条高度
|
||||
|
@ -815,7 +801,6 @@ public:
|
|||
int fontSize = 9, //文字字号
|
||||
const QString &normalColor = "#E8EDF2", //正常颜色
|
||||
const QString &chunkColor = "#E74C3C"); //进度颜色
|
||||
|
||||
//设置滑块条样式
|
||||
static QString setSliderQss(QSlider *slider, //滑动条对象
|
||||
int sliderHeight = 8, //滑动条高度
|
||||
|
@ -824,13 +809,11 @@ public:
|
|||
const QString &handleBorderColor = "#1ABC9C", //指示器边框颜色
|
||||
const QString &handleColor = "#FFFFFF", //指示器颜色
|
||||
const QString &textColor = "#000000"); //文字颜色
|
||||
|
||||
//设置单选框样式
|
||||
static QString setRadioButtonQss(QRadioButton *rbtn, //单选框对象
|
||||
int indicatorRadius = 8, //指示器圆角角度
|
||||
const QString &normalColor = "#D7DBDE", //正常颜色
|
||||
const QString &checkColor = "#34495E"); //选中颜色
|
||||
|
||||
//设置滚动条样式
|
||||
static QString setScrollBarQss(QWidget *scroll, //滚动条对象
|
||||
int radius = 6, //圆角角度
|
||||
|
|
|
@ -281,9 +281,9 @@ void VideoWidget::drawBg(QPainter *painter)
|
|||
painter->drawText(rect(), Qt::AlignCenter, bgText);
|
||||
} else {
|
||||
//居中绘制
|
||||
int pixX = rect().center().x() - bgImage.width() / 2;
|
||||
int pixY = rect().center().y() - bgImage.height() / 2;
|
||||
QPoint point(pixX, pixY);
|
||||
int x = rect().center().x() - bgImage.width() / 2;
|
||||
int y = rect().center().y() - bgImage.height() / 2;
|
||||
QPoint point(x, y);
|
||||
painter->drawImage(point, bgImage);
|
||||
}
|
||||
|
||||
|
@ -301,9 +301,9 @@ void VideoWidget::drawImg(QPainter *painter, QImage img)
|
|||
} else {
|
||||
//按照比例自动居中绘制
|
||||
img = img.scaled(width() - offset, height() - offset, Qt::KeepAspectRatio);
|
||||
int pixX = rect().center().x() - img.width() / 2;
|
||||
int pixY = rect().center().y() - img.height() / 2;
|
||||
QPoint point(pixX, pixY);
|
||||
int x = rect().center().x() - img.width() / 2;
|
||||
int y = rect().center().y() - img.height() / 2;
|
||||
QPoint point(x, y);
|
||||
painter->drawImage(point, img);
|
||||
}
|
||||
|
||||
|
|
|
@ -206,7 +206,7 @@ private slots:
|
|||
|
||||
signals:
|
||||
//播放成功
|
||||
void receivePlayOk();
|
||||
void receivePlayStart();
|
||||
//播放失败
|
||||
void receivePlayError();
|
||||
//播放结束
|
||||
|
|
Loading…
Reference in New Issue