修正部分错误

master
feiyangqingyun 2020-09-26 10:15:16 +08:00
parent 0ee67807f0
commit 8289db89ce
7 changed files with 574 additions and 388 deletions

View File

@ -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校验数据
//参数2len 数据流长度
@ -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;

View File

@ -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, //圆角角度

View File

@ -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;
}

View File

@ -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校验数据
//参数2len 数据流长度
@ -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;

View File

@ -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, //圆角角度

View File

@ -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);
}

View File

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