全部支持Qt4-Qt6
parent
392697b3b9
commit
30ee14dbcf
|
@ -1,11 +1,9 @@
|
|||
HEADERS += $$PWD/qextserialport.h
|
||||
HEADERS += $$PWD/qextserialport_global.h
|
||||
HEADERS += $$PWD/qextserialport_p.h
|
||||
HEADERS += \
|
||||
$$PWD/qextserialport.h \
|
||||
$$PWD/qextserialport_global.h \
|
||||
$$PWD/qextserialport_p.h
|
||||
|
||||
SOURCES += $$PWD/qextserialport.cpp
|
||||
win32 {
|
||||
SOURCES += $$PWD/qextserialport_win.cpp
|
||||
}
|
||||
unix {
|
||||
SOURCES += $$PWD/qextserialport_unix.cpp
|
||||
}
|
||||
|
||||
win32:SOURCES += $$PWD/qextserialport_win.cpp
|
||||
unix:SOURCES += $$PWD/qextserialport_unix.cpp
|
||||
|
|
|
@ -35,26 +35,33 @@
|
|||
#include <QtCore/QReadWriteLock>
|
||||
#include <QtCore/QMutexLocker>
|
||||
#include <QtCore/QDebug>
|
||||
#include <QtCore/QRegExp>
|
||||
#include <QtCore/QMetaType>
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)
|
||||
# include <QtCore/QWinEventNotifier>
|
||||
#include <QtCore/QWinEventNotifier>
|
||||
#else
|
||||
# include <QtCore/private/qwineventnotifier_p.h>
|
||||
#include <QtCore/private/qwineventnotifier_p.h>
|
||||
#endif
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
#include <QtCore5Compat/QRegExp>
|
||||
#else
|
||||
#include <QtCore/QRegExp>
|
||||
#endif
|
||||
|
||||
void QextSerialPortPrivate::platformSpecificInit()
|
||||
{
|
||||
handle = INVALID_HANDLE_VALUE;
|
||||
ZeroMemory(&overlap, sizeof(OVERLAPPED));
|
||||
overlap.hEvent = CreateEvent(NULL, true, false, NULL);
|
||||
winEventNotifier = 0;
|
||||
bytesToWriteLock = new QReadWriteLock;
|
||||
handle = INVALID_HANDLE_VALUE;
|
||||
ZeroMemory(&overlap, sizeof(OVERLAPPED));
|
||||
overlap.hEvent = CreateEvent(NULL, true, false, NULL);
|
||||
winEventNotifier = 0;
|
||||
bytesToWriteLock = new QReadWriteLock;
|
||||
}
|
||||
|
||||
void QextSerialPortPrivate::platformSpecificDestruct()
|
||||
{
|
||||
CloseHandle(overlap.hEvent);
|
||||
delete bytesToWriteLock;
|
||||
CloseHandle(overlap.hEvent);
|
||||
delete bytesToWriteLock;
|
||||
}
|
||||
|
||||
|
||||
|
@ -66,108 +73,107 @@ void QextSerialPortPrivate::platformSpecificDestruct()
|
|||
*/
|
||||
static QString fullPortNameWin(const QString &name)
|
||||
{
|
||||
QRegExp rx(QLatin1String("^COM(\\d+)"));
|
||||
QString fullName(name);
|
||||
QRegExp rx(QLatin1String("^COM(\\d+)"));
|
||||
QString fullName(name);
|
||||
if (rx.indexIn(fullName) >= 0) {
|
||||
fullName.prepend(QLatin1String("\\\\.\\"));
|
||||
}
|
||||
|
||||
if (fullName.contains(rx)) {
|
||||
fullName.prepend(QLatin1String("\\\\.\\"));
|
||||
}
|
||||
|
||||
return fullName;
|
||||
return fullName;
|
||||
}
|
||||
|
||||
bool QextSerialPortPrivate::open_sys(QIODevice::OpenMode mode)
|
||||
{
|
||||
Q_Q(QextSerialPort);
|
||||
DWORD confSize = sizeof(COMMCONFIG);
|
||||
commConfig.dwSize = confSize;
|
||||
DWORD dwFlagsAndAttributes = 0;
|
||||
Q_Q(QextSerialPort);
|
||||
DWORD confSize = sizeof(COMMCONFIG);
|
||||
commConfig.dwSize = confSize;
|
||||
DWORD dwFlagsAndAttributes = 0;
|
||||
|
||||
if (queryMode == QextSerialPort::EventDriven) {
|
||||
dwFlagsAndAttributes += FILE_FLAG_OVERLAPPED;
|
||||
}
|
||||
if (queryMode == QextSerialPort::EventDriven) {
|
||||
dwFlagsAndAttributes += FILE_FLAG_OVERLAPPED;
|
||||
}
|
||||
|
||||
/*open the port*/
|
||||
handle = CreateFileW((wchar_t *)fullPortNameWin(port).utf16(), GENERIC_READ | GENERIC_WRITE,
|
||||
0, NULL, OPEN_EXISTING, dwFlagsAndAttributes, NULL);
|
||||
/*open the port*/
|
||||
handle = CreateFileW((wchar_t *)fullPortNameWin(port).utf16(), GENERIC_READ | GENERIC_WRITE,
|
||||
0, NULL, OPEN_EXISTING, dwFlagsAndAttributes, NULL);
|
||||
|
||||
if (handle != INVALID_HANDLE_VALUE) {
|
||||
q->setOpenMode(mode);
|
||||
/*configure port settings*/
|
||||
GetCommConfig(handle, &commConfig, &confSize);
|
||||
GetCommState(handle, &(commConfig.dcb));
|
||||
if (handle != INVALID_HANDLE_VALUE) {
|
||||
q->setOpenMode(mode);
|
||||
/*configure port settings*/
|
||||
GetCommConfig(handle, &commConfig, &confSize);
|
||||
GetCommState(handle, &(commConfig.dcb));
|
||||
|
||||
/*set up parameters*/
|
||||
commConfig.dcb.fBinary = TRUE;
|
||||
commConfig.dcb.fInX = FALSE;
|
||||
commConfig.dcb.fOutX = FALSE;
|
||||
commConfig.dcb.fAbortOnError = FALSE;
|
||||
commConfig.dcb.fNull = FALSE;
|
||||
/* Dtr default to true. See Issue 122*/
|
||||
commConfig.dcb.fDtrControl = TRUE;
|
||||
/*flush all settings*/
|
||||
settingsDirtyFlags = DFE_ALL;
|
||||
updatePortSettings();
|
||||
/*set up parameters*/
|
||||
commConfig.dcb.fBinary = TRUE;
|
||||
commConfig.dcb.fInX = FALSE;
|
||||
commConfig.dcb.fOutX = FALSE;
|
||||
commConfig.dcb.fAbortOnError = FALSE;
|
||||
commConfig.dcb.fNull = FALSE;
|
||||
/* Dtr default to true. See Issue 122*/
|
||||
commConfig.dcb.fDtrControl = TRUE;
|
||||
/*flush all settings*/
|
||||
settingsDirtyFlags = DFE_ALL;
|
||||
updatePortSettings();
|
||||
|
||||
//init event driven approach
|
||||
if (queryMode == QextSerialPort::EventDriven) {
|
||||
if (!SetCommMask(handle, EV_TXEMPTY | EV_RXCHAR | EV_DSR)) {
|
||||
QESP_WARNING() << "failed to set Comm Mask. Error code:" << GetLastError();
|
||||
return false;
|
||||
}
|
||||
//init event driven approach
|
||||
if (queryMode == QextSerialPort::EventDriven) {
|
||||
if (!SetCommMask(handle, EV_TXEMPTY | EV_RXCHAR | EV_DSR)) {
|
||||
QESP_WARNING() << "failed to set Comm Mask. Error code:" << GetLastError();
|
||||
return false;
|
||||
}
|
||||
|
||||
winEventNotifier = new QWinEventNotifier(overlap.hEvent, q);
|
||||
qRegisterMetaType<HANDLE>("HANDLE");
|
||||
q->connect(winEventNotifier, SIGNAL(activated(HANDLE)), q, SLOT(_q_onWinEvent(HANDLE)), Qt::DirectConnection);
|
||||
WaitCommEvent(handle, &eventMask, &overlap);
|
||||
}
|
||||
winEventNotifier = new QWinEventNotifier(overlap.hEvent, q);
|
||||
qRegisterMetaType<HANDLE>("HANDLE");
|
||||
q->connect(winEventNotifier, SIGNAL(activated(HANDLE)), q, SLOT(_q_onWinEvent(HANDLE)), Qt::DirectConnection);
|
||||
WaitCommEvent(handle, &eventMask, &overlap);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
bool QextSerialPortPrivate::close_sys()
|
||||
{
|
||||
flush_sys();
|
||||
CancelIo(handle);
|
||||
flush_sys();
|
||||
CancelIo(handle);
|
||||
|
||||
if (CloseHandle(handle)) {
|
||||
handle = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
if (CloseHandle(handle)) {
|
||||
handle = INVALID_HANDLE_VALUE;
|
||||
}
|
||||
|
||||
if (winEventNotifier) {
|
||||
winEventNotifier->setEnabled(false);
|
||||
winEventNotifier->deleteLater();
|
||||
winEventNotifier = 0;
|
||||
}
|
||||
if (winEventNotifier) {
|
||||
winEventNotifier->setEnabled(false);
|
||||
winEventNotifier->deleteLater();
|
||||
winEventNotifier = 0;
|
||||
}
|
||||
|
||||
foreach (OVERLAPPED *o, pendingWrites) {
|
||||
CloseHandle(o->hEvent);
|
||||
delete o;
|
||||
}
|
||||
foreach (OVERLAPPED *o, pendingWrites) {
|
||||
CloseHandle(o->hEvent);
|
||||
delete o;
|
||||
}
|
||||
|
||||
pendingWrites.clear();
|
||||
return true;
|
||||
pendingWrites.clear();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool QextSerialPortPrivate::flush_sys()
|
||||
{
|
||||
FlushFileBuffers(handle);
|
||||
return true;
|
||||
FlushFileBuffers(handle);
|
||||
return true;
|
||||
}
|
||||
|
||||
qint64 QextSerialPortPrivate::bytesAvailable_sys() const
|
||||
{
|
||||
DWORD Errors;
|
||||
COMSTAT Status;
|
||||
DWORD Errors;
|
||||
COMSTAT Status;
|
||||
|
||||
if (ClearCommError(handle, &Errors, &Status)) {
|
||||
return Status.cbInQue;
|
||||
}
|
||||
if (ClearCommError(handle, &Errors, &Status)) {
|
||||
return Status.cbInQue;
|
||||
}
|
||||
|
||||
return (qint64) - 1;
|
||||
return (qint64) - 1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -175,23 +181,23 @@ qint64 QextSerialPortPrivate::bytesAvailable_sys() const
|
|||
*/
|
||||
void QextSerialPortPrivate::translateError(ulong error)
|
||||
{
|
||||
if (error & CE_BREAK) {
|
||||
lastErr = E_BREAK_CONDITION;
|
||||
} else if (error & CE_FRAME) {
|
||||
lastErr = E_FRAMING_ERROR;
|
||||
} else if (error & CE_IOE) {
|
||||
lastErr = E_IO_ERROR;
|
||||
} else if (error & CE_MODE) {
|
||||
lastErr = E_INVALID_FD;
|
||||
} else if (error & CE_OVERRUN) {
|
||||
lastErr = E_BUFFER_OVERRUN;
|
||||
} else if (error & CE_RXPARITY) {
|
||||
lastErr = E_RECEIVE_PARITY_ERROR;
|
||||
} else if (error & CE_RXOVER) {
|
||||
lastErr = E_RECEIVE_OVERFLOW;
|
||||
} else if (error & CE_TXFULL) {
|
||||
lastErr = E_TRANSMIT_OVERFLOW;
|
||||
}
|
||||
if (error & CE_BREAK) {
|
||||
lastErr = E_BREAK_CONDITION;
|
||||
} else if (error & CE_FRAME) {
|
||||
lastErr = E_FRAMING_ERROR;
|
||||
} else if (error & CE_IOE) {
|
||||
lastErr = E_IO_ERROR;
|
||||
} else if (error & CE_MODE) {
|
||||
lastErr = E_INVALID_FD;
|
||||
} else if (error & CE_OVERRUN) {
|
||||
lastErr = E_BUFFER_OVERRUN;
|
||||
} else if (error & CE_RXPARITY) {
|
||||
lastErr = E_RECEIVE_PARITY_ERROR;
|
||||
} else if (error & CE_RXOVER) {
|
||||
lastErr = E_RECEIVE_OVERFLOW;
|
||||
} else if (error & CE_TXFULL) {
|
||||
lastErr = E_TRANSMIT_OVERFLOW;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -204,30 +210,30 @@ void QextSerialPortPrivate::translateError(ulong error)
|
|||
*/
|
||||
qint64 QextSerialPortPrivate::readData_sys(char *data, qint64 maxSize)
|
||||
{
|
||||
DWORD bytesRead = 0;
|
||||
bool failed = false;
|
||||
DWORD bytesRead = 0;
|
||||
bool failed = false;
|
||||
|
||||
if (queryMode == QextSerialPort::EventDriven) {
|
||||
OVERLAPPED overlapRead;
|
||||
ZeroMemory(&overlapRead, sizeof(OVERLAPPED));
|
||||
if (queryMode == QextSerialPort::EventDriven) {
|
||||
OVERLAPPED overlapRead;
|
||||
ZeroMemory(&overlapRead, sizeof(OVERLAPPED));
|
||||
|
||||
if (!ReadFile(handle, (void *)data, (DWORD)maxSize, &bytesRead, &overlapRead)) {
|
||||
if (GetLastError() == ERROR_IO_PENDING) {
|
||||
GetOverlappedResult(handle, &overlapRead, &bytesRead, true);
|
||||
} else {
|
||||
failed = true;
|
||||
}
|
||||
}
|
||||
} else if (!ReadFile(handle, (void *)data, (DWORD)maxSize, &bytesRead, NULL)) {
|
||||
failed = true;
|
||||
}
|
||||
if (!ReadFile(handle, (void *)data, (DWORD)maxSize, &bytesRead, &overlapRead)) {
|
||||
if (GetLastError() == ERROR_IO_PENDING) {
|
||||
GetOverlappedResult(handle, &overlapRead, &bytesRead, true);
|
||||
} else {
|
||||
failed = true;
|
||||
}
|
||||
}
|
||||
} else if (!ReadFile(handle, (void *)data, (DWORD)maxSize, &bytesRead, NULL)) {
|
||||
failed = true;
|
||||
}
|
||||
|
||||
if (!failed) {
|
||||
return (qint64)bytesRead;
|
||||
}
|
||||
if (!failed) {
|
||||
return (qint64)bytesRead;
|
||||
}
|
||||
|
||||
lastErr = E_READ_FAILED;
|
||||
return -1;
|
||||
lastErr = E_READ_FAILED;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -240,79 +246,79 @@ qint64 QextSerialPortPrivate::readData_sys(char *data, qint64 maxSize)
|
|||
*/
|
||||
qint64 QextSerialPortPrivate::writeData_sys(const char *data, qint64 maxSize)
|
||||
{
|
||||
DWORD bytesWritten = 0;
|
||||
bool failed = false;
|
||||
DWORD bytesWritten = 0;
|
||||
bool failed = false;
|
||||
|
||||
if (queryMode == QextSerialPort::EventDriven) {
|
||||
OVERLAPPED *newOverlapWrite = new OVERLAPPED;
|
||||
ZeroMemory(newOverlapWrite, sizeof(OVERLAPPED));
|
||||
newOverlapWrite->hEvent = CreateEvent(NULL, true, false, NULL);
|
||||
if (queryMode == QextSerialPort::EventDriven) {
|
||||
OVERLAPPED *newOverlapWrite = new OVERLAPPED;
|
||||
ZeroMemory(newOverlapWrite, sizeof(OVERLAPPED));
|
||||
newOverlapWrite->hEvent = CreateEvent(NULL, true, false, NULL);
|
||||
|
||||
if (WriteFile(handle, (void *)data, (DWORD)maxSize, &bytesWritten, newOverlapWrite)) {
|
||||
CloseHandle(newOverlapWrite->hEvent);
|
||||
delete newOverlapWrite;
|
||||
} else if (GetLastError() == ERROR_IO_PENDING) {
|
||||
// writing asynchronously...not an error
|
||||
QWriteLocker writelocker(bytesToWriteLock);
|
||||
pendingWrites.append(newOverlapWrite);
|
||||
} else {
|
||||
QESP_WARNING() << "QextSerialPort write error:" << GetLastError();
|
||||
failed = true;
|
||||
if (WriteFile(handle, (void *)data, (DWORD)maxSize, &bytesWritten, newOverlapWrite)) {
|
||||
CloseHandle(newOverlapWrite->hEvent);
|
||||
delete newOverlapWrite;
|
||||
} else if (GetLastError() == ERROR_IO_PENDING) {
|
||||
// writing asynchronously...not an error
|
||||
QWriteLocker writelocker(bytesToWriteLock);
|
||||
pendingWrites.append(newOverlapWrite);
|
||||
} else {
|
||||
QESP_WARNING() << "QextSerialPort write error:" << GetLastError();
|
||||
failed = true;
|
||||
|
||||
if (!CancelIo(newOverlapWrite->hEvent)) {
|
||||
QESP_WARNING("QextSerialPort: couldn't cancel IO");
|
||||
}
|
||||
if (!CancelIo(newOverlapWrite->hEvent)) {
|
||||
QESP_WARNING("QextSerialPort: couldn't cancel IO");
|
||||
}
|
||||
|
||||
if (!CloseHandle(newOverlapWrite->hEvent)) {
|
||||
QESP_WARNING("QextSerialPort: couldn't close OVERLAPPED handle");
|
||||
}
|
||||
if (!CloseHandle(newOverlapWrite->hEvent)) {
|
||||
QESP_WARNING("QextSerialPort: couldn't close OVERLAPPED handle");
|
||||
}
|
||||
|
||||
delete newOverlapWrite;
|
||||
}
|
||||
} else if (!WriteFile(handle, (void *)data, (DWORD)maxSize, &bytesWritten, NULL)) {
|
||||
failed = true;
|
||||
}
|
||||
delete newOverlapWrite;
|
||||
}
|
||||
} else if (!WriteFile(handle, (void *)data, (DWORD)maxSize, &bytesWritten, NULL)) {
|
||||
failed = true;
|
||||
}
|
||||
|
||||
if (!failed) {
|
||||
return (qint64)bytesWritten;
|
||||
}
|
||||
if (!failed) {
|
||||
return (qint64)bytesWritten;
|
||||
}
|
||||
|
||||
lastErr = E_WRITE_FAILED;
|
||||
return -1;
|
||||
lastErr = E_WRITE_FAILED;
|
||||
return -1;
|
||||
}
|
||||
|
||||
void QextSerialPortPrivate::setDtr_sys(bool set)
|
||||
{
|
||||
EscapeCommFunction(handle, set ? SETDTR : CLRDTR);
|
||||
EscapeCommFunction(handle, set ? SETDTR : CLRDTR);
|
||||
}
|
||||
|
||||
void QextSerialPortPrivate::setRts_sys(bool set)
|
||||
{
|
||||
EscapeCommFunction(handle, set ? SETRTS : CLRRTS);
|
||||
EscapeCommFunction(handle, set ? SETRTS : CLRRTS);
|
||||
}
|
||||
|
||||
ulong QextSerialPortPrivate::lineStatus_sys(void)
|
||||
{
|
||||
unsigned long Status = 0, Temp = 0;
|
||||
GetCommModemStatus(handle, &Temp);
|
||||
unsigned long Status = 0, Temp = 0;
|
||||
GetCommModemStatus(handle, &Temp);
|
||||
|
||||
if (Temp & MS_CTS_ON) {
|
||||
Status |= LS_CTS;
|
||||
}
|
||||
if (Temp & MS_CTS_ON) {
|
||||
Status |= LS_CTS;
|
||||
}
|
||||
|
||||
if (Temp & MS_DSR_ON) {
|
||||
Status |= LS_DSR;
|
||||
}
|
||||
if (Temp & MS_DSR_ON) {
|
||||
Status |= LS_DSR;
|
||||
}
|
||||
|
||||
if (Temp & MS_RING_ON) {
|
||||
Status |= LS_RI;
|
||||
}
|
||||
if (Temp & MS_RING_ON) {
|
||||
Status |= LS_RI;
|
||||
}
|
||||
|
||||
if (Temp & MS_RLSD_ON) {
|
||||
Status |= LS_DCD;
|
||||
}
|
||||
if (Temp & MS_RLSD_ON) {
|
||||
Status |= LS_DCD;
|
||||
}
|
||||
|
||||
return Status;
|
||||
return Status;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -320,157 +326,157 @@ ulong QextSerialPortPrivate::lineStatus_sys(void)
|
|||
*/
|
||||
void QextSerialPortPrivate::_q_onWinEvent(HANDLE h)
|
||||
{
|
||||
Q_Q(QextSerialPort);
|
||||
Q_Q(QextSerialPort);
|
||||
|
||||
if (h == overlap.hEvent) {
|
||||
if (eventMask & EV_RXCHAR) {
|
||||
if (q->sender() != q && bytesAvailable_sys() > 0) {
|
||||
_q_canRead();
|
||||
}
|
||||
}
|
||||
if (h == overlap.hEvent) {
|
||||
if (eventMask & EV_RXCHAR) {
|
||||
if (q->sender() != q && bytesAvailable_sys() > 0) {
|
||||
_q_canRead();
|
||||
}
|
||||
}
|
||||
|
||||
if (eventMask & EV_TXEMPTY) {
|
||||
/*
|
||||
A write completed. Run through the list of OVERLAPPED writes, and if
|
||||
they completed successfully, take them off the list and delete them.
|
||||
Otherwise, leave them on there so they can finish.
|
||||
*/
|
||||
qint64 totalBytesWritten = 0;
|
||||
QList<OVERLAPPED *> overlapsToDelete;
|
||||
if (eventMask & EV_TXEMPTY) {
|
||||
/*
|
||||
A write completed. Run through the list of OVERLAPPED writes, and if
|
||||
they completed successfully, take them off the list and delete them.
|
||||
Otherwise, leave them on there so they can finish.
|
||||
*/
|
||||
qint64 totalBytesWritten = 0;
|
||||
QList<OVERLAPPED *> overlapsToDelete;
|
||||
|
||||
foreach (OVERLAPPED *o, pendingWrites) {
|
||||
DWORD numBytes = 0;
|
||||
foreach (OVERLAPPED *o, pendingWrites) {
|
||||
DWORD numBytes = 0;
|
||||
|
||||
if (GetOverlappedResult(handle, o, &numBytes, false)) {
|
||||
overlapsToDelete.append(o);
|
||||
totalBytesWritten += numBytes;
|
||||
} else if (GetLastError() != ERROR_IO_INCOMPLETE) {
|
||||
overlapsToDelete.append(o);
|
||||
QESP_WARNING() << "CommEvent overlapped write error:" << GetLastError();
|
||||
}
|
||||
}
|
||||
if (GetOverlappedResult(handle, o, &numBytes, false)) {
|
||||
overlapsToDelete.append(o);
|
||||
totalBytesWritten += numBytes;
|
||||
} else if (GetLastError() != ERROR_IO_INCOMPLETE) {
|
||||
overlapsToDelete.append(o);
|
||||
QESP_WARNING() << "CommEvent overlapped write error:" << GetLastError();
|
||||
}
|
||||
}
|
||||
|
||||
if (q->sender() != q && totalBytesWritten > 0) {
|
||||
QWriteLocker writelocker(bytesToWriteLock);
|
||||
Q_EMIT q->bytesWritten(totalBytesWritten);
|
||||
}
|
||||
if (q->sender() != q && totalBytesWritten > 0) {
|
||||
QWriteLocker writelocker(bytesToWriteLock);
|
||||
Q_EMIT q->bytesWritten(totalBytesWritten);
|
||||
}
|
||||
|
||||
foreach (OVERLAPPED *o, overlapsToDelete) {
|
||||
OVERLAPPED *toDelete = pendingWrites.takeAt(pendingWrites.indexOf(o));
|
||||
CloseHandle(toDelete->hEvent);
|
||||
delete toDelete;
|
||||
}
|
||||
}
|
||||
foreach (OVERLAPPED *o, overlapsToDelete) {
|
||||
OVERLAPPED *toDelete = pendingWrites.takeAt(pendingWrites.indexOf(o));
|
||||
CloseHandle(toDelete->hEvent);
|
||||
delete toDelete;
|
||||
}
|
||||
}
|
||||
|
||||
if (eventMask & EV_DSR) {
|
||||
if (lineStatus_sys() & LS_DSR) {
|
||||
Q_EMIT q->dsrChanged(true);
|
||||
} else {
|
||||
Q_EMIT q->dsrChanged(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (eventMask & EV_DSR) {
|
||||
if (lineStatus_sys() & LS_DSR) {
|
||||
Q_EMIT q->dsrChanged(true);
|
||||
} else {
|
||||
Q_EMIT q->dsrChanged(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WaitCommEvent(handle, &eventMask, &overlap);
|
||||
WaitCommEvent(handle, &eventMask, &overlap);
|
||||
}
|
||||
|
||||
void QextSerialPortPrivate::updatePortSettings()
|
||||
{
|
||||
if (!q_ptr->isOpen() || !settingsDirtyFlags) {
|
||||
return;
|
||||
}
|
||||
if (!q_ptr->isOpen() || !settingsDirtyFlags) {
|
||||
return;
|
||||
}
|
||||
|
||||
//fill struct : COMMCONFIG
|
||||
if (settingsDirtyFlags & DFE_BaudRate) {
|
||||
commConfig.dcb.BaudRate = settings.BaudRate;
|
||||
}
|
||||
//fill struct : COMMCONFIG
|
||||
if (settingsDirtyFlags & DFE_BaudRate) {
|
||||
commConfig.dcb.BaudRate = settings.BaudRate;
|
||||
}
|
||||
|
||||
if (settingsDirtyFlags & DFE_Parity) {
|
||||
commConfig.dcb.Parity = (BYTE)settings.Parity;
|
||||
commConfig.dcb.fParity = (settings.Parity == PAR_NONE) ? FALSE : TRUE;
|
||||
}
|
||||
if (settingsDirtyFlags & DFE_Parity) {
|
||||
commConfig.dcb.Parity = (BYTE)settings.Parity;
|
||||
commConfig.dcb.fParity = (settings.Parity == PAR_NONE) ? FALSE : TRUE;
|
||||
}
|
||||
|
||||
if (settingsDirtyFlags & DFE_DataBits) {
|
||||
commConfig.dcb.ByteSize = (BYTE)settings.DataBits;
|
||||
}
|
||||
if (settingsDirtyFlags & DFE_DataBits) {
|
||||
commConfig.dcb.ByteSize = (BYTE)settings.DataBits;
|
||||
}
|
||||
|
||||
if (settingsDirtyFlags & DFE_StopBits) {
|
||||
switch (settings.StopBits) {
|
||||
case STOP_1:
|
||||
commConfig.dcb.StopBits = ONESTOPBIT;
|
||||
break;
|
||||
if (settingsDirtyFlags & DFE_StopBits) {
|
||||
switch (settings.StopBits) {
|
||||
case STOP_1:
|
||||
commConfig.dcb.StopBits = ONESTOPBIT;
|
||||
break;
|
||||
|
||||
case STOP_1_5:
|
||||
commConfig.dcb.StopBits = ONE5STOPBITS;
|
||||
break;
|
||||
case STOP_1_5:
|
||||
commConfig.dcb.StopBits = ONE5STOPBITS;
|
||||
break;
|
||||
|
||||
case STOP_2:
|
||||
commConfig.dcb.StopBits = TWOSTOPBITS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
case STOP_2:
|
||||
commConfig.dcb.StopBits = TWOSTOPBITS;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (settingsDirtyFlags & DFE_Flow) {
|
||||
switch (settings.FlowControl) {
|
||||
/*no flow control*/
|
||||
case FLOW_OFF:
|
||||
commConfig.dcb.fOutxCtsFlow = FALSE;
|
||||
commConfig.dcb.fRtsControl = RTS_CONTROL_DISABLE;
|
||||
commConfig.dcb.fInX = FALSE;
|
||||
commConfig.dcb.fOutX = FALSE;
|
||||
break;
|
||||
if (settingsDirtyFlags & DFE_Flow) {
|
||||
switch (settings.FlowControl) {
|
||||
/*no flow control*/
|
||||
case FLOW_OFF:
|
||||
commConfig.dcb.fOutxCtsFlow = FALSE;
|
||||
commConfig.dcb.fRtsControl = RTS_CONTROL_DISABLE;
|
||||
commConfig.dcb.fInX = FALSE;
|
||||
commConfig.dcb.fOutX = FALSE;
|
||||
break;
|
||||
|
||||
/*software (XON/XOFF) flow control*/
|
||||
case FLOW_XONXOFF:
|
||||
commConfig.dcb.fOutxCtsFlow = FALSE;
|
||||
commConfig.dcb.fRtsControl = RTS_CONTROL_DISABLE;
|
||||
commConfig.dcb.fInX = TRUE;
|
||||
commConfig.dcb.fOutX = TRUE;
|
||||
break;
|
||||
/*software (XON/XOFF) flow control*/
|
||||
case FLOW_XONXOFF:
|
||||
commConfig.dcb.fOutxCtsFlow = FALSE;
|
||||
commConfig.dcb.fRtsControl = RTS_CONTROL_DISABLE;
|
||||
commConfig.dcb.fInX = TRUE;
|
||||
commConfig.dcb.fOutX = TRUE;
|
||||
break;
|
||||
|
||||
/*hardware flow control*/
|
||||
case FLOW_HARDWARE:
|
||||
commConfig.dcb.fOutxCtsFlow = TRUE;
|
||||
commConfig.dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
|
||||
commConfig.dcb.fInX = FALSE;
|
||||
commConfig.dcb.fOutX = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
/*hardware flow control*/
|
||||
case FLOW_HARDWARE:
|
||||
commConfig.dcb.fOutxCtsFlow = TRUE;
|
||||
commConfig.dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
|
||||
commConfig.dcb.fInX = FALSE;
|
||||
commConfig.dcb.fOutX = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//fill struct : COMMTIMEOUTS
|
||||
if (settingsDirtyFlags & DFE_TimeOut) {
|
||||
if (queryMode != QextSerialPort::EventDriven) {
|
||||
int millisec = settings.Timeout_Millisec;
|
||||
//fill struct : COMMTIMEOUTS
|
||||
if (settingsDirtyFlags & DFE_TimeOut) {
|
||||
if (queryMode != QextSerialPort::EventDriven) {
|
||||
int millisec = settings.Timeout_Millisec;
|
||||
|
||||
if (millisec == -1) {
|
||||
commTimeouts.ReadIntervalTimeout = MAXDWORD;
|
||||
commTimeouts.ReadTotalTimeoutConstant = 0;
|
||||
} else {
|
||||
commTimeouts.ReadIntervalTimeout = millisec;
|
||||
commTimeouts.ReadTotalTimeoutConstant = millisec;
|
||||
}
|
||||
if (millisec == -1) {
|
||||
commTimeouts.ReadIntervalTimeout = MAXDWORD;
|
||||
commTimeouts.ReadTotalTimeoutConstant = 0;
|
||||
} else {
|
||||
commTimeouts.ReadIntervalTimeout = millisec;
|
||||
commTimeouts.ReadTotalTimeoutConstant = millisec;
|
||||
}
|
||||
|
||||
commTimeouts.ReadTotalTimeoutMultiplier = 0;
|
||||
commTimeouts.WriteTotalTimeoutMultiplier = millisec;
|
||||
commTimeouts.WriteTotalTimeoutConstant = 0;
|
||||
} else {
|
||||
commTimeouts.ReadIntervalTimeout = MAXDWORD;
|
||||
commTimeouts.ReadTotalTimeoutMultiplier = 0;
|
||||
commTimeouts.ReadTotalTimeoutConstant = 0;
|
||||
commTimeouts.WriteTotalTimeoutMultiplier = 0;
|
||||
commTimeouts.WriteTotalTimeoutConstant = 0;
|
||||
}
|
||||
}
|
||||
commTimeouts.ReadTotalTimeoutMultiplier = 0;
|
||||
commTimeouts.WriteTotalTimeoutMultiplier = millisec;
|
||||
commTimeouts.WriteTotalTimeoutConstant = 0;
|
||||
} else {
|
||||
commTimeouts.ReadIntervalTimeout = MAXDWORD;
|
||||
commTimeouts.ReadTotalTimeoutMultiplier = 0;
|
||||
commTimeouts.ReadTotalTimeoutConstant = 0;
|
||||
commTimeouts.WriteTotalTimeoutMultiplier = 0;
|
||||
commTimeouts.WriteTotalTimeoutConstant = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (settingsDirtyFlags & DFE_Settings_Mask) {
|
||||
SetCommConfig(handle, &commConfig, sizeof(COMMCONFIG));
|
||||
}
|
||||
if (settingsDirtyFlags & DFE_Settings_Mask) {
|
||||
SetCommConfig(handle, &commConfig, sizeof(COMMCONFIG));
|
||||
}
|
||||
|
||||
if ((settingsDirtyFlags & DFE_TimeOut)) {
|
||||
SetCommTimeouts(handle, &commTimeouts);
|
||||
}
|
||||
if ((settingsDirtyFlags & DFE_TimeOut)) {
|
||||
SetCommTimeouts(handle, &commTimeouts);
|
||||
}
|
||||
|
||||
settingsDirtyFlags = 0;
|
||||
settingsDirtyFlags = 0;
|
||||
}
|
||||
|
|
|
@ -11,8 +11,7 @@ HEADERS += \
|
|||
$$PWD/mimetext.h \
|
||||
$$PWD/quotedprintable.h \
|
||||
$$PWD/smtpclient.h \
|
||||
$$PWD/smtpmime.h \
|
||||
$$PWD/sendemailthread.h
|
||||
$$PWD/smtpmime.h
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/emailaddress.cpp \
|
||||
|
@ -26,5 +25,4 @@ SOURCES += \
|
|||
$$PWD/mimepart.cpp \
|
||||
$$PWD/mimetext.cpp \
|
||||
$$PWD/quotedprintable.cpp \
|
||||
$$PWD/smtpclient.cpp \
|
||||
$$PWD/sendemailthread.cpp
|
||||
$$PWD/smtpclient.cpp
|
|
@ -0,0 +1,223 @@
|
|||
#include "mimemessage.h"
|
||||
|
||||
#include <QDateTime>
|
||||
#include "quotedprintable.h"
|
||||
#include <typeinfo>
|
||||
|
||||
MimeMessage::MimeMessage(bool createAutoMimeContent) :
|
||||
hEncoding(MimePart::_8Bit)
|
||||
{
|
||||
if (createAutoMimeContent) {
|
||||
this->content = new MimeMultiPart();
|
||||
}
|
||||
}
|
||||
|
||||
MimeMessage::~MimeMessage()
|
||||
{
|
||||
}
|
||||
|
||||
MimePart &MimeMessage::getContent()
|
||||
{
|
||||
return *content;
|
||||
}
|
||||
|
||||
void MimeMessage::setContent(MimePart *content)
|
||||
{
|
||||
this->content = content;
|
||||
}
|
||||
|
||||
void MimeMessage::setSender(EmailAddress *e)
|
||||
{
|
||||
this->sender = e;
|
||||
}
|
||||
|
||||
void MimeMessage::addRecipient(EmailAddress *rcpt, RecipientType type)
|
||||
{
|
||||
switch (type) {
|
||||
case To:
|
||||
recipientsTo << rcpt;
|
||||
break;
|
||||
|
||||
case Cc:
|
||||
recipientsCc << rcpt;
|
||||
break;
|
||||
|
||||
case Bcc:
|
||||
recipientsBcc << rcpt;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MimeMessage::addTo(EmailAddress *rcpt)
|
||||
{
|
||||
this->recipientsTo << rcpt;
|
||||
}
|
||||
|
||||
void MimeMessage::addCc(EmailAddress *rcpt)
|
||||
{
|
||||
this->recipientsCc << rcpt;
|
||||
}
|
||||
|
||||
void MimeMessage::addBcc(EmailAddress *rcpt)
|
||||
{
|
||||
this->recipientsBcc << rcpt;
|
||||
}
|
||||
|
||||
void MimeMessage::setSubject(const QString &subject)
|
||||
{
|
||||
this->subject = subject;
|
||||
}
|
||||
|
||||
void MimeMessage::addPart(MimePart *part)
|
||||
{
|
||||
if (typeid(*content) == typeid(MimeMultiPart)) {
|
||||
((MimeMultiPart *) content)->addPart(part);
|
||||
};
|
||||
}
|
||||
|
||||
void MimeMessage::setHeaderEncoding(MimePart::Encoding hEnc)
|
||||
{
|
||||
this->hEncoding = hEnc;
|
||||
}
|
||||
|
||||
const EmailAddress &MimeMessage::getSender() const
|
||||
{
|
||||
return *sender;
|
||||
}
|
||||
|
||||
const QList<EmailAddress *> &MimeMessage::getRecipients(RecipientType type) const
|
||||
{
|
||||
switch (type) {
|
||||
default:
|
||||
case To:
|
||||
return recipientsTo;
|
||||
|
||||
case Cc:
|
||||
return recipientsCc;
|
||||
|
||||
case Bcc:
|
||||
return recipientsBcc;
|
||||
}
|
||||
}
|
||||
|
||||
const QString &MimeMessage::getSubject() const
|
||||
{
|
||||
return subject;
|
||||
}
|
||||
|
||||
const QList<MimePart *> &MimeMessage::getParts() const
|
||||
{
|
||||
if (typeid(*content) == typeid(MimeMultiPart)) {
|
||||
return ((MimeMultiPart *) content)->getParts();
|
||||
} else {
|
||||
QList<MimePart *> *res = new QList<MimePart *>();
|
||||
res->append(content);
|
||||
return *res;
|
||||
}
|
||||
}
|
||||
|
||||
QString MimeMessage::toString()
|
||||
{
|
||||
QString mime;
|
||||
mime = "From:";
|
||||
|
||||
QByteArray name = sender->getName().toUtf8();
|
||||
if (name != "") {
|
||||
switch (hEncoding) {
|
||||
case MimePart::Base64:
|
||||
mime += " =?utf-8?B?" + QByteArray().append(name).toBase64() + "?=";
|
||||
break;
|
||||
|
||||
case MimePart::QuotedPrintable:
|
||||
mime += " =?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append(name)).replace(' ', "_").replace(':', "=3A") + "?=";
|
||||
break;
|
||||
|
||||
default:
|
||||
mime += " " + name;
|
||||
}
|
||||
}
|
||||
|
||||
mime += " <" + sender->getAddress() + ">\r\n";
|
||||
|
||||
mime += "To:";
|
||||
QList<EmailAddress *>::iterator it;
|
||||
int i;
|
||||
|
||||
for (i = 0, it = recipientsTo.begin(); it != recipientsTo.end(); ++it, ++i) {
|
||||
if (i != 0) {
|
||||
mime += ",";
|
||||
}
|
||||
|
||||
QByteArray name = (*it)->getName().toUtf8();
|
||||
if (name != "") {
|
||||
switch (hEncoding) {
|
||||
case MimePart::Base64:
|
||||
mime += " =?utf-8?B?" + QByteArray().append(name).toBase64() + "?=";
|
||||
break;
|
||||
|
||||
case MimePart::QuotedPrintable:
|
||||
mime += " =?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append(name)).replace(' ', "_").replace(':', "=3A") + "?=";
|
||||
break;
|
||||
|
||||
default:
|
||||
mime += " " + name;
|
||||
}
|
||||
}
|
||||
|
||||
mime += " <" + (*it)->getAddress() + ">";
|
||||
}
|
||||
|
||||
mime += "\r\n";
|
||||
if (recipientsCc.size() != 0) {
|
||||
mime += "Cc:";
|
||||
}
|
||||
|
||||
for (i = 0, it = recipientsCc.begin(); it != recipientsCc.end(); ++it, ++i) {
|
||||
if (i != 0) {
|
||||
mime += ",";
|
||||
}
|
||||
|
||||
QByteArray name = (*it)->getName().toUtf8();
|
||||
if (name != "") {
|
||||
switch (hEncoding) {
|
||||
case MimePart::Base64:
|
||||
mime += " =?utf-8?B?" + QByteArray().append(name).toBase64() + "?=";
|
||||
break;
|
||||
|
||||
case MimePart::QuotedPrintable:
|
||||
mime += " =?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append(name)).replace(' ', "_").replace(':', "=3A") + "?=";
|
||||
break;
|
||||
|
||||
default:
|
||||
mime += " " + name;
|
||||
}
|
||||
}
|
||||
|
||||
mime += " <" + (*it)->getAddress() + ">";
|
||||
}
|
||||
|
||||
if (recipientsCc.size() != 0) {
|
||||
mime += "\r\n";
|
||||
}
|
||||
|
||||
mime += "Subject: ";
|
||||
|
||||
switch (hEncoding) {
|
||||
case MimePart::Base64:
|
||||
mime += "=?utf-8?B?" + QByteArray().append(subject.toUtf8()).toBase64() + "?=";
|
||||
break;
|
||||
|
||||
case MimePart::QuotedPrintable:
|
||||
mime += "=?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append(subject.toUtf8())).replace(' ', "_").replace(':', "=3A") + "?=";
|
||||
break;
|
||||
|
||||
default:
|
||||
mime += subject;
|
||||
}
|
||||
|
||||
mime += "\r\n";
|
||||
mime += "MIME-Version: 1.0\r\n";
|
||||
|
||||
mime += content->toString();
|
||||
return mime;
|
||||
}
|
|
@ -0,0 +1,66 @@
|
|||
#include "mimemultipart.h"
|
||||
#include "stdlib.h"
|
||||
#include <QTime>
|
||||
#include <QCryptographicHash>
|
||||
|
||||
const QString MULTI_PART_NAMES[] = {
|
||||
"multipart/mixed", // Mixed
|
||||
"multipart/digest", // Digest
|
||||
"multipart/alternative", // Alternative
|
||||
"multipart/related", // Related
|
||||
"multipart/report", // Report
|
||||
"multipart/signed", // Signed
|
||||
"multipart/encrypted" // Encrypted
|
||||
};
|
||||
|
||||
MimeMultiPart::MimeMultiPart(MultiPartType type)
|
||||
{
|
||||
this->type = type;
|
||||
this->cType = MULTI_PART_NAMES[this->type];
|
||||
this->cEncoding = _8Bit;
|
||||
|
||||
QCryptographicHash md5(QCryptographicHash::Md5);
|
||||
md5.addData(QByteArray().append(rand()));
|
||||
cBoundary = md5.result().toHex();
|
||||
}
|
||||
|
||||
MimeMultiPart::~MimeMultiPart()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MimeMultiPart::addPart(MimePart *part)
|
||||
{
|
||||
parts.append(part);
|
||||
}
|
||||
|
||||
const QList<MimePart *> &MimeMultiPart::getParts() const
|
||||
{
|
||||
return parts;
|
||||
}
|
||||
|
||||
void MimeMultiPart::prepare()
|
||||
{
|
||||
QList<MimePart *>::iterator it;
|
||||
content = "";
|
||||
|
||||
for (it = parts.begin(); it != parts.end(); it++) {
|
||||
content += "--" + cBoundary.toUtf8() + "\r\n";
|
||||
(*it)->prepare();
|
||||
content += (*it)->toString().toUtf8();
|
||||
};
|
||||
|
||||
content += "--" + cBoundary.toUtf8() + "--\r\n";
|
||||
MimePart::prepare();
|
||||
}
|
||||
|
||||
void MimeMultiPart::setMimeType(const MultiPartType type)
|
||||
{
|
||||
this->type = type;
|
||||
this->cType = MULTI_PART_NAMES[type];
|
||||
}
|
||||
|
||||
MimeMultiPart::MultiPartType MimeMultiPart::getMimeType() const
|
||||
{
|
||||
return type;
|
||||
}
|
|
@ -142,7 +142,7 @@ void MimePart::prepare()
|
|||
break;
|
||||
}
|
||||
|
||||
if (cId != 0) {
|
||||
if (cId.toInt() != 0) {
|
||||
mimeString.append("Content-ID: <").append(cId).append(">\r\n");
|
||||
}
|
||||
|
|
@ -23,6 +23,6 @@ const QString &MimeText::getText() const
|
|||
void MimeText::prepare()
|
||||
{
|
||||
this->content.clear();
|
||||
this->content.append(text);
|
||||
this->content.append(text.toUtf8());
|
||||
MimePart::prepare();
|
||||
}
|
|
@ -222,7 +222,7 @@ bool SmtpClient::login(const QString &user, const QString &password, AuthMethod
|
|||
try {
|
||||
if (method == AuthPlain) {
|
||||
// Sending command: AUTH PLAIN base64('\0' + username + '\0' + password)
|
||||
sendMessage("AUTH PLAIN " + QByteArray().append((char) 0).append(user).append((char) 0).append(password).toBase64());
|
||||
sendMessage("AUTH PLAIN " + QByteArray().append((char) 0).append(user.toUtf8()).append((char) 0).append(password.toUtf8()).toBase64());
|
||||
|
||||
// Wait for the server's response
|
||||
waitForResponse();
|
||||
|
@ -245,7 +245,7 @@ bool SmtpClient::login(const QString &user, const QString &password, AuthMethod
|
|||
}
|
||||
|
||||
// Send the username in base64
|
||||
sendMessage(QByteArray().append(user).toBase64());
|
||||
sendMessage(QByteArray().append(user.toUtf8()).toBase64());
|
||||
|
||||
// Wait for 334
|
||||
waitForResponse();
|
||||
|
@ -256,7 +256,7 @@ bool SmtpClient::login(const QString &user, const QString &password, AuthMethod
|
|||
}
|
||||
|
||||
// Send the password in base64
|
||||
sendMessage(QByteArray().append(password).toBase64());
|
||||
sendMessage(QByteArray().append(password.toUtf8()).toBase64());
|
||||
|
||||
// Wait for the server's responce
|
||||
waitForResponse();
|
||||
|
@ -354,7 +354,7 @@ void SmtpClient::quit()
|
|||
sendMessage("QUIT");
|
||||
}
|
||||
|
||||
void SmtpClient::waitForResponse() throw (ResponseTimeoutException)
|
||||
void SmtpClient::waitForResponse()
|
||||
{
|
||||
do {
|
||||
if (!socket->waitForReadyRead(responseTimeout)) {
|
|
@ -92,7 +92,7 @@ protected:
|
|||
int responseCode;
|
||||
|
||||
class ResponseTimeoutException {};
|
||||
void waitForResponse() throw (ResponseTimeoutException);
|
||||
void waitForResponse();
|
||||
void sendMessage(const QString &text);
|
||||
|
||||
signals:
|
|
@ -24,7 +24,6 @@ SUBDIRS += maskwidget #遮罩层窗体
|
|||
SUBDIRS += battery #电池电量控件
|
||||
SUBDIRS += lineeditnext #文本框回车焦点下移
|
||||
SUBDIRS += zhtopy #汉字转拼音
|
||||
SUBDIRS += qwtdemo #qwt的源码版本,无需插件,直接源码集成到你的项目即可
|
||||
SUBDIRS += devicebutton #设备按钮地图效果
|
||||
SUBDIRS += mouseline #鼠标定位十字线
|
||||
SUBDIRS += emailtool #邮件发送工具
|
||||
|
@ -46,5 +45,12 @@ SUBDIRS += miniblink #miniblink示例
|
|||
|
||||
#如果你电脑对应的Qt版本有webkit或者webengine组件可以自行打开
|
||||
#SUBDIRS += echartgauge #echart仪表盘含交互支持webkit及webengine
|
||||
#designer项目只支持Qt4,如果是Qt4可以自行打开
|
||||
|
||||
lessThan(QT_MAJOR_VERSION, 4) {
|
||||
#SUBDIRS += designer #QtDesigner4源码
|
||||
}
|
||||
|
||||
#qwt项目需要等官方适配了qwt组件才能适配
|
||||
lessThan(QT_MAJOR_VERSION, 6) {
|
||||
SUBDIRS += qwtdemo #qwt的源码版本,无需插件,直接源码集成到你的项目即可
|
||||
}
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
1. **可以选择打开QWidgetDemo.pro一次性编译所有的,也可以进入到目录下打开pro进行编译**
|
||||
2. **如果发现有些子项目没有加载请打开QWidgetDemo.pro仔细看里面的注释**
|
||||
3. **编译好的可执行文件在源码同级目录下的bin目录**
|
||||
4. 亲测Qt4.6到Qt6.1所有版本,亲测win、linux、mac、uos等系统。
|
||||
|
||||
| 编号 | 文件夹 | 描述 |
|
||||
| ------ | ------ | ------ |
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = base64
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -128,11 +128,13 @@ void Battery::updateValue()
|
|||
if (isForward) {
|
||||
currentValue -= step;
|
||||
if (currentValue <= value) {
|
||||
currentValue = value;
|
||||
timer->stop();
|
||||
}
|
||||
} else {
|
||||
currentValue += step;
|
||||
if (currentValue >= value) {
|
||||
currentValue = value;
|
||||
timer->stop();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ class Battery : public QWidget
|
|||
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(double minValue READ getMinValue WRITE setMinValue)
|
||||
Q_PROPERTY(double maxValue READ getMaxValue WRITE setMaxValue)
|
||||
Q_PROPERTY(double value READ getValue WRITE setValue)
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = battery
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = bgdemo
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -6,13 +6,18 @@
|
|||
#include "qlabel.h"
|
||||
#include "qlineedit.h"
|
||||
#include "qapplication.h"
|
||||
#include "qdesktopwidget.h"
|
||||
#include "qtimer.h"
|
||||
#include "qevent.h"
|
||||
#include "qdebug.h"
|
||||
|
||||
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
|
||||
#include "qscreen.h"
|
||||
#define deskGeometry qApp->primaryScreen()->geometry()
|
||||
#define deskGeometry2 qApp->primaryScreen()->availableGeometry()
|
||||
#else
|
||||
#include "qdesktopwidget.h"
|
||||
#define deskGeometry qApp->desktop()->geometry()
|
||||
#define deskGeometry2 qApp->desktop()->availableGeometry()
|
||||
#endif
|
||||
|
||||
ColorWidget *ColorWidget::instance = 0;
|
||||
|
@ -130,11 +135,11 @@ void ColorWidget::showColorValue()
|
|||
int y = QCursor::pos().y();
|
||||
txtPoint->setText(tr("x:%1 y:%2").arg(x).arg(y));
|
||||
|
||||
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
|
||||
QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId(), x, y, 2, 2);
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
|
||||
QPixmap pixmap = QPixmap::grabWindow(qApp->desktop()->winId(), x, y, 2, 2);
|
||||
#else
|
||||
QScreen *screen = QApplication::primaryScreen();
|
||||
QPixmap pixmap = screen->grabWindow(QApplication::desktop()->winId(), x, y, 2, 2);
|
||||
QScreen *screen = qApp->primaryScreen();
|
||||
QPixmap pixmap = screen->grabWindow(0, x, y, 2, 2);
|
||||
#endif
|
||||
|
||||
int red, green, blue;
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = colorwidget
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -9,7 +9,7 @@ int main(int argc, char *argv[])
|
|||
QApplication a(argc, argv);
|
||||
a.setFont(QFont("Microsoft Yahei", 9));
|
||||
|
||||
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
|
||||
#if _MSC_VER
|
||||
QTextCodec *codec = QTextCodec::codecForName("gbk");
|
||||
#else
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui network
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = comtool
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -6,6 +6,9 @@
|
|||
#include <QtWidgets>
|
||||
#endif
|
||||
|
||||
#include "appconfig.h"
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))
|
||||
#include <QtCore5Compat>
|
||||
#endif
|
||||
|
||||
#pragma execution_character_set("utf-8")
|
||||
#include "appconfig.h"
|
||||
|
|
|
@ -34,21 +34,21 @@ IconFont::IconFont(QObject *parent) : QObject(parent)
|
|||
}
|
||||
}
|
||||
|
||||
void IconFont::setIcon(QLabel *lab, const QChar &icon, quint32 size)
|
||||
void IconFont::setIcon(QLabel *lab, int icon, quint32 size)
|
||||
{
|
||||
iconFont.setPixelSize(size);
|
||||
lab->setFont(iconFont);
|
||||
lab->setText(icon);
|
||||
lab->setText((QChar)icon);
|
||||
}
|
||||
|
||||
void IconFont::setIcon(QAbstractButton *btn, const QChar &icon, quint32 size)
|
||||
void IconFont::setIcon(QAbstractButton *btn, int icon, quint32 size)
|
||||
{
|
||||
iconFont.setPixelSize(size);
|
||||
btn->setFont(iconFont);
|
||||
btn->setText(icon);
|
||||
btn->setText((QChar)icon);
|
||||
}
|
||||
|
||||
QPixmap IconFont::getPixmap(const QColor &color, const QChar &icon, quint32 size,
|
||||
QPixmap IconFont::getPixmap(const QColor &color, int icon, quint32 size,
|
||||
quint32 pixWidth, quint32 pixHeight, int flags)
|
||||
{
|
||||
QPixmap pix(pixWidth, pixHeight);
|
||||
|
@ -61,7 +61,7 @@ QPixmap IconFont::getPixmap(const QColor &color, const QChar &icon, quint32 size
|
|||
|
||||
iconFont.setPixelSize(size);
|
||||
painter.setFont(iconFont);
|
||||
painter.drawText(pix.rect(), flags, icon);
|
||||
painter.drawText(pix.rect(), flags, (QChar)icon);
|
||||
painter.end();
|
||||
|
||||
return pix;
|
||||
|
@ -90,16 +90,16 @@ void IconFont::setStyle(QWidget *widget, const QString &type, int borderWidth, c
|
|||
QString strBorder;
|
||||
if (type == "top") {
|
||||
strBorder = QString("border-width:%1px 0px 0px 0px;padding:%1px %2px %2px %2px;")
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
} else if (type == "right") {
|
||||
strBorder = QString("border-width:0px %1px 0px 0px;padding:%2px %1px %2px %2px;")
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
} else if (type == "bottom") {
|
||||
strBorder = QString("border-width:0px 0px %1px 0px;padding:%2px %2px %1px %2px;")
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
} else if (type == "left") {
|
||||
strBorder = QString("border-width:0px 0px 0px %1px;padding:%2px %2px %2px %1px;")
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
}
|
||||
|
||||
QStringList qss;
|
||||
|
@ -115,7 +115,7 @@ void IconFont::setStyle(QWidget *widget, const QString &type, int borderWidth, c
|
|||
widget->setStyleSheet(qss.join(""));
|
||||
}
|
||||
|
||||
void IconFont::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QChar> icons,
|
||||
void IconFont::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<int> icons,
|
||||
quint32 iconSize, quint32 iconWidth, quint32 iconHeight,
|
||||
const QString &type, int borderWidth, const QString &borderColor,
|
||||
const QString &normalBgColor, const QString &darkBgColor,
|
||||
|
@ -130,16 +130,16 @@ void IconFont::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QChar>
|
|||
QString strBorder;
|
||||
if (type == "top") {
|
||||
strBorder = QString("border-width:%1px 0px 0px 0px;padding:%1px %2px %2px %2px;")
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
} else if (type == "right") {
|
||||
strBorder = QString("border-width:0px %1px 0px 0px;padding:%2px %1px %2px %2px;")
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
} else if (type == "bottom") {
|
||||
strBorder = QString("border-width:0px 0px %1px 0px;padding:%2px %2px %1px %2px;")
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
} else if (type == "left") {
|
||||
strBorder = QString("border-width:0px 0px 0px %1px;padding:%2px %2px %2px %1px;")
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
.arg(borderWidth).arg(borderWidth * 2);
|
||||
}
|
||||
|
||||
//如果图标是左侧显示则需要让没有选中的按钮左侧也有加深的边框,颜色为背景颜色
|
||||
|
@ -168,10 +168,11 @@ void IconFont::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QChar>
|
|||
|
||||
widget->setStyleSheet(qss.join(""));
|
||||
|
||||
//存储对应按钮对象,方便鼠标移上去的时候切换图片
|
||||
for (int i = 0; i < btnCount; i++) {
|
||||
//存储对应按钮对象,方便鼠标移上去的时候切换图片
|
||||
QPixmap pixNormal = getPixmap(normalTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixDark = getPixmap(darkTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
int icon = icons.at(i);
|
||||
QPixmap pixNormal = getPixmap(normalTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixDark = getPixmap(darkTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
|
||||
btns.at(i)->setIcon(QIcon(pixNormal));
|
||||
btns.at(i)->setIconSize(QSize(iconWidth, iconHeight));
|
||||
|
@ -183,7 +184,7 @@ void IconFont::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QChar>
|
|||
}
|
||||
}
|
||||
|
||||
void IconFont::setStyle(QFrame *frame, QList<QToolButton *> btns, QList<QChar> icons,
|
||||
void IconFont::setStyle(QFrame *frame, QList<QToolButton *> btns, QList<int> icons,
|
||||
quint32 iconSize, quint32 iconWidth, quint32 iconHeight,
|
||||
const QString &normalBgColor, const QString &darkBgColor,
|
||||
const QString &normalTextColor, const QString &darkTextColor)
|
||||
|
@ -203,10 +204,11 @@ void IconFont::setStyle(QFrame *frame, QList<QToolButton *> btns, QList<QChar> i
|
|||
|
||||
frame->setStyleSheet(qss.join(""));
|
||||
|
||||
//存储对应按钮对象,方便鼠标移上去的时候切换图片
|
||||
for (int i = 0; i < btnCount; i++) {
|
||||
//存储对应按钮对象,方便鼠标移上去的时候切换图片
|
||||
QPixmap pixNormal = getPixmap(normalTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixDark = getPixmap(darkTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
int icon = icons.at(i);
|
||||
QPixmap pixNormal = getPixmap(normalTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixDark = getPixmap(darkTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
|
||||
btns.at(i)->setIcon(QIcon(pixNormal));
|
||||
btns.at(i)->setIconSize(QSize(iconWidth, iconHeight));
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include <QtCore>
|
||||
#include <QtGui>
|
||||
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
|
||||
#include <QtWidgets>
|
||||
#endif
|
||||
|
||||
|
@ -20,9 +20,9 @@ public:
|
|||
static IconFont *Instance();
|
||||
explicit IconFont(QObject *parent = 0);
|
||||
|
||||
void setIcon(QLabel *lab, const QChar &icon, quint32 size = 12);
|
||||
void setIcon(QAbstractButton *btn, const QChar &icon, quint32 size = 12);
|
||||
QPixmap getPixmap(const QColor &color, const QChar &icon, quint32 size = 12,
|
||||
void setIcon(QLabel *lab, int icon, quint32 size = 12);
|
||||
void setIcon(QAbstractButton *btn, int icon, quint32 size = 12);
|
||||
QPixmap getPixmap(const QColor &color, int icon, quint32 size = 12,
|
||||
quint32 pixWidth = 15, quint32 pixHeight = 15,
|
||||
int flags = Qt::AlignCenter);
|
||||
|
||||
|
@ -38,7 +38,7 @@ public:
|
|||
const QString &darkTextColor = "#FDFDFD");
|
||||
|
||||
//指定导航面板样式,带图标和效果切换
|
||||
void setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QChar> icons,
|
||||
void setStyle(QWidget *widget, QList<QToolButton *> btns, QList<int> icons,
|
||||
quint32 iconSize = 12, quint32 iconWidth = 15, quint32 iconHeight = 15,
|
||||
const QString &type = "left", int borderWidth = 3,
|
||||
const QString &borderColor = "#029FEA",
|
||||
|
@ -48,7 +48,7 @@ public:
|
|||
const QString &darkTextColor = "#FDFDFD");
|
||||
|
||||
//指定导航按钮样式,带图标和效果切换
|
||||
void setStyle(QFrame *frame, QList<QToolButton *> btns, QList<QChar> icons,
|
||||
void setStyle(QFrame *frame, QList<QToolButton *> btns, QList<int> icons,
|
||||
quint32 iconSize = 12, quint32 iconWidth = 15, quint32 iconHeight = 15,
|
||||
const QString &normalBgColor = "#2FC5A2",
|
||||
const QString &darkBgColor = "#3EA7E9",
|
||||
|
|
|
@ -39,21 +39,21 @@ QFont IconHelper::getIconFont()
|
|||
return this->iconFont;
|
||||
}
|
||||
|
||||
void IconHelper::setIcon(QLabel *lab, const QChar &icon, quint32 size)
|
||||
void IconHelper::setIcon(QLabel *lab, int icon, quint32 size)
|
||||
{
|
||||
iconFont.setPixelSize(size);
|
||||
lab->setFont(iconFont);
|
||||
lab->setText(icon);
|
||||
lab->setText((QChar)icon);
|
||||
}
|
||||
|
||||
void IconHelper::setIcon(QAbstractButton *btn, const QChar &icon, quint32 size)
|
||||
void IconHelper::setIcon(QAbstractButton *btn, int icon, quint32 size)
|
||||
{
|
||||
iconFont.setPixelSize(size);
|
||||
btn->setFont(iconFont);
|
||||
btn->setText(icon);
|
||||
btn->setText((QChar)icon);
|
||||
}
|
||||
|
||||
QPixmap IconHelper::getPixmap(const QColor &color, const QChar &icon, quint32 size,
|
||||
QPixmap IconHelper::getPixmap(const QColor &color, int icon, quint32 size,
|
||||
quint32 pixWidth, quint32 pixHeight, int flags)
|
||||
{
|
||||
QPixmap pix(pixWidth, pixHeight);
|
||||
|
@ -66,7 +66,7 @@ QPixmap IconHelper::getPixmap(const QColor &color, const QChar &icon, quint32 si
|
|||
|
||||
iconFont.setPixelSize(size);
|
||||
painter.setFont(iconFont);
|
||||
painter.drawText(pix.rect(), flags, icon);
|
||||
painter.drawText(pix.rect(), flags, (QChar)icon);
|
||||
painter.end();
|
||||
|
||||
return pix;
|
||||
|
@ -106,7 +106,7 @@ QPixmap IconHelper::getPixmap(QToolButton *btn, int type)
|
|||
return pix;
|
||||
}
|
||||
|
||||
void IconHelper::setStyle(QFrame *frame, QList<QToolButton *> btns, QList<QChar> icons,
|
||||
void IconHelper::setStyle(QFrame *frame, QList<QToolButton *> btns, QList<int> icons,
|
||||
quint32 iconSize, quint32 iconWidth, quint32 iconHeight,
|
||||
const QString &normalBgColor, const QString &darkBgColor,
|
||||
const QString &normalTextColor, const QString &darkTextColor)
|
||||
|
@ -127,8 +127,9 @@ void IconHelper::setStyle(QFrame *frame, QList<QToolButton *> btns, QList<QChar>
|
|||
|
||||
//存储对应按钮对象,方便鼠标移上去的时候切换图片
|
||||
for (int i = 0; i < btnCount; i++) {
|
||||
QPixmap pixNormal = getPixmap(normalTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixDark = getPixmap(darkTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
int icon = icons.at(i);
|
||||
QPixmap pixNormal = getPixmap(normalTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixDark = getPixmap(darkTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
|
||||
QToolButton *btn = btns.at(i);
|
||||
btn->setIcon(QIcon(pixNormal));
|
||||
|
@ -194,7 +195,7 @@ void IconHelper::removeStyle(QList<QToolButton *> btns)
|
|||
}
|
||||
}
|
||||
|
||||
void IconHelper::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QChar> icons,
|
||||
void IconHelper::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<int> icons,
|
||||
quint32 iconSize, quint32 iconWidth, quint32 iconHeight,
|
||||
const QString &type, int borderWidth, const QString &borderColor,
|
||||
const QString &normalBgColor, const QString &darkBgColor,
|
||||
|
@ -247,8 +248,9 @@ void IconHelper::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QCha
|
|||
|
||||
//存储对应按钮对象,方便鼠标移上去的时候切换图片
|
||||
for (int i = 0; i < btnCount; i++) {
|
||||
QPixmap pixNormal = getPixmap(normalTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixDark = getPixmap(darkTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
int icon = icons.at(i);
|
||||
QPixmap pixNormal = getPixmap(normalTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixDark = getPixmap(darkTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
|
||||
QToolButton *btn = btns.at(i);
|
||||
btn->setIcon(QIcon(pixNormal));
|
||||
|
@ -264,7 +266,7 @@ void IconHelper::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QCha
|
|||
}
|
||||
}
|
||||
|
||||
void IconHelper::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QChar> icons, const IconHelper::StyleColor &styleColor)
|
||||
void IconHelper::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<int> icons, const IconHelper::StyleColor &styleColor)
|
||||
{
|
||||
int btnCount = btns.count();
|
||||
int charCount = icons.count();
|
||||
|
@ -320,10 +322,11 @@ void IconHelper::setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QCha
|
|||
|
||||
//存储对应按钮对象,方便鼠标移上去的时候切换图片
|
||||
for (int i = 0; i < btnCount; i++) {
|
||||
QPixmap pixNormal = getPixmap(styleColor.normalTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixHover = getPixmap(styleColor.hoverTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixPressed = getPixmap(styleColor.pressedTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixChecked = getPixmap(styleColor.checkedTextColor, icons.at(i), iconSize, iconWidth, iconHeight);
|
||||
int icon = icons.at(i);
|
||||
QPixmap pixNormal = getPixmap(styleColor.normalTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixHover = getPixmap(styleColor.hoverTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixPressed = getPixmap(styleColor.pressedTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
QPixmap pixChecked = getPixmap(styleColor.checkedTextColor, icon, iconSize, iconWidth, iconHeight);
|
||||
|
||||
QToolButton *btn = btns.at(i);
|
||||
btn->setIcon(QIcon(pixNormal));
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include <QtCore>
|
||||
#include <QtGui>
|
||||
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
|
||||
#include <QtWidgets>
|
||||
#endif
|
||||
|
||||
|
@ -24,12 +24,12 @@ public:
|
|||
QFont getIconFont();
|
||||
|
||||
//设置图形字体到标签
|
||||
void setIcon(QLabel *lab, const QChar &icon, quint32 size = 12);
|
||||
void setIcon(QLabel *lab, int icon, quint32 size = 12);
|
||||
//设置图形字体到按钮
|
||||
void setIcon(QAbstractButton *btn, const QChar &icon, quint32 size = 12);
|
||||
void setIcon(QAbstractButton *btn, int icon, quint32 size = 12);
|
||||
|
||||
//获取指定图形字体,可以指定文字大小,图片宽高,文字对齐
|
||||
QPixmap getPixmap(const QColor &color, const QChar &icon, quint32 size = 12,
|
||||
QPixmap getPixmap(const QColor &color, int icon, quint32 size = 12,
|
||||
quint32 pixWidth = 15, quint32 pixHeight = 15,
|
||||
int flags = Qt::AlignCenter);
|
||||
|
||||
|
@ -38,7 +38,7 @@ public:
|
|||
QPixmap getPixmap(QToolButton *btn, int type);
|
||||
|
||||
//指定QFrame导航按钮样式,带图标
|
||||
void setStyle(QFrame *frame, QList<QToolButton *> btns, QList<QChar> icons,
|
||||
void setStyle(QFrame *frame, QList<QToolButton *> btns, QList<int> icons,
|
||||
quint32 iconSize = 12, quint32 iconWidth = 15, quint32 iconHeight = 15,
|
||||
const QString &normalBgColor = "#2FC5A2",
|
||||
const QString &darkBgColor = "#3EA7E9",
|
||||
|
@ -57,7 +57,7 @@ public:
|
|||
void removeStyle(QList<QToolButton *> btns);
|
||||
|
||||
//指定QWidget导航面板样式,带图标和效果切换
|
||||
void setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QChar> icons,
|
||||
void setStyle(QWidget *widget, QList<QToolButton *> btns, QList<int> icons,
|
||||
quint32 iconSize = 12, quint32 iconWidth = 15, quint32 iconHeight = 15,
|
||||
const QString &type = "left", int borderWidth = 3,
|
||||
const QString &borderColor = "#029FEA",
|
||||
|
@ -101,7 +101,7 @@ public:
|
|||
};
|
||||
|
||||
//指定QWidget导航面板样式,带图标和效果切换+悬停颜色+按下颜色+选中颜色
|
||||
void setStyle(QWidget *widget, QList<QToolButton *> btns, QList<QChar> icons, const StyleColor &styleColor);
|
||||
void setStyle(QWidget *widget, QList<QToolButton *> btns, QList<int> icons, const StyleColor &styleColor);
|
||||
|
||||
protected:
|
||||
bool eventFilter(QObject *watched, QEvent *event);
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
#include "quiconfig.h"
|
||||
|
||||
QChar QUIConfig::IconMain = 0xf072;
|
||||
QChar QUIConfig::IconMenu = 0xf0d7;
|
||||
QChar QUIConfig::IconMin = 0xf068;
|
||||
QChar QUIConfig::IconMax = 0xf2d2;
|
||||
QChar QUIConfig::IconNormal = 0xf2d0;
|
||||
QChar QUIConfig::IconClose = 0xf00d;
|
||||
int QUIConfig::IconMain = 0xf072;
|
||||
int QUIConfig::IconMenu = 0xf0d7;
|
||||
int QUIConfig::IconMin = 0xf068;
|
||||
int QUIConfig::IconMax = 0xf2d2;
|
||||
int QUIConfig::IconNormal = 0xf2d0;
|
||||
int QUIConfig::IconClose = 0xf00d;
|
||||
|
||||
#ifdef __arm__
|
||||
QString QUIConfig::FontName = "WenQuanYi Micro Hei";
|
||||
|
|
|
@ -7,12 +7,12 @@ class QUIConfig
|
|||
{
|
||||
public:
|
||||
//全局图标
|
||||
static QChar IconMain; //标题栏左上角图标
|
||||
static QChar IconMenu; //下拉菜单图标
|
||||
static QChar IconMin; //最小化图标
|
||||
static QChar IconMax; //最大化图标
|
||||
static QChar IconNormal; //还原图标
|
||||
static QChar IconClose; //关闭图标
|
||||
static int IconMain; //标题栏左上角图标
|
||||
static int IconMenu; //下拉菜单图标
|
||||
static int IconMin; //最小化图标
|
||||
static int IconMax; //最大化图标
|
||||
static int IconNormal; //还原图标
|
||||
static int IconClose; //关闭图标
|
||||
|
||||
//全局字体
|
||||
static QString FontName; //全局字体名称
|
||||
|
|
|
@ -256,7 +256,7 @@ QString QUIDateSelect::getEndDateTime() const
|
|||
return this->endDateTime;
|
||||
}
|
||||
|
||||
void QUIDateSelect::setIconMain(const QChar &icon, quint32 size)
|
||||
void QUIDateSelect::setIconMain(int icon, quint32 size)
|
||||
{
|
||||
IconHelper::Instance()->setIcon(this->labIco, icon, size);
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ public:
|
|||
QString getEndDateTime() const;
|
||||
|
||||
public Q_SLOTS:
|
||||
void setIconMain(const QChar &icon, quint32 size = 12);
|
||||
void setIconMain(int icon, quint32 size = 12);
|
||||
void setFormat(const QString &format);
|
||||
};
|
||||
|
||||
|
|
|
@ -1,23 +1,24 @@
|
|||
#include "quihelper.h"
|
||||
|
||||
QString QUIHelper::getUuid()
|
||||
{
|
||||
QString uuid = QUuid::createUuid().toString();
|
||||
uuid = uuid.replace("{", "");
|
||||
uuid = uuid.replace("}", "");
|
||||
return uuid;
|
||||
}
|
||||
|
||||
int QUIHelper::getScreenIndex()
|
||||
{
|
||||
//需要对多个屏幕进行处理
|
||||
int screenIndex = -1;
|
||||
int screenIndex = 0;
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
|
||||
int screenCount = qApp->screens().count();
|
||||
#else
|
||||
int screenCount = qApp->desktop()->screenCount();
|
||||
#endif
|
||||
|
||||
if (screenCount > 1) {
|
||||
//找到当前鼠标所在屏幕
|
||||
QPoint pos = QCursor::pos();
|
||||
for (int i = 0; i < screenCount; ++i) {
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
|
||||
if (qApp->screens().at(i)->geometry().contains(pos)) {
|
||||
#else
|
||||
if (qApp->desktop()->screenGeometry(i).contains(pos)) {
|
||||
#endif
|
||||
screenIndex = i;
|
||||
break;
|
||||
}
|
||||
|
@ -26,18 +27,50 @@ int QUIHelper::getScreenIndex()
|
|||
return screenIndex;
|
||||
}
|
||||
|
||||
QRect QUIHelper::getScreenRect(bool available)
|
||||
{
|
||||
QRect rect;
|
||||
int screenIndex = QUIHelper::getScreenIndex();
|
||||
if (available) {
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
|
||||
rect = qApp->screens().at(screenIndex)->availableGeometry();
|
||||
#else
|
||||
rect = qApp->desktop()->availableGeometry(screenIndex);
|
||||
#endif
|
||||
} else {
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
|
||||
rect = qApp->screens().at(screenIndex)->geometry();
|
||||
#else
|
||||
rect = qApp->desktop()->screenGeometry(screenIndex);
|
||||
#endif
|
||||
}
|
||||
return rect;
|
||||
}
|
||||
|
||||
int QUIHelper::deskWidth()
|
||||
{
|
||||
int screenIndex = QUIHelper::getScreenIndex();
|
||||
int width = qApp->desktop()->availableGeometry(screenIndex).width();
|
||||
return width;
|
||||
return getScreenRect().width();
|
||||
}
|
||||
|
||||
int QUIHelper::deskHeight()
|
||||
{
|
||||
int screenIndex = QUIHelper::getScreenIndex();
|
||||
int height = qApp->desktop()->availableGeometry(screenIndex).height();
|
||||
return height;
|
||||
return getScreenRect().height();
|
||||
}
|
||||
|
||||
void QUIHelper::setFormInCenter(QWidget *form)
|
||||
{
|
||||
int formWidth = form->width();
|
||||
int formHeight = form->height();
|
||||
QRect rect = getScreenRect();
|
||||
int deskWidth = rect.width();
|
||||
int deskHeight = rect.height();
|
||||
QPoint movePoint(deskWidth / 2 - formWidth / 2 + rect.x(), deskHeight / 2 - formHeight / 2);
|
||||
form->move(movePoint);
|
||||
|
||||
//其他系统自动最大化
|
||||
#ifndef Q_OS_WIN
|
||||
QTimer::singleShot(100, form, SLOT(showMaximized()));
|
||||
#endif
|
||||
}
|
||||
|
||||
QString QUIHelper::appName()
|
||||
|
@ -64,11 +97,98 @@ QString QUIHelper::appPath()
|
|||
#endif
|
||||
}
|
||||
|
||||
QString QUIHelper::getUuid()
|
||||
{
|
||||
QString uuid = QUuid::createUuid().toString();
|
||||
uuid = uuid.replace("{", "");
|
||||
uuid = uuid.replace("}", "");
|
||||
return uuid;
|
||||
}
|
||||
|
||||
void QUIHelper::initRand()
|
||||
{
|
||||
//初始化随机数种子
|
||||
QTime t = QTime::currentTime();
|
||||
qsrand(t.msec() + t.second() * 1000);
|
||||
srand(t.msec() + t.second() * 1000);
|
||||
}
|
||||
|
||||
void QUIHelper::newDir(const QString &dirName)
|
||||
{
|
||||
QString strDir = dirName;
|
||||
|
||||
//如果路径中包含斜杠字符则说明是绝对路径
|
||||
//linux系统路径字符带有 / windows系统 路径字符带有 :/
|
||||
if (!strDir.startsWith("/") && !strDir.contains(":/")) {
|
||||
strDir = QString("%1/%2").arg(QUIHelper::appPath()).arg(strDir);
|
||||
}
|
||||
|
||||
QDir dir(strDir);
|
||||
if (!dir.exists()) {
|
||||
dir.mkpath(strDir);
|
||||
}
|
||||
}
|
||||
|
||||
void QUIHelper::sleep(int msec)
|
||||
{
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
void QUIHelper::setCode(bool utf8)
|
||||
{
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
|
||||
#if _MSC_VER
|
||||
QTextCodec *codec = QTextCodec::codecForName("gbk");
|
||||
#else
|
||||
QTextCodec *codec = QTextCodec::codecForName("utf-8");
|
||||
#endif
|
||||
QTextCodec::setCodecForLocale(codec);
|
||||
QTextCodec::setCodecForCStrings(codec);
|
||||
QTextCodec::setCodecForTr(codec);
|
||||
#else
|
||||
//如果想要控制台打印信息中文正常就注释掉这个设置
|
||||
if (utf8) {
|
||||
QTextCodec *codec = QTextCodec::codecForName("utf-8");
|
||||
QTextCodec::setCodecForLocale(codec);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void QUIHelper::setFont(const QString &ttfFile, const QString &fontName, int fontSize)
|
||||
{
|
||||
QFont font;
|
||||
font.setFamily(fontName);
|
||||
font.setPixelSize(fontSize);
|
||||
|
||||
//如果存在字体文件则设备字体文件中的字体
|
||||
//安卓版本和网页版本需要字体文件一起打包单独设置字体
|
||||
if (!ttfFile.isEmpty()) {
|
||||
QFontDatabase fontDb;
|
||||
int fontId = fontDb.addApplicationFont(ttfFile);
|
||||
if (fontId != -1) {
|
||||
QStringList androidFont = fontDb.applicationFontFamilies(fontId);
|
||||
if (androidFont.size() != 0) {
|
||||
font.setFamily(androidFont.at(0));
|
||||
font.setPixelSize(fontSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
qApp->setFont(font);
|
||||
}
|
||||
|
||||
void QUIHelper::setTranslator(const QString &qmFile)
|
||||
{
|
||||
QTranslator *translator = new QTranslator(qApp);
|
||||
translator->load(qmFile);
|
||||
qApp->installTranslator(translator);
|
||||
}
|
||||
|
||||
void QUIHelper::initDb(const QString &dbName)
|
||||
|
@ -122,14 +242,14 @@ bool QUIHelper::checkIniFile(const QString &iniFile)
|
|||
return true;
|
||||
}
|
||||
|
||||
void QUIHelper::setIconBtn(QAbstractButton *btn, const QString &png, const QChar &str)
|
||||
void QUIHelper::setIconBtn(QAbstractButton *btn, const QString &png, int icon)
|
||||
{
|
||||
int size = 16;
|
||||
int width = 18;
|
||||
int height = 18;
|
||||
QPixmap pix;
|
||||
if (QPixmap(png).isNull()) {
|
||||
pix = IconHelper::Instance()->getPixmap(QUIConfig::TextColor, str, size, width, height);
|
||||
pix = IconHelper::Instance()->getPixmap(QUIConfig::TextColor, icon, size, width, height);
|
||||
} else {
|
||||
pix = QPixmap(png);
|
||||
}
|
||||
|
@ -138,22 +258,6 @@ void QUIHelper::setIconBtn(QAbstractButton *btn, const QString &png, const QChar
|
|||
btn->setIcon(QIcon(pix));
|
||||
}
|
||||
|
||||
void QUIHelper::newDir(const QString &dirName)
|
||||
{
|
||||
QString strDir = dirName;
|
||||
|
||||
//如果路径中包含斜杠字符则说明是绝对路径
|
||||
//linux系统路径字符带有 / windows系统 路径字符带有 :/
|
||||
if (!strDir.startsWith("/") && !strDir.contains(":/")) {
|
||||
strDir = QString("%1/%2").arg(QUIHelper::appPath()).arg(strDir);
|
||||
}
|
||||
|
||||
QDir dir(strDir);
|
||||
if (!dir.exists()) {
|
||||
dir.mkpath(strDir);
|
||||
}
|
||||
}
|
||||
|
||||
void QUIHelper::writeInfo(const QString &info, bool needWrite, const QString &filePath)
|
||||
{
|
||||
if (!needWrite) {
|
||||
|
@ -231,80 +335,6 @@ void QUIHelper::setFramelessForm(QWidget *widgetMain, QWidget *widgetTitle,
|
|||
IconHelper::Instance()->setIcon(btnClose, QUIConfig::IconClose, QUIConfig::FontSize);
|
||||
}
|
||||
|
||||
void QUIHelper::setFormInCenter(QWidget *frm)
|
||||
{
|
||||
//增加了多屏幕的判断在哪个屏幕就显示在哪个屏幕
|
||||
int screenIndex = QUIHelper::getScreenIndex();
|
||||
int frmX = frm->width();
|
||||
int frmY = frm->height();
|
||||
QDesktopWidget w;
|
||||
QRect rect = w.availableGeometry(screenIndex);
|
||||
int deskWidth = rect.width();
|
||||
int deskHeight = rect.height();
|
||||
QPoint movePoint(deskWidth / 2 - frmX / 2 + rect.x(), deskHeight / 2 - frmY / 2);
|
||||
frm->move(movePoint);
|
||||
}
|
||||
|
||||
void QUIHelper::setTranslator(const QString &qmFile)
|
||||
{
|
||||
QTranslator *translator = new QTranslator(qApp);
|
||||
translator->load(qmFile);
|
||||
qApp->installTranslator(translator);
|
||||
}
|
||||
|
||||
void QUIHelper::setCode()
|
||||
{
|
||||
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
|
||||
#if _MSC_VER
|
||||
QTextCodec *codec = QTextCodec::codecForName("gbk");
|
||||
#else
|
||||
QTextCodec *codec = QTextCodec::codecForName("utf-8");
|
||||
#endif
|
||||
QTextCodec::setCodecForLocale(codec);
|
||||
QTextCodec::setCodecForCStrings(codec);
|
||||
QTextCodec::setCodecForTr(codec);
|
||||
#else
|
||||
QTextCodec *codec = QTextCodec::codecForName("utf-8");
|
||||
QTextCodec::setCodecForLocale(codec);
|
||||
#endif
|
||||
}
|
||||
|
||||
void QUIHelper::setFont(const QString &ttfFile, const QString &fontName, int fontSize)
|
||||
{
|
||||
QFont font;
|
||||
font.setFamily(fontName);
|
||||
font.setPixelSize(fontSize);
|
||||
|
||||
//如果存在字体文件则设备字体文件中的字体
|
||||
//安卓版本和网页版本需要字体文件一起打包单独设置字体
|
||||
if (!ttfFile.isEmpty()) {
|
||||
QFontDatabase fontDb;
|
||||
int fontId = fontDb.addApplicationFont(ttfFile);
|
||||
if (fontId != -1) {
|
||||
QStringList androidFont = fontDb.applicationFontFamilies(fontId);
|
||||
if (androidFont.size() != 0) {
|
||||
font.setFamily(androidFont.at(0));
|
||||
font.setPixelSize(fontSize);
|
||||
}
|
||||
}
|
||||
}
|
||||
qApp->setFont(font);
|
||||
}
|
||||
|
||||
void QUIHelper::sleep(int msec)
|
||||
{
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
void QUIHelper::setSystemDateTime(const QString &year, const QString &month, const QString &day, const QString &hour, const QString &min, const QString &sec)
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
|
@ -340,8 +370,10 @@ QString QUIHelper::getIP(const QString &url)
|
|||
{
|
||||
//取出IP地址
|
||||
QRegExp regExp("((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))");
|
||||
regExp.indexIn(url);
|
||||
return url.mid(url.indexOf(regExp), regExp.matchedLength());
|
||||
int start = regExp.indexIn(url);
|
||||
int length = regExp.matchedLength();
|
||||
QString ip = url.mid(start, length);
|
||||
return ip;
|
||||
}
|
||||
|
||||
bool QUIHelper::isIP(const QString &ip)
|
||||
|
@ -1180,7 +1212,7 @@ void QUIHelper::initTableView(QTableView *tableView, int rowHeight, bool headVis
|
|||
tableView->setSelectionMode(QAbstractItemView::SingleSelection);
|
||||
|
||||
//表头不可单击
|
||||
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
|
||||
tableView->horizontalHeader()->setSectionsClickable(false);
|
||||
#else
|
||||
tableView->horizontalHeader()->setClickable(false);
|
||||
|
|
|
@ -6,21 +6,32 @@
|
|||
class QUIHelper
|
||||
{
|
||||
public:
|
||||
//获取uuid
|
||||
static QString getUuid();
|
||||
//获取当前鼠标所在屏幕
|
||||
//获取当前鼠标所在屏幕索引+尺寸
|
||||
static int getScreenIndex();
|
||||
static QRect getScreenRect(bool available = true);
|
||||
|
||||
//桌面宽度高度
|
||||
//获取桌面宽度高度+居中显示
|
||||
static int deskWidth();
|
||||
static int deskHeight();
|
||||
static void setFormInCenter(QWidget *form);
|
||||
|
||||
//程序文件名称+当前所在路径
|
||||
static QString appName();
|
||||
static QString appPath();
|
||||
|
||||
//初始化随机数种子
|
||||
//获取uuid+初始化随机数种子+新建目录+延时
|
||||
static QString getUuid();
|
||||
static void initRand();
|
||||
static void newDir(const QString &dirName);
|
||||
static void sleep(int msec);
|
||||
|
||||
//设置编码
|
||||
static void setCode(bool utf8 = true);
|
||||
//设置字体
|
||||
static void setFont(const QString &ttfFile = ":/image/DroidSansFallback.ttf",
|
||||
const QString &fontName = "Microsoft Yahei", int fontSize = 12);
|
||||
//设置翻译文件
|
||||
static void setTranslator(const QString &qmFile = ":/image/qt_zh_CN.qm");
|
||||
|
||||
//初始化数据库
|
||||
static void initDb(const QString &dbName);
|
||||
|
@ -31,10 +42,7 @@ public:
|
|||
static bool checkIniFile(const QString &iniFile);
|
||||
|
||||
//设置图标到按钮
|
||||
static void setIconBtn(QAbstractButton *btn, const QString &png, const QChar &str);
|
||||
|
||||
//新建目录
|
||||
static void newDir(const QString &dirName);
|
||||
static void setIconBtn(QAbstractButton *btn, const QString &png, int icon);
|
||||
|
||||
//写入消息到额外的的消息日志文件
|
||||
static void writeInfo(const QString &info, bool needWrite = false, const QString &filePath = "log");
|
||||
|
@ -47,18 +55,6 @@ public:
|
|||
QLabel *labIco, QPushButton *btnClose,
|
||||
bool tool = true, bool top = true, bool menu = false);
|
||||
|
||||
//设置窗体居中显示
|
||||
static void setFormInCenter(QWidget *frm);
|
||||
//设置翻译文件
|
||||
static void setTranslator(const QString &qmFile = ":/image/qt_zh_CN.qm");
|
||||
//设置编码
|
||||
static void setCode();
|
||||
//设置字体
|
||||
static void setFont(const QString &ttfFile = ":/image/DroidSansFallback.ttf",
|
||||
const QString &fontName = "Microsoft Yahei", int fontSize = 12);
|
||||
|
||||
//设置延时
|
||||
static void sleep(int msec);
|
||||
//设置系统时间
|
||||
static void setSystemDateTime(const QString &year, const QString &month, const QString &day,
|
||||
const QString &hour, const QString &min, const QString &sec);
|
||||
|
|
|
@ -285,7 +285,7 @@ void QUIInputBox::on_btnMenu_Close_clicked()
|
|||
close();
|
||||
}
|
||||
|
||||
void QUIInputBox::setIconMain(const QChar &icon, quint32 size)
|
||||
void QUIInputBox::setIconMain(int icon, quint32 size)
|
||||
{
|
||||
IconHelper::Instance()->setIcon(this->labIco, icon, size);
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@ public:
|
|||
QString getValue()const;
|
||||
|
||||
public Q_SLOTS:
|
||||
void setIconMain(const QChar &icon, quint32 size = 12);
|
||||
void setIconMain(int icon, quint32 size = 12);
|
||||
void setParameter(const QString &title, int type = 0, int closeSec = 0,
|
||||
QString placeholderText = QString(), bool pwd = false,
|
||||
const QString &defaultValue = QString());
|
||||
|
|
|
@ -262,17 +262,17 @@ void QUIMessageBox::on_btnMenu_Close_clicked()
|
|||
close();
|
||||
}
|
||||
|
||||
void QUIMessageBox::setIconMain(const QChar &icon, quint32 size)
|
||||
void QUIMessageBox::setIconMain(int icon, quint32 size)
|
||||
{
|
||||
IconHelper::Instance()->setIcon(this->labIco, icon, size);
|
||||
}
|
||||
|
||||
void QUIMessageBox::setIconMsg(const QString &png, const QChar &str)
|
||||
void QUIMessageBox::setIconMsg(const QString &png, int icon)
|
||||
{
|
||||
//图片存在则取图片,不存在则取图形字体
|
||||
int size = this->labIcoMain->size().height();
|
||||
if (QImage(png).isNull()) {
|
||||
IconHelper::Instance()->setIcon(this->labIcoMain, str, size);
|
||||
IconHelper::Instance()->setIcon(this->labIcoMain, icon, size);
|
||||
} else {
|
||||
this->labIcoMain->setStyleSheet(QString("border-image:url(%1);").arg(png));
|
||||
}
|
||||
|
|
|
@ -56,8 +56,8 @@ private slots:
|
|||
void on_btnMenu_Close_clicked();
|
||||
|
||||
public Q_SLOTS:
|
||||
void setIconMain(const QChar &icon, quint32 size = 12);
|
||||
void setIconMsg(const QString &png, const QChar &str);
|
||||
void setIconMain(int icon, quint32 size = 12);
|
||||
void setIconMsg(const QString &png, int icon);
|
||||
void setMessage(const QString &msg, int type, int closeSec = 0);
|
||||
};
|
||||
|
||||
|
|
|
@ -198,7 +198,7 @@ void QUITipBox::on_btnMenu_Close_clicked()
|
|||
close();
|
||||
}
|
||||
|
||||
void QUITipBox::setIconMain(const QChar &icon, quint32 size)
|
||||
void QUITipBox::setIconMain(int icon, quint32 size)
|
||||
{
|
||||
IconHelper::Instance()->setIcon(this->labIco, icon, size);
|
||||
}
|
||||
|
@ -216,8 +216,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());
|
||||
|
||||
int screenIndex = QUIHelper::getScreenIndex();
|
||||
QRect rect = fullScreen ? qApp->desktop()->screenGeometry(screenIndex) : qApp->desktop()->availableGeometry(screenIndex);
|
||||
QRect rect = QUIHelper::getScreenRect(!fullScreen);
|
||||
int width = rect.width();
|
||||
int height = rect.height();
|
||||
int x = width - this->width() + rect.x();
|
||||
|
@ -235,8 +234,7 @@ void QUITipBox::setTip(const QString &title, const QString &tip, bool fullScreen
|
|||
|
||||
void QUITipBox::hide()
|
||||
{
|
||||
int screenIndex = QUIHelper::getScreenIndex();
|
||||
QRect rect = fullScreen ? qApp->desktop()->screenGeometry(screenIndex) : qApp->desktop()->availableGeometry(screenIndex);
|
||||
QRect rect = QUIHelper::getScreenRect(!fullScreen);
|
||||
int width = rect.width();
|
||||
int height = rect.height();
|
||||
int x = width - this->width() + rect.x();
|
||||
|
@ -245,7 +243,7 @@ void QUITipBox::hide()
|
|||
//启动动画
|
||||
animation->stop();
|
||||
animation->setStartValue(QPoint(x, y));
|
||||
animation->setEndValue(QPoint(x, qApp->desktop()->geometry().height()));
|
||||
animation->setEndValue(QPoint(x, QUIHelper::getScreenRect(false).height()));
|
||||
animation->start();
|
||||
}
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ private slots:
|
|||
void on_btnMenu_Close_clicked();
|
||||
|
||||
public Q_SLOTS:
|
||||
void setIconMain(const QChar &icon, quint32 size = 12);
|
||||
void setIconMain(int icon, quint32 size = 12);
|
||||
void setTip(const QString &title, const QString &tip, bool fullScreen = false, bool center = true, int closeSec = 0);
|
||||
void hide();
|
||||
};
|
||||
|
|
|
@ -271,7 +271,7 @@ void QUIWidget::changeStyle()
|
|||
emit changeStyle(qssFile);
|
||||
}
|
||||
|
||||
void QUIWidget::setIcon(QUIWidget::Widget widget, const QChar &icon, quint32 size)
|
||||
void QUIWidget::setIcon(QUIWidget::Widget widget, int icon, quint32 size)
|
||||
{
|
||||
if (widget == QUIWidget::Lab_Ico) {
|
||||
setIconMain(icon, size);
|
||||
|
@ -293,7 +293,7 @@ void QUIWidget::setIcon(QUIWidget::Widget widget, const QChar &icon, quint32 siz
|
|||
}
|
||||
}
|
||||
|
||||
void QUIWidget::setIconMain(const QChar &icon, quint32 size)
|
||||
void QUIWidget::setIconMain(int icon, quint32 size)
|
||||
{
|
||||
QUIConfig::IconMain = icon;
|
||||
IconHelper::Instance()->setIcon(this->labIco, icon, size);
|
||||
|
@ -418,8 +418,7 @@ void QUIWidget::on_btnMenu_Max_clicked()
|
|||
setIcon(QUIWidget::BtnMenu_Normal, QUIConfig::IconNormal);
|
||||
} else {
|
||||
location = this->geometry();
|
||||
int screenIndex = QUIHelper::getScreenIndex();
|
||||
this->setGeometry(qApp->desktop()->availableGeometry(screenIndex));
|
||||
this->setGeometry(QUIHelper::getScreenRect());
|
||||
setIcon(QUIWidget::BtnMenu_Max, QUIConfig::IconMax);
|
||||
}
|
||||
|
||||
|
|
|
@ -77,8 +77,8 @@ private slots:
|
|||
|
||||
public Q_SLOTS:
|
||||
//设置部件图标
|
||||
void setIcon(QUIWidget::Widget widget, const QChar &icon, quint32 size = 12);
|
||||
void setIconMain(const QChar &icon, quint32 size = 12);
|
||||
void setIcon(QUIWidget::Widget widget, int icon, quint32 size = 12);
|
||||
void setIconMain(int icon, quint32 size = 12);
|
||||
//设置部件图片
|
||||
void setPixmap(QUIWidget::Widget widget, const QString &file, const QSize &size = QSize(16, 16));
|
||||
//设置部件是否可见
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = countcode
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -39,7 +39,7 @@ QVariant SqlQueryModel::data(const QModelIndex &index, int role) const
|
|||
if (row == index.row()) {
|
||||
if (role == Qt::BackgroundRole) {
|
||||
value = QColor(property("hoverBgColor").toString());
|
||||
} else if (role == Qt::TextColorRole) {
|
||||
} else if (role == Qt::ForegroundRole) {
|
||||
value = QColor(property("hoverTextColor").toString());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui sql
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = dbpage
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = devicebutton
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -21,6 +21,7 @@ class DeviceSizeTable : public QTableWidget
|
|||
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(QColor bgColor READ getBgColor WRITE setBgColor)
|
||||
Q_PROPERTY(QColor chunkColor1 READ getChunkColor1 WRITE setChunkColor1)
|
||||
Q_PROPERTY(QColor chunkColor2 READ getChunkColor2 WRITE setChunkColor2)
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = devicesizetable
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -4,9 +4,10 @@
|
|||
#
|
||||
#-------------------------------------------------
|
||||
|
||||
QT += core gui network sql xml
|
||||
QT += core gui network
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = emailtool
|
||||
TEMPLATE = app
|
||||
|
@ -14,10 +15,10 @@ DESTDIR = $$PWD/../bin
|
|||
CONFIG += warn_off
|
||||
|
||||
SOURCES += main.cpp
|
||||
SOURCES += frmemailtool.cpp
|
||||
HEADERS += frmemailtool.h
|
||||
SOURCES += frmemailtool.cpp sendemailthread.cpp
|
||||
HEADERS += frmemailtool.h sendemailthread.h
|
||||
FORMS += frmemailtool.ui
|
||||
|
||||
include ($$PWD/sendemail/sendemail.pri)
|
||||
INCLUDEPATH += $$PWD
|
||||
INCLUDEPATH += $$PWD/sendemail
|
||||
INCLUDEPATH += $$PWD/../3rd_smtpclient
|
||||
include ($$PWD/../3rd_smtpclient/3rd_smtpclient.pri)
|
||||
|
|
|
@ -13,174 +13,180 @@
|
|||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="leftMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="labSenderAddr">
|
||||
<property name="text">
|
||||
<string>用户名:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="txtSenderAddr">
|
||||
<property name="text">
|
||||
<string>feiyangqingyun@126.com</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="labSenderPwd">
|
||||
<property name="text">
|
||||
<string>密码:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLineEdit" name="txtSenderPwd">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<widget class="QLabel" name="labServer">
|
||||
<property name="text">
|
||||
<string>服务器:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<widget class="QComboBox" name="cboxServer">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.163.com</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="2" column="4">
|
||||
<widget class="QPushButton" name="btnSend">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>发送</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.126.com</string>
|
||||
</property>
|
||||
<item row="1" column="3">
|
||||
<widget class="QComboBox" name="cboxPort">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>25</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>465</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>587</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.qq.com</string>
|
||||
</property>
|
||||
<item row="1" column="4">
|
||||
<widget class="QCheckBox" name="ckSSL">
|
||||
<property name="text">
|
||||
<string>SSL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smt.sina.com</string>
|
||||
</property>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLabel" name="labPort">
|
||||
<property name="text">
|
||||
<string>服务端口</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.sohu.com</string>
|
||||
</property>
|
||||
<item row="3" column="4">
|
||||
<widget class="QPushButton" name="btnSelect">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>浏览</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.139.com</string>
|
||||
</property>
|
||||
<item row="2" column="3">
|
||||
<widget class="QLineEdit" name="txtReceiverAddr">
|
||||
<property name="text">
|
||||
<string>feiyangqingyun@163.com;517216493@qq.com</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.189.com</string>
|
||||
</property>
|
||||
<item row="3" column="1" colspan="3">
|
||||
<widget class="QLineEdit" name="txtFileName"/>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="6">
|
||||
<widget class="QLabel" name="labPort">
|
||||
<property name="text">
|
||||
<string>端口:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="7">
|
||||
<widget class="QComboBox" name="cboxPort">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>25</string>
|
||||
</property>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="labTitle">
|
||||
<property name="text">
|
||||
<string>邮件标题</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>465</string>
|
||||
</property>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLineEdit" name="txtTitle">
|
||||
<property name="text">
|
||||
<string>测试邮件</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>587</string>
|
||||
</property>
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="cboxServer">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.163.com</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.126.com</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.qq.com</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smt.sina.com</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.sohu.com</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.139.com</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>smtp.189.com</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</widget>
|
||||
<item row="2" column="2">
|
||||
<widget class="QLabel" name="labReceiverAddr">
|
||||
<property name="text">
|
||||
<string>收件地址</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="labFileName">
|
||||
<property name="text">
|
||||
<string>选择附件</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="labServer">
|
||||
<property name="text">
|
||||
<string>服务地址</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="labSenderAddr">
|
||||
<property name="text">
|
||||
<string>用户名称</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="txtSenderAddr">
|
||||
<property name="text">
|
||||
<string>feiyangqingyun@126.com</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="labSenderPwd">
|
||||
<property name="text">
|
||||
<string>用户密码</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLineEdit" name="txtSenderPwd">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="8">
|
||||
<widget class="QCheckBox" name="ckSSL">
|
||||
<property name="text">
|
||||
<string>SSL</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="9">
|
||||
<widget class="QPushButton" name="btnSend">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>发送</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="labTitle">
|
||||
<property name="text">
|
||||
<string>标 题:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="labFileName">
|
||||
<property name="text">
|
||||
<string>附 件:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="labContent">
|
||||
<property name="text">
|
||||
<string>正 文:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="9">
|
||||
<widget class="QPushButton" name="btnSelect">
|
||||
<property name="cursor">
|
||||
<cursorShape>PointingHandCursor</cursorShape>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>浏览</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1" colspan="8">
|
||||
<widget class="QLineEdit" name="txtFileName"/>
|
||||
</item>
|
||||
<item row="5" column="1" colspan="9">
|
||||
<item>
|
||||
<widget class="QTextBrowser" name="txtContent">
|
||||
<property name="readOnly">
|
||||
<bool>false</bool>
|
||||
|
@ -189,35 +195,27 @@
|
|||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'宋体'; font-size:9pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">1</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、最短的爱情哲理小说:“</span><span style=" font-size:11pt;">你应该嫁给我啦?</span><span style=" font-family:'Times New Roman'; font-size:11pt;">” “ </span><span style=" font-size:11pt;">不</span><span style=" font-family:'Times New Roman'; font-size:11pt;">” </span><span style=" font-size:11pt;">于是他俩又继续幸福地生活在一起</span><span style=" font-family:'Times New Roman'; font-size:11pt;">!<br /></span><span style=" font-size:11pt;">2</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、近年来中国最精彩的写实小说,全文八个字:</span><span style=" font-family:'Times New Roman'; font-size:16pt; font-weight:600; font-style:italic; color:#ff007f;">此地钱多人傻速来</span><span style=" font-family:'Times New Roman'; font-size:11pt;"> 据说是发自杭州市宝石山下一出租房的汇款单上的简短附言,是该按摩女给家乡妹妹汇 款时随手涂鸦的,令无数专业作家汗颜!<br /></span><span style=" font-size:11pt;">3</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、最短的幽默小说 《夜》 男:疼么?女:恩!男:算了?女:别!</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">4</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、最短的荒诞小说:有一个面包走在街上,它觉得自己很饿,就把自己吃了。<br /></span><span style=" font-size:11pt;">5</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短言情小说:他死的那天,孩子出生了。<br /></span><span style=" font-size:11pt;">6</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短武侠小说:</span><span style=" font-family:'Times New Roman'; font-size:11pt; font-weight:600; color:#00aa00;">高手被豆腐砸死了</span><span style=" font-family:'Times New Roman'; font-size:11pt;">。<br /></span><span style=" font-size:11pt;">7</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短科幻小说:最后一个地球人坐在家里,突然响起了敲门声。<br /></span><span style=" font-size:11pt;">8</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短悬疑小说:生,死,生。<br /></span><span style=" font-size:11pt;">9</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短推理小说:他死了,一定曾经活过。 <br />1</span><span style=" font-size:11pt;">0</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短恐怖小说:惊醒,身边躺着自己的尸体。</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="3">
|
||||
<widget class="QLineEdit" name="txtTitle">
|
||||
<property name="text">
|
||||
<string>测试邮件</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<widget class="QLabel" name="labReceiverAddr">
|
||||
<property name="text">
|
||||
<string>收件人:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="5" colspan="5">
|
||||
<widget class="QLineEdit" name="txtReceiverAddr">
|
||||
<property name="text">
|
||||
<string>feiyangqingyun@163.com;517216493@qq.com</string>
|
||||
</style></head><body style=" font-family:'SimSun'; font-size:9.07563pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'宋体'; font-size:11pt;">1</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、最短的爱情哲理小说:“</span><span style=" font-family:'宋体'; font-size:11pt;">你应该嫁给我啦?</span><span style=" font-family:'Times New Roman'; font-size:11pt;">” “ </span><span style=" font-family:'宋体'; font-size:11pt;">不</span><span style=" font-family:'Times New Roman'; font-size:11pt;">” </span><span style=" font-family:'宋体'; font-size:11pt;">于是他俩又继续幸福地生活在一起</span><span style=" font-family:'Times New Roman'; font-size:11pt;">!<br /></span><span style=" font-family:'宋体'; font-size:11pt;">2</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、近年来中国最精彩的写实小说,全文八个字:</span><span style=" font-family:'Times New Roman'; font-size:16pt; font-weight:600; font-style:italic; color:#ff007f;">此地钱多人傻速来</span><span style=" font-family:'Times New Roman'; font-size:11pt;"> 据说是发自杭州市宝石山下一出租房的汇款单上的简短附言,是该按摩女给家乡妹妹汇 款时随手涂鸦的,令无数专业作家汗颜!<br /></span><span style=" font-family:'宋体'; font-size:11pt;">3</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、最短的幽默小说 《夜》 男:疼么?女:恩!男:算了?女:别!</span></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'宋体'; font-size:11pt;">4</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、最短的荒诞小说:有一个面包走在街上,它觉得自己很饿,就把自己吃了。<br /></span><span style=" font-family:'宋体'; font-size:11pt;">5</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短言情小说:他死的那天,孩子出生了。<br /></span><span style=" font-family:'宋体'; font-size:11pt;">6</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短武侠小说:</span><span style=" font-family:'Times New Roman'; font-size:11pt; font-weight:600; color:#00aa00;">高手被豆腐砸死了</span><span style=" font-family:'Times New Roman'; font-size:11pt;">。<br /></span><span style=" font-family:'宋体'; font-size:11pt;">7</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短科幻小说:最后一个地球人坐在家里,突然响起了敲门声。<br /></span><span style=" font-family:'宋体'; font-size:11pt;">8</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短悬疑小说:生,死,生。<br /></span><span style=" font-family:'宋体'; font-size:11pt;">9</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短推理小说:他死了,一定曾经活过。 <br />1</span><span style=" font-family:'宋体'; font-size:11pt;">0</span><span style=" font-family:'Times New Roman'; font-size:11pt;">、世界最短恐怖小说:惊醒,身边躺着自己的尸体。</span></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>txtSenderAddr</tabstop>
|
||||
<tabstop>txtSenderPwd</tabstop>
|
||||
<tabstop>cboxServer</tabstop>
|
||||
<tabstop>cboxPort</tabstop>
|
||||
<tabstop>ckSSL</tabstop>
|
||||
<tabstop>txtTitle</tabstop>
|
||||
<tabstop>txtReceiverAddr</tabstop>
|
||||
<tabstop>btnSend</tabstop>
|
||||
<tabstop>txtFileName</tabstop>
|
||||
<tabstop>btnSelect</tabstop>
|
||||
<tabstop>txtContent</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
|
@ -24,7 +24,7 @@ int main(int argc, char *argv[])
|
|||
#endif
|
||||
|
||||
frmEmailTool w;
|
||||
w.setWindowTitle("邮件发送工具");
|
||||
w.setWindowTitle("串口调试助手 V2021 (QQ: 517216493 WX: feiyangqingyun)");
|
||||
w.show();
|
||||
|
||||
return a.exec();
|
||||
|
|
|
@ -1,222 +0,0 @@
|
|||
#include "mimemessage.h"
|
||||
|
||||
#include <QDateTime>
|
||||
#include "quotedprintable.h"
|
||||
#include <typeinfo>
|
||||
|
||||
MimeMessage::MimeMessage(bool createAutoMimeContent) :
|
||||
hEncoding(MimePart::_8Bit)
|
||||
{
|
||||
if (createAutoMimeContent) {
|
||||
this->content = new MimeMultiPart();
|
||||
}
|
||||
}
|
||||
|
||||
MimeMessage::~MimeMessage()
|
||||
{
|
||||
}
|
||||
|
||||
MimePart &MimeMessage::getContent()
|
||||
{
|
||||
return *content;
|
||||
}
|
||||
|
||||
void MimeMessage::setContent(MimePart *content)
|
||||
{
|
||||
this->content = content;
|
||||
}
|
||||
|
||||
void MimeMessage::setSender(EmailAddress *e)
|
||||
{
|
||||
this->sender = e;
|
||||
}
|
||||
|
||||
void MimeMessage::addRecipient(EmailAddress *rcpt, RecipientType type)
|
||||
{
|
||||
switch (type) {
|
||||
case To:
|
||||
recipientsTo << rcpt;
|
||||
break;
|
||||
|
||||
case Cc:
|
||||
recipientsCc << rcpt;
|
||||
break;
|
||||
|
||||
case Bcc:
|
||||
recipientsBcc << rcpt;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void MimeMessage::addTo(EmailAddress *rcpt)
|
||||
{
|
||||
this->recipientsTo << rcpt;
|
||||
}
|
||||
|
||||
void MimeMessage::addCc(EmailAddress *rcpt)
|
||||
{
|
||||
this->recipientsCc << rcpt;
|
||||
}
|
||||
|
||||
void MimeMessage::addBcc(EmailAddress *rcpt)
|
||||
{
|
||||
this->recipientsBcc << rcpt;
|
||||
}
|
||||
|
||||
void MimeMessage::setSubject(const QString &subject)
|
||||
{
|
||||
this->subject = subject;
|
||||
}
|
||||
|
||||
void MimeMessage::addPart(MimePart *part)
|
||||
{
|
||||
if (typeid(*content) == typeid(MimeMultiPart)) {
|
||||
((MimeMultiPart *) content)->addPart(part);
|
||||
};
|
||||
}
|
||||
|
||||
void MimeMessage::setHeaderEncoding(MimePart::Encoding hEnc)
|
||||
{
|
||||
this->hEncoding = hEnc;
|
||||
}
|
||||
|
||||
const EmailAddress &MimeMessage::getSender() const
|
||||
{
|
||||
return *sender;
|
||||
}
|
||||
|
||||
const QList<EmailAddress *> &MimeMessage::getRecipients(RecipientType type) const
|
||||
{
|
||||
switch (type) {
|
||||
default:
|
||||
case To:
|
||||
return recipientsTo;
|
||||
|
||||
case Cc:
|
||||
return recipientsCc;
|
||||
|
||||
case Bcc:
|
||||
return recipientsBcc;
|
||||
}
|
||||
}
|
||||
|
||||
const QString &MimeMessage::getSubject() const
|
||||
{
|
||||
return subject;
|
||||
}
|
||||
|
||||
const QList<MimePart *> &MimeMessage::getParts() const
|
||||
{
|
||||
if (typeid(*content) == typeid(MimeMultiPart)) {
|
||||
return ((MimeMultiPart *) content)->getParts();
|
||||
} else {
|
||||
QList<MimePart *> *res = new QList<MimePart *>();
|
||||
res->append(content);
|
||||
return *res;
|
||||
}
|
||||
}
|
||||
|
||||
QString MimeMessage::toString()
|
||||
{
|
||||
QString mime;
|
||||
|
||||
mime = "From:";
|
||||
|
||||
if (sender->getName() != "") {
|
||||
switch (hEncoding) {
|
||||
case MimePart::Base64:
|
||||
mime += " =?utf-8?B?" + QByteArray().append(sender->getName()).toBase64() + "?=";
|
||||
break;
|
||||
|
||||
case MimePart::QuotedPrintable:
|
||||
mime += " =?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append(sender->getName())).replace(' ', "_").replace(':', "=3A") + "?=";
|
||||
break;
|
||||
|
||||
default:
|
||||
mime += " " + sender->getName();
|
||||
}
|
||||
}
|
||||
|
||||
mime += " <" + sender->getAddress() + ">\r\n";
|
||||
|
||||
mime += "To:";
|
||||
QList<EmailAddress *>::iterator it;
|
||||
int i;
|
||||
|
||||
for (i = 0, it = recipientsTo.begin(); it != recipientsTo.end(); ++it, ++i) {
|
||||
if (i != 0) {
|
||||
mime += ",";
|
||||
}
|
||||
|
||||
if ((*it)->getName() != "") {
|
||||
switch (hEncoding) {
|
||||
case MimePart::Base64:
|
||||
mime += " =?utf-8?B?" + QByteArray().append((*it)->getName()).toBase64() + "?=";
|
||||
break;
|
||||
|
||||
case MimePart::QuotedPrintable:
|
||||
mime += " =?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append((*it)->getName())).replace(' ', "_").replace(':', "=3A") + "?=";
|
||||
break;
|
||||
|
||||
default:
|
||||
mime += " " + (*it)->getName();
|
||||
}
|
||||
}
|
||||
|
||||
mime += " <" + (*it)->getAddress() + ">";
|
||||
}
|
||||
|
||||
mime += "\r\n";
|
||||
|
||||
if (recipientsCc.size() != 0) {
|
||||
mime += "Cc:";
|
||||
}
|
||||
|
||||
for (i = 0, it = recipientsCc.begin(); it != recipientsCc.end(); ++it, ++i) {
|
||||
if (i != 0) {
|
||||
mime += ",";
|
||||
}
|
||||
|
||||
if ((*it)->getName() != "") {
|
||||
switch (hEncoding) {
|
||||
case MimePart::Base64:
|
||||
mime += " =?utf-8?B?" + QByteArray().append((*it)->getName()).toBase64() + "?=";
|
||||
break;
|
||||
|
||||
case MimePart::QuotedPrintable:
|
||||
mime += " =?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append((*it)->getName())).replace(' ', "_").replace(':', "=3A") + "?=";
|
||||
break;
|
||||
|
||||
default:
|
||||
mime += " " + (*it)->getName();
|
||||
}
|
||||
}
|
||||
|
||||
mime += " <" + (*it)->getAddress() + ">";
|
||||
}
|
||||
|
||||
if (recipientsCc.size() != 0) {
|
||||
mime += "\r\n";
|
||||
}
|
||||
|
||||
mime += "Subject: ";
|
||||
|
||||
switch (hEncoding) {
|
||||
case MimePart::Base64:
|
||||
mime += "=?utf-8?B?" + QByteArray().append(subject).toBase64() + "?=";
|
||||
break;
|
||||
|
||||
case MimePart::QuotedPrintable:
|
||||
mime += "=?utf-8?Q?" + QuotedPrintable::encode(QByteArray().append(subject)).replace(' ', "_").replace(':', "=3A") + "?=";
|
||||
break;
|
||||
|
||||
default:
|
||||
mime += subject;
|
||||
}
|
||||
|
||||
mime += "\r\n";
|
||||
mime += "MIME-Version: 1.0\r\n";
|
||||
|
||||
mime += content->toString();
|
||||
return mime;
|
||||
}
|
|
@ -1,67 +0,0 @@
|
|||
#include "mimemultipart.h"
|
||||
#include <QTime>
|
||||
#include <QCryptographicHash>
|
||||
|
||||
const QString MULTI_PART_NAMES[] = {
|
||||
"multipart/mixed", // Mixed
|
||||
"multipart/digest", // Digest
|
||||
"multipart/alternative", // Alternative
|
||||
"multipart/related", // Related
|
||||
"multipart/report", // Report
|
||||
"multipart/signed", // Signed
|
||||
"multipart/encrypted" // Encrypted
|
||||
};
|
||||
|
||||
MimeMultiPart::MimeMultiPart(MultiPartType type)
|
||||
{
|
||||
this->type = type;
|
||||
this->cType = MULTI_PART_NAMES[this->type];
|
||||
this->cEncoding = _8Bit;
|
||||
|
||||
QCryptographicHash md5(QCryptographicHash::Md5);
|
||||
md5.addData(QByteArray().append(qrand()));
|
||||
cBoundary = md5.result().toHex();
|
||||
}
|
||||
|
||||
MimeMultiPart::~MimeMultiPart()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MimeMultiPart::addPart(MimePart *part)
|
||||
{
|
||||
parts.append(part);
|
||||
}
|
||||
|
||||
const QList<MimePart *> &MimeMultiPart::getParts() const
|
||||
{
|
||||
return parts;
|
||||
}
|
||||
|
||||
void MimeMultiPart::prepare()
|
||||
{
|
||||
QList<MimePart *>::iterator it;
|
||||
|
||||
content = "";
|
||||
|
||||
for (it = parts.begin(); it != parts.end(); it++) {
|
||||
content += "--" + cBoundary + "\r\n";
|
||||
(*it)->prepare();
|
||||
content += (*it)->toString();
|
||||
};
|
||||
|
||||
content += "--" + cBoundary + "--\r\n";
|
||||
|
||||
MimePart::prepare();
|
||||
}
|
||||
|
||||
void MimeMultiPart::setMimeType(const MultiPartType type)
|
||||
{
|
||||
this->type = type;
|
||||
this->cType = MULTI_PART_NAMES[type];
|
||||
}
|
||||
|
||||
MimeMultiPart::MultiPartType MimeMultiPart::getMimeType() const
|
||||
{
|
||||
return type;
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
#include "sendemailthread.h"
|
||||
#include "sendemail/smtpmime.h"
|
||||
#include "smtpmime.h"
|
||||
|
||||
#pragma execution_character_set("utf-8")
|
||||
#define TIMEMS qPrintable(QTime::currentTime().toString("hh:mm:ss zzz"))
|
|
@ -1,6 +1,13 @@
|
|||
#-------------------------------------------------
|
||||
#
|
||||
# Project created by QtCreator 2019-02-16T15:08:47
|
||||
#
|
||||
#-------------------------------------------------
|
||||
|
||||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
android {QT += androidextras}
|
||||
|
||||
TARGET = ffmpegdemo
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
#pragma execution_character_set("utf-8")
|
||||
#include "widget.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QTextCodec>
|
||||
#include <QDesktopWidget>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
@ -35,12 +33,5 @@ int main(int argc, char *argv[])
|
|||
w.setWindowTitle("视频流播放ffmpeg内核 (QQ: 517216493)");
|
||||
w.show();
|
||||
|
||||
//居中显示窗体
|
||||
QDesktopWidget deskWidget;
|
||||
int deskWidth = deskWidget.availableGeometry().width();
|
||||
int deskHeight = deskWidget.availableGeometry().height();
|
||||
QPoint movePoint(deskWidth / 2 - w.width() / 2, deskHeight / 2 - w.height() / 2);
|
||||
w.move(movePoint);
|
||||
|
||||
return a.exec();
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = flatui
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
#include "ui_frmflatui.h"
|
||||
#include "flatui.h"
|
||||
#include "qdebug.h"
|
||||
#include "qdesktopwidget.h"
|
||||
#include "qdatetime.h"
|
||||
|
||||
frmFlatUI::frmFlatUI(QWidget *parent) : QWidget(parent), ui(new Ui::frmFlatUI)
|
||||
|
@ -58,7 +57,7 @@ void frmFlatUI::initForm()
|
|||
FlatUI::setScrollBarQss(ui->verticalScrollBar, 8, 120, 20, "#606060", "#34495E", "#1ABC9C", "#E74C3C");
|
||||
|
||||
//设置列数和列宽
|
||||
int width = qApp->desktop()->availableGeometry().width() - 120;
|
||||
int width = 1920;
|
||||
ui->tableWidget->setColumnCount(5);
|
||||
ui->tableWidget->setColumnWidth(0, width * 0.06);
|
||||
ui->tableWidget->setColumnWidth(1, width * 0.10);
|
||||
|
@ -82,7 +81,6 @@ void frmFlatUI::initForm()
|
|||
|
||||
for (int i = 0; i < 300; i++) {
|
||||
ui->tableWidget->setRowHeight(i, 24);
|
||||
|
||||
QTableWidgetItem *itemDeviceID = new QTableWidgetItem(QString::number(i + 1));
|
||||
QTableWidgetItem *itemDeviceName = new QTableWidgetItem(QString("测试设备%1").arg(i + 1));
|
||||
QTableWidgetItem *itemDeviceAddr = new QTableWidgetItem(QString::number(i + 1));
|
||||
|
@ -95,5 +93,4 @@ void frmFlatUI::initForm()
|
|||
ui->tableWidget->setItem(i, 3, itemContent);
|
||||
ui->tableWidget->setItem(i, 4, itemTime);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -9,7 +9,7 @@ int main(int argc, char *argv[])
|
|||
QApplication a(argc, argv);
|
||||
a.setFont(QFont("Microsoft Yahei", 9));
|
||||
|
||||
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
|
||||
#if _MSC_VER
|
||||
QTextCodec *codec = QTextCodec::codecForName("gbk");
|
||||
#else
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = framelesswidget
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -36,7 +36,7 @@ void frmFramelessWidget::initWidget(QWidget *w)
|
|||
|
||||
//设置下背景颜色区别看
|
||||
QPalette palette = w->palette();
|
||||
palette.setBrush(QPalette::Background, QColor(162, 121, 197));
|
||||
palette.setBrush(QPalette::Window, QColor(162, 121, 197));
|
||||
w->setPalette(palette);
|
||||
|
||||
QPushButton *btn = new QPushButton(w);
|
||||
|
|
|
@ -9,7 +9,7 @@ int main(int argc, char *argv[])
|
|||
QApplication a(argc, argv);
|
||||
a.setFont(QFont("Microsoft Yahei", 9));
|
||||
|
||||
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
|
||||
#if _MSC_VER
|
||||
QTextCodec *codec = QTextCodec::codecForName("gbk");
|
||||
#else
|
||||
|
|
|
@ -13,13 +13,19 @@
|
|||
#include "qtimer.h"
|
||||
#include "qdatetime.h"
|
||||
#include "qapplication.h"
|
||||
#include "qdesktopwidget.h"
|
||||
#include "qdesktopservices.h"
|
||||
#include "qfiledialog.h"
|
||||
#include "qurl.h"
|
||||
#include "qdebug.h"
|
||||
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
|
||||
#include "qscreen.h"
|
||||
#define deskGeometry qApp->primaryScreen()->geometry()
|
||||
#define deskGeometry2 qApp->primaryScreen()->availableGeometry()
|
||||
#else
|
||||
#include "qdesktopwidget.h"
|
||||
#define deskGeometry qApp->desktop()->geometry()
|
||||
#define deskGeometry2 qApp->desktop()->availableGeometry()
|
||||
#endif
|
||||
|
||||
QScopedPointer<GifWidget> GifWidget::self;
|
||||
|
@ -267,7 +273,7 @@ void GifWidget::saveImage()
|
|||
return;
|
||||
}
|
||||
|
||||
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
|
||||
//由于qt4没有RGBA8888,采用最接近RGBA8888的是ARGB32,颜色会有点偏差
|
||||
QPixmap pix = QPixmap::grabWindow(0, x() + rectGif.x(), y() + rectGif.y(), rectGif.width(), rectGif.height());
|
||||
QImage image = pix.toImage().convertToFormat(QImage::Format_ARGB32);
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = gifwidget
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -11,7 +11,7 @@ int main(int argc, char *argv[])
|
|||
a.setFont(QFont("Microsoft Yahei", 9));
|
||||
a.setWindowIcon(QIcon(":/image/gifwidget.ico"));
|
||||
|
||||
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
|
||||
#if _MSC_VER
|
||||
QTextCodec *codec = QTextCodec::codecForName("gbk");
|
||||
#else
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = imageswitch
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -24,6 +24,7 @@ class IPAddress : public QWidget
|
|||
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(QString ip READ getIP WRITE setIP)
|
||||
|
||||
public:
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = ipaddress
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -25,6 +25,7 @@ class LightButton : public QWidget
|
|||
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PROPERTY(QString text READ getText WRITE setText)
|
||||
Q_PROPERTY(QColor textColor READ getTextColor WRITE setTextColor)
|
||||
Q_PROPERTY(QColor alarmColor READ getAlarmColor WRITE setAlarmColor)
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = lightbutton
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = lineeditnext
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -4,14 +4,13 @@
|
|||
#include "qmutex.h"
|
||||
#include "qmenu.h"
|
||||
#include "qapplication.h"
|
||||
#include "qdesktopwidget.h"
|
||||
#include "qdebug.h"
|
||||
|
||||
QScopedPointer<TrayIcon> TrayIcon::self;
|
||||
TrayIcon *TrayIcon::Instance()
|
||||
{
|
||||
if (self.isNull()) {
|
||||
QMutex mutex;
|
||||
static QMutex mutex;
|
||||
QMutexLocker locker(&mutex);
|
||||
if (self.isNull()) {
|
||||
self.reset(new TrayIcon);
|
||||
|
@ -27,21 +26,21 @@ TrayIcon::TrayIcon(QObject *parent) : QObject(parent)
|
|||
trayIcon = new QSystemTrayIcon(this);
|
||||
connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
|
||||
this, SLOT(iconIsActived(QSystemTrayIcon::ActivationReason)));
|
||||
menu = new QMenu(QApplication::desktop());
|
||||
menu = new QMenu;
|
||||
exitDirect = true;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
|
||||
/**
|
||||
* 托盘图标控件 作者:feiyangqingyun(QQ:517216493) 2017-1-8
|
||||
* 1:可设置托盘图标对应所属主窗体
|
||||
* 2:可设置托盘图标
|
||||
* 3:可设置提示信息
|
||||
* 4:自带右键菜单
|
||||
* 1. 可设置托盘图标对应所属主窗体
|
||||
* 2. 可设置托盘图标
|
||||
* 3. 可设置提示信息
|
||||
* 4. 自带右键菜单
|
||||
*/
|
||||
|
||||
#include <QObject>
|
||||
|
@ -15,13 +15,7 @@
|
|||
class QMenu;
|
||||
|
||||
#ifdef quc
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
|
||||
#include <QtDesigner/QDesignerExportWidget>
|
||||
#else
|
||||
#include <QtUiPlugin/QDesignerExportWidget>
|
||||
#endif
|
||||
|
||||
class QDESIGNER_WIDGET_EXPORT TrayIcon : public QObject
|
||||
class Q_DECL_EXPORT TrayIcon : public QObject
|
||||
#else
|
||||
class TrayIcon : public QObject
|
||||
#endif
|
||||
|
|
|
@ -235,45 +235,45 @@ int LunarCalendarInfo::getMonthDays(int year, int month)
|
|||
int loopDay = isLoopYear(year) ? 1 : 0;
|
||||
|
||||
switch (month) {
|
||||
case 1:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 2:
|
||||
countDay = 28 + loopDay;
|
||||
break;
|
||||
case 3:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 4:
|
||||
countDay = 30;
|
||||
break;
|
||||
case 5:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 6:
|
||||
countDay = 30;
|
||||
break;
|
||||
case 7:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 8:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 9:
|
||||
countDay = 30;
|
||||
break;
|
||||
case 10:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 11:
|
||||
countDay = 30;
|
||||
break;
|
||||
case 12:
|
||||
countDay = 31;
|
||||
break;
|
||||
default:
|
||||
countDay = 30;
|
||||
break;
|
||||
case 1:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 2:
|
||||
countDay = 28 + loopDay;
|
||||
break;
|
||||
case 3:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 4:
|
||||
countDay = 30;
|
||||
break;
|
||||
case 5:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 6:
|
||||
countDay = 30;
|
||||
break;
|
||||
case 7:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 8:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 9:
|
||||
countDay = 30;
|
||||
break;
|
||||
case 10:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 11:
|
||||
countDay = 30;
|
||||
break;
|
||||
case 12:
|
||||
countDay = 31;
|
||||
break;
|
||||
default:
|
||||
countDay = 30;
|
||||
break;
|
||||
}
|
||||
|
||||
return countDay;
|
||||
|
@ -286,45 +286,45 @@ int LunarCalendarInfo::getTotalMonthDays(int year, int month)
|
|||
int loopDay = isLoopYear(year) ? 1 : 0;
|
||||
|
||||
switch (month) {
|
||||
case 1:
|
||||
countDay = 0;
|
||||
break;
|
||||
case 2:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 3:
|
||||
countDay = 59 + loopDay;
|
||||
break;
|
||||
case 4:
|
||||
countDay = 90 + loopDay;
|
||||
break;
|
||||
case 5:
|
||||
countDay = 120 + loopDay;
|
||||
break;
|
||||
case 6:
|
||||
countDay = 151 + loopDay;
|
||||
break;
|
||||
case 7:
|
||||
countDay = 181 + loopDay;
|
||||
break;
|
||||
case 8:
|
||||
countDay = 212 + loopDay;
|
||||
break;
|
||||
case 9:
|
||||
countDay = 243 + loopDay;
|
||||
break;
|
||||
case 10:
|
||||
countDay = 273 + loopDay;
|
||||
break;
|
||||
case 11:
|
||||
countDay = 304 + loopDay;
|
||||
break;
|
||||
case 12:
|
||||
countDay = 334 + loopDay;
|
||||
break;
|
||||
default:
|
||||
countDay = 0;
|
||||
break;
|
||||
case 1:
|
||||
countDay = 0;
|
||||
break;
|
||||
case 2:
|
||||
countDay = 31;
|
||||
break;
|
||||
case 3:
|
||||
countDay = 59 + loopDay;
|
||||
break;
|
||||
case 4:
|
||||
countDay = 90 + loopDay;
|
||||
break;
|
||||
case 5:
|
||||
countDay = 120 + loopDay;
|
||||
break;
|
||||
case 6:
|
||||
countDay = 151 + loopDay;
|
||||
break;
|
||||
case 7:
|
||||
countDay = 181 + loopDay;
|
||||
break;
|
||||
case 8:
|
||||
countDay = 212 + loopDay;
|
||||
break;
|
||||
case 9:
|
||||
countDay = 243 + loopDay;
|
||||
break;
|
||||
case 10:
|
||||
countDay = 273 + loopDay;
|
||||
break;
|
||||
case 11:
|
||||
countDay = 304 + loopDay;
|
||||
break;
|
||||
case 12:
|
||||
countDay = 334 + loopDay;
|
||||
break;
|
||||
default:
|
||||
countDay = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return countDay;
|
||||
|
@ -347,89 +347,89 @@ QString LunarCalendarInfo::getHoliday(int month, int day)
|
|||
QString strHoliday;
|
||||
|
||||
switch (temp) {
|
||||
case 0x0101:
|
||||
strHoliday = "元旦";
|
||||
break;
|
||||
case 0x020E:
|
||||
strHoliday = "情人节";
|
||||
break;
|
||||
case 0x0303:
|
||||
strHoliday = "爱耳日";
|
||||
break;
|
||||
case 0x0305:
|
||||
strHoliday = "志愿者服务日";
|
||||
break;
|
||||
case 0x0308:
|
||||
strHoliday = "妇女节";
|
||||
break;
|
||||
case 0x0309:
|
||||
strHoliday = "保护母亲河";
|
||||
break;
|
||||
case 0x030C:
|
||||
strHoliday = "植树节";
|
||||
break;
|
||||
case 0x030F:
|
||||
strHoliday = "消费者权益日";
|
||||
break;
|
||||
case 0x0401:
|
||||
strHoliday = "愚人节";
|
||||
break;
|
||||
case 0x0501:
|
||||
strHoliday = "劳动节";
|
||||
break;
|
||||
case 0x0504:
|
||||
strHoliday = "青年节";
|
||||
break;
|
||||
case 0x0601:
|
||||
strHoliday = "儿童节";
|
||||
break;
|
||||
case 0x0606:
|
||||
strHoliday = "全国爱眼日";
|
||||
break;
|
||||
case 0x0701:
|
||||
strHoliday = "建党节";
|
||||
break;
|
||||
case 0x0707:
|
||||
strHoliday = "抗战纪念日";
|
||||
break;
|
||||
case 0x0801:
|
||||
strHoliday = "建军节";
|
||||
break;
|
||||
case 0x090A:
|
||||
strHoliday = "教师节";
|
||||
break;
|
||||
case 0x0910:
|
||||
strHoliday = "脑健康日";
|
||||
break;
|
||||
case 0x0914:
|
||||
strHoliday = "爱牙日";
|
||||
break;
|
||||
case 0x0A01:
|
||||
strHoliday = "国庆节";
|
||||
break;
|
||||
case 0x0A0A:
|
||||
strHoliday = "高血压日";
|
||||
break;
|
||||
case 0x0A1C:
|
||||
strHoliday = "男性健康日";
|
||||
break;
|
||||
case 0x0B08:
|
||||
strHoliday = "记者节";
|
||||
break;
|
||||
case 0x0B09:
|
||||
strHoliday = "消防宣传日";
|
||||
break;
|
||||
case 0x0C04:
|
||||
strHoliday = "法制宣传日";
|
||||
break;
|
||||
case 0x0C18:
|
||||
strHoliday = "平安夜";
|
||||
break;
|
||||
case 0x0C19:
|
||||
strHoliday = "圣诞节";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case 0x0101:
|
||||
strHoliday = "元旦";
|
||||
break;
|
||||
case 0x020E:
|
||||
strHoliday = "情人节";
|
||||
break;
|
||||
case 0x0303:
|
||||
strHoliday = "爱耳日";
|
||||
break;
|
||||
case 0x0305:
|
||||
strHoliday = "志愿者服务日";
|
||||
break;
|
||||
case 0x0308:
|
||||
strHoliday = "妇女节";
|
||||
break;
|
||||
case 0x0309:
|
||||
strHoliday = "保护母亲河";
|
||||
break;
|
||||
case 0x030C:
|
||||
strHoliday = "植树节";
|
||||
break;
|
||||
case 0x030F:
|
||||
strHoliday = "消费者权益日";
|
||||
break;
|
||||
case 0x0401:
|
||||
strHoliday = "愚人节";
|
||||
break;
|
||||
case 0x0501:
|
||||
strHoliday = "劳动节";
|
||||
break;
|
||||
case 0x0504:
|
||||
strHoliday = "青年节";
|
||||
break;
|
||||
case 0x0601:
|
||||
strHoliday = "儿童节";
|
||||
break;
|
||||
case 0x0606:
|
||||
strHoliday = "全国爱眼日";
|
||||
break;
|
||||
case 0x0701:
|
||||
strHoliday = "建党节";
|
||||
break;
|
||||
case 0x0707:
|
||||
strHoliday = "抗战纪念日";
|
||||
break;
|
||||
case 0x0801:
|
||||
strHoliday = "建军节";
|
||||
break;
|
||||
case 0x090A:
|
||||
strHoliday = "教师节";
|
||||
break;
|
||||
case 0x0910:
|
||||
strHoliday = "脑健康日";
|
||||
break;
|
||||
case 0x0914:
|
||||
strHoliday = "爱牙日";
|
||||
break;
|
||||
case 0x0A01:
|
||||
strHoliday = "国庆节";
|
||||
break;
|
||||
case 0x0A0A:
|
||||
strHoliday = "高血压日";
|
||||
break;
|
||||
case 0x0A1C:
|
||||
strHoliday = "男性健康日";
|
||||
break;
|
||||
case 0x0B08:
|
||||
strHoliday = "记者节";
|
||||
break;
|
||||
case 0x0B09:
|
||||
strHoliday = "消防宣传日";
|
||||
break;
|
||||
case 0x0C04:
|
||||
strHoliday = "法制宣传日";
|
||||
break;
|
||||
case 0x0C18:
|
||||
strHoliday = "平安夜";
|
||||
break;
|
||||
case 0x0C19:
|
||||
strHoliday = "圣诞节";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return strHoliday;
|
||||
|
@ -466,35 +466,35 @@ QString LunarCalendarInfo::getLunarFestival(int month, int day)
|
|||
QString strFestival;
|
||||
|
||||
switch (temp) {
|
||||
case 0x0101:
|
||||
strFestival = "春节";
|
||||
break;
|
||||
case 0x010F:
|
||||
strFestival = "元宵节";
|
||||
break;
|
||||
case 0x0202:
|
||||
strFestival = "龙抬头";
|
||||
break;
|
||||
case 0x0505:
|
||||
strFestival = "端午节";
|
||||
break;
|
||||
case 0x0707:
|
||||
strFestival = "七夕节";
|
||||
break;
|
||||
case 0x080F:
|
||||
strFestival = "中秋节";
|
||||
break;
|
||||
case 0x0909:
|
||||
strFestival = "重阳节";
|
||||
break;
|
||||
case 0x0C08:
|
||||
strFestival = "腊八节";
|
||||
break;
|
||||
case 0x0C1E:
|
||||
strFestival = "除夕";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case 0x0101:
|
||||
strFestival = "春节";
|
||||
break;
|
||||
case 0x010F:
|
||||
strFestival = "元宵节";
|
||||
break;
|
||||
case 0x0202:
|
||||
strFestival = "龙抬头";
|
||||
break;
|
||||
case 0x0505:
|
||||
strFestival = "端午节";
|
||||
break;
|
||||
case 0x0707:
|
||||
strFestival = "七夕节";
|
||||
break;
|
||||
case 0x080F:
|
||||
strFestival = "中秋节";
|
||||
break;
|
||||
case 0x0909:
|
||||
strFestival = "重阳节";
|
||||
break;
|
||||
case 0x0C08:
|
||||
strFestival = "腊八节";
|
||||
break;
|
||||
case 0x0C1E:
|
||||
strFestival = "除夕";
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return strFestival;
|
||||
|
@ -641,7 +641,7 @@ void LunarCalendarInfo::getLunarCalendarInfo(int year, int month, int day,
|
|||
//记录大小月的天数 29或30
|
||||
int monthCount = 0;
|
||||
|
||||
if(((lunarCalendarTable.at(year - 1901) & 0x0060) >> 5) == 1) {
|
||||
if (((lunarCalendarTable.at(year - 1901) & 0x0060) >> 5) == 1) {
|
||||
springOffset = (lunarCalendarTable.at(year - 1901) & 0x001F) - 1;
|
||||
} else {
|
||||
springOffset = (lunarCalendarTable.at(year - 1901) & 0x001F) - 1 + 31;
|
||||
|
@ -649,7 +649,7 @@ void LunarCalendarInfo::getLunarCalendarInfo(int year, int month, int day,
|
|||
|
||||
//如果是不闰年且不是2月份 +1
|
||||
newYearOffset = monthAdd.at(month - 1) + day - 1;
|
||||
if((!(year % 4)) && (month > 2)) {
|
||||
if ((!(year % 4)) && (month > 2)) {
|
||||
newYearOffset++;
|
||||
}
|
||||
|
||||
|
@ -665,7 +665,7 @@ void LunarCalendarInfo::getLunarCalendarInfo(int year, int month, int day,
|
|||
index = 1;
|
||||
flag = 0;
|
||||
|
||||
if((lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0) {
|
||||
if ((lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0) {
|
||||
monthCount = 29;
|
||||
} else {
|
||||
monthCount = 30;
|
||||
|
@ -674,7 +674,7 @@ void LunarCalendarInfo::getLunarCalendarInfo(int year, int month, int day,
|
|||
while (newYearOffset >= monthCount) {
|
||||
newYearOffset -= monthCount;
|
||||
index++;
|
||||
if (month == ((lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20) ) {
|
||||
if (month == ((lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20)) {
|
||||
flag = ~flag;
|
||||
if (flag == 0) {
|
||||
month++;
|
||||
|
@ -713,11 +713,11 @@ void LunarCalendarInfo::getLunarCalendarInfo(int year, int month, int day,
|
|||
springOffset -= monthCount;
|
||||
index--;
|
||||
|
||||
if(flag == 0) {
|
||||
if (flag == 0) {
|
||||
month--;
|
||||
}
|
||||
|
||||
if(month == ((lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20)) {
|
||||
if (month == ((lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20)) {
|
||||
flag = ~flag;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = lunarcalendarwidget
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -9,7 +9,7 @@ int main(int argc, char *argv[])
|
|||
QApplication a(argc, argv);
|
||||
a.setFont(QFont("Microsoft Yahei", 9));
|
||||
|
||||
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
|
||||
#if _MSC_VER
|
||||
QTextCodec *codec = QTextCodec::codecForName("gbk");
|
||||
#else
|
||||
|
|
|
@ -2,10 +2,19 @@
|
|||
|
||||
#include "maskwidget.h"
|
||||
#include "qmutex.h"
|
||||
#include "qdesktopwidget.h"
|
||||
#include "qapplication.h"
|
||||
#include "qdebug.h"
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
|
||||
#include "qscreen.h"
|
||||
#define deskGeometry qApp->primaryScreen()->geometry()
|
||||
#define deskGeometry2 qApp->primaryScreen()->availableGeometry()
|
||||
#else
|
||||
#include "qdesktopwidget.h"
|
||||
#define deskGeometry qApp->desktop()->geometry()
|
||||
#define deskGeometry2 qApp->desktop()->availableGeometry()
|
||||
#endif
|
||||
|
||||
QScopedPointer<MaskWidget> MaskWidget::self;
|
||||
MaskWidget *MaskWidget::Instance()
|
||||
{
|
||||
|
@ -27,7 +36,7 @@ MaskWidget::MaskWidget(QWidget *parent) : QWidget(parent)
|
|||
setBgColor(QColor(0, 0, 0));
|
||||
|
||||
//不设置主窗体则遮罩层大小为默认桌面大小
|
||||
this->setGeometry(qApp->desktop()->geometry());
|
||||
this->setGeometry(deskGeometry);
|
||||
this->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
|
||||
|
||||
//绑定全局事件,过滤弹窗窗体进行处理
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = maskwidget
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -1,5 +1,13 @@
|
|||
QT += core gui
|
||||
#-------------------------------------------------
|
||||
#
|
||||
# Project created by QtCreator 2019-02-16T15:08:47
|
||||
#
|
||||
#-------------------------------------------------
|
||||
|
||||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = miniblink
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = mouseline
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -9,7 +9,7 @@ int main(int argc, char *argv[])
|
|||
QApplication a(argc, argv);
|
||||
a.setFont(QFont("Microsoft Yahei", 9));
|
||||
|
||||
#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(5,0,0))
|
||||
#if _MSC_VER
|
||||
QTextCodec *codec = QTextCodec::codecForName("gbk");
|
||||
#else
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
|
||||
|
||||
TARGET = movewidget
|
||||
TEMPLATE = app
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
#pragma execution_character_set("utf-8")
|
||||
#include "widget.h"
|
||||
|
||||
#include <QApplication>
|
||||
#include <QTextCodec>
|
||||
#include <QDesktopWidget>
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
@ -32,12 +30,5 @@ int main(int argc, char *argv[])
|
|||
w.setWindowTitle("视频流播放mpv内核 (QQ: 517216493)");
|
||||
w.show();
|
||||
|
||||
//居中显示窗体
|
||||
QDesktopWidget deskWidget;
|
||||
int deskWidth = deskWidget.availableGeometry().width();
|
||||
int deskHeight = deskWidget.availableGeometry().height();
|
||||
QPoint movePoint(deskWidth / 2 - w.width() / 2, deskHeight / 2 - w.height() / 2);
|
||||
w.move(movePoint);
|
||||
|
||||
return a.exec();
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue