667 lines
21 KiB
C++
667 lines
21 KiB
C++
#include "QtHistoryLogList.h"
|
|
#include "QScreen"
|
|
|
|
|
|
#pragma execution_character_set("utf-8")
|
|
|
|
QtHistoryLogList::QtHistoryLogList(QWidget *parent)
|
|
: QMainWindow(parent)
|
|
{
|
|
ui.setupUi(this);
|
|
this->setMouseTracking(true);
|
|
ui.centralWidget->setMouseTracking(true);
|
|
ui.frame->setMouseTracking(true);
|
|
ui.title->setMouseTracking(true);
|
|
|
|
ui.label_icon->setStyleSheet("image: url(./Icon/logo_Dongsheng.png);");
|
|
ui.pushButton_min->setText("");
|
|
ui.pushButton_close->setText("");
|
|
ui.pushButton_max->setText("");
|
|
|
|
ui.pushButton_min->setStyleSheet("background-color:transparent;image: url(./Icon/min_n.png);");
|
|
ui.pushButton_close->setStyleSheet("background-color:transparent;image: url(./Icon/close_n.png);");
|
|
ui.pushButton_max->setStyleSheet("background-color:transparent;image: url(./Icon/Max_n.png);");
|
|
|
|
connect(ui.pushButton_min, &QPushButton::clicked, [=]() {
|
|
this->showMinimized();
|
|
qApp->processEvents();
|
|
});
|
|
connect(ui.pushButton_close, &QPushButton::clicked, [=]() {
|
|
this->close();
|
|
qApp->processEvents();
|
|
});
|
|
|
|
QScreen* screen = QGuiApplication::primaryScreen();
|
|
QSize screenSize = screen->size();
|
|
static int screenWidth = screenSize.width();
|
|
static int screenHeight = screenSize.height();
|
|
qDebug() << "Screen resolution: " << screenWidth << "x" << screenHeight;
|
|
|
|
static int maxClickedNum = 1;
|
|
connect(ui.pushButton_max, &QPushButton::clicked, [=]() {
|
|
if (maxClickedNum)
|
|
{
|
|
//ui.pushButton_max->setStyleSheet("background-color:transparent;image: url(Max_n.png);");
|
|
//ui.pushButton_max->setToolTip(tr("向下还原"));
|
|
setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
|
this->showMaximized();
|
|
maxClickedNum = 0;
|
|
}
|
|
else {
|
|
//ui.pushButton_max->setStyleSheet("background-color:transparent;image: url(Max_n.png);");
|
|
//ui.pushButton_max->setToolTip(tr("最大化"));
|
|
setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
|
this->showNormal();
|
|
this->resize(screenWidth / 3 * 2, screenHeight / 3 * 2);
|
|
this->move(screenWidth / 5, screenHeight / 5);
|
|
maxClickedNum = 1;
|
|
}
|
|
qApp->processEvents();
|
|
});
|
|
setWindowFlags(Qt::FramelessWindowHint); //隐藏标题栏
|
|
//this->showNormal();
|
|
this->resize(screenWidth / 3 * 2, screenHeight / 3 * 2);
|
|
this->move(screenWidth / 5, screenHeight / 5);
|
|
|
|
ui.lineEdit_match->setText("");
|
|
ui.pushButton_match->setStyleSheet("QPushButton{background-color:rgb(68, 74, 80);border-radius:10px;}"
|
|
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
|
//匹配内容
|
|
connect(ui.pushButton_match, &QPushButton::clicked, [=]() {
|
|
ifKidLog = false;
|
|
matchList.clear();
|
|
for (int i = 0; i < myhistoryLogList.size(); i++)
|
|
{
|
|
if (myhistoryLogList[i].contains(ui.lineEdit_match->text()))
|
|
matchList.append(myhistoryLogList[i]);
|
|
if (i % 100000 == 0)
|
|
{
|
|
qDebug() << "pushButton_match::" << i;
|
|
qApp->processEvents();
|
|
}
|
|
}
|
|
check_qsLines.clear();
|
|
check_qsLines.append(matchList);
|
|
|
|
//刷新log显示;
|
|
ifSettingEdit = true;
|
|
ui.plainTextEdit->clear();
|
|
ui.verticalScrollBar->setMaximum(check_qsLines.size());
|
|
if (check_qsLines.size() > pageLines)
|
|
{
|
|
for (int i = 0; i < pageLines; i++)
|
|
ui.plainTextEdit->appendPlainText(check_qsLines[i]);
|
|
lastBar = pageLines;
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < check_qsLines.size(); i++)
|
|
ui.plainTextEdit->appendPlainText(check_qsLines[i]);
|
|
lastBar = check_qsLines.size();
|
|
}
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(0);
|
|
if (check_qsLines.size() > 0)
|
|
{
|
|
QString lineLast = check_qsLines.last();
|
|
qDebug() << "lineLast::" << lineLast;
|
|
}
|
|
qApp->processEvents();
|
|
ifSettingEdit = false;
|
|
ifKidLog = true;
|
|
QMessageBox::information(0, tr("提示"), tr("操作完成"), tr("确定"));
|
|
});
|
|
|
|
ui.pushButton_writeMatch->setStyleSheet("QPushButton{background-color:rgb(68, 74, 80);border-radius:10px;}"
|
|
"QPushButton:hover{ background-color: rgb(0, 0, 0); border:none; color:rgb(255, 255, 255); }");
|
|
//写匹配
|
|
connect(ui.pushButton_writeMatch, &QPushButton::clicked, [=]() {
|
|
QFile savefile;
|
|
QStringList myFList;// = FUNCTIONList[i];
|
|
if (ui.lineEdit_match->text().contains("::"))
|
|
myFList = ui.lineEdit_match->text().split("::");
|
|
else
|
|
myFList.append(ui.lineEdit_match->text());
|
|
QString newQS;
|
|
for (int s = 0; s < myFList.size(); s++)
|
|
newQS += myFList[s] + "-";
|
|
QDir dir = QApplication::applicationDirPath();
|
|
QString currPath = dir.path();
|
|
QString tmpDate = QDateTime::currentDateTime().toString("yyyy-MM-dd-hh-mm-ss-zzz");
|
|
QString LogPath = currPath + "/historyLogList/" + tmpDate;
|
|
QString newPath = LogPath + "_" + newQS + ".log";
|
|
savefile.setFileName(newPath);
|
|
if (!savefile.open(QIODevice::WriteOnly | QIODevice::Append))
|
|
{
|
|
QString erinfo = savefile.errorString();
|
|
return;
|
|
}
|
|
QTextStream out(&savefile);
|
|
for (int j = 0; j < matchList.size(); j++)
|
|
{
|
|
out << "\r" << matchList[j];
|
|
if (j % 100000 == 0)
|
|
{
|
|
qDebug() << "pushButton_writeMatch::" << j;
|
|
qApp->processEvents();
|
|
}
|
|
}
|
|
savefile.close();
|
|
qApp->processEvents();
|
|
QMessageBox::information(0, tr("提示"), tr("操作完成"), tr("确定"));
|
|
});
|
|
connect(ui.verticalScrollBar, &QScrollBar::valueChanged, [=]() {
|
|
int firstNum = 0;
|
|
int lastNum = 0;
|
|
|
|
if (ifKidLog == false)
|
|
{
|
|
if (myhistoryLogList.size() <= pageLines)
|
|
return;
|
|
//下翻
|
|
if (lastBar <= ui.verticalScrollBar->value())
|
|
{
|
|
if (ui.verticalScrollBar->value() <= pageLines)
|
|
return;
|
|
ifSettingEdit = true;
|
|
//下翻大幅
|
|
if ((lastBar + pageLines) < ui.verticalScrollBar->value())
|
|
{
|
|
ui.plainTextEdit->clear();
|
|
firstNum = ui.verticalScrollBar->value();
|
|
lastNum = std::min(firstNum + pageLines, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(myhistoryLogList[i]);
|
|
lastBar = ui.verticalScrollBar->value();
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(std::max(5, ui.plainTextEdit->verticalScrollBar()->maximum() - 20));
|
|
}
|
|
else if ((lastBar + 3) < ui.verticalScrollBar->value())
|
|
{
|
|
firstNum = ui.verticalScrollBar->value() - pageLines;
|
|
firstNum = std::max(firstNum, 0);
|
|
lastNum = std::min(firstNum + pageLines, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
|
|
/*for(int i=0;i< firstNum-lastBar;i++)
|
|
ui.plainTextEdit->c*/
|
|
|
|
ui.plainTextEdit->clear();
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(myhistoryLogList[i]);
|
|
|
|
lastBar = ui.verticalScrollBar->value();
|
|
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(std::max(5, ui.plainTextEdit->verticalScrollBar()->maximum() - 20));
|
|
}
|
|
else
|
|
{
|
|
lastNum = ui.verticalScrollBar->value() + 3;
|
|
lastNum = std::min(lastNum, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
ui.plainTextEdit->clear();
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(myhistoryLogList[i]);
|
|
|
|
lastBar = ui.verticalScrollBar->value();
|
|
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(ui.plainTextEdit->verticalScrollBar()->maximum() - 4);
|
|
}
|
|
}
|
|
//上翻
|
|
else
|
|
{
|
|
if (ui.verticalScrollBar->maximum() - ui.verticalScrollBar->value() <= pageLines)
|
|
return;
|
|
|
|
ifSettingEdit = true;
|
|
//上翻大幅
|
|
if ((lastBar - pageLines) > ui.verticalScrollBar->value())
|
|
{
|
|
ui.plainTextEdit->clear();
|
|
firstNum = ui.verticalScrollBar->value();
|
|
lastNum = std::min(firstNum + pageLines, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(myhistoryLogList[i]);
|
|
lastBar = ui.verticalScrollBar->value();
|
|
}
|
|
else if ((lastBar - 3) > ui.verticalScrollBar->value())
|
|
{
|
|
firstNum = ui.verticalScrollBar->value() - pageLines;
|
|
firstNum = std::max(firstNum, 0);
|
|
lastNum = std::min(firstNum + pageLines, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
|
|
/*for(int i=0;i< firstNum-lastBar;i++)
|
|
ui.plainTextEdit->c*/
|
|
|
|
ui.plainTextEdit->clear();
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(myhistoryLogList[i]);
|
|
|
|
lastBar = ui.verticalScrollBar->value();
|
|
}
|
|
else
|
|
{
|
|
firstNum = lastBar - 3;
|
|
firstNum = std::max(firstNum, 0);
|
|
lastNum = std::min(firstNum + pageLines, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
|
|
ui.plainTextEdit->clear();
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(myhistoryLogList[i]);
|
|
|
|
lastBar = ui.verticalScrollBar->value();
|
|
}
|
|
if (ui.verticalScrollBar->value() == 0)
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(4);
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(4);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (check_qsLines.size() <= pageLines)
|
|
return;
|
|
//下翻
|
|
if (lastBar <= ui.verticalScrollBar->value())
|
|
{
|
|
if (ui.verticalScrollBar->value() <= pageLines)
|
|
return;
|
|
|
|
ifSettingEdit = true;
|
|
//下翻大幅
|
|
if ((lastBar + pageLines) < ui.verticalScrollBar->value())
|
|
{
|
|
ui.plainTextEdit->clear();
|
|
firstNum = ui.verticalScrollBar->value();
|
|
lastNum = std::min(firstNum + pageLines, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(check_qsLines[i]);
|
|
lastBar = ui.verticalScrollBar->value();
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(std::max(5, ui.plainTextEdit->verticalScrollBar()->maximum() - 20));
|
|
}
|
|
else if ((lastBar + 3) < ui.verticalScrollBar->value())
|
|
{
|
|
firstNum = ui.verticalScrollBar->value() - pageLines;
|
|
firstNum = std::max(firstNum, 0);
|
|
lastNum = std::min(firstNum + pageLines, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
|
|
/*for(int i=0;i< firstNum-lastBar;i++)
|
|
ui.plainTextEdit->c*/
|
|
|
|
ui.plainTextEdit->clear();
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(check_qsLines[i]);
|
|
|
|
lastBar = ui.verticalScrollBar->value();
|
|
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(std::max(5, ui.plainTextEdit->verticalScrollBar()->maximum() - 20));
|
|
}
|
|
else
|
|
{
|
|
lastNum = ui.verticalScrollBar->value() + 3;
|
|
lastNum = std::min(lastNum, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
ui.plainTextEdit->clear();
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(check_qsLines[i]);
|
|
|
|
lastBar = ui.verticalScrollBar->value();
|
|
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(ui.plainTextEdit->verticalScrollBar()->maximum() - 4);
|
|
}
|
|
}
|
|
//上翻
|
|
else
|
|
{
|
|
if (ui.verticalScrollBar->maximum() - ui.verticalScrollBar->value() <= pageLines)
|
|
return;
|
|
ifSettingEdit = true;
|
|
//上翻大幅
|
|
if ((lastBar - pageLines) > ui.verticalScrollBar->value())
|
|
{
|
|
ui.plainTextEdit->clear();
|
|
firstNum = ui.verticalScrollBar->value();
|
|
lastNum = std::min(firstNum + pageLines, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(check_qsLines[i]);
|
|
lastBar = ui.verticalScrollBar->value();
|
|
}
|
|
else if ((lastBar - 3) > ui.verticalScrollBar->value())
|
|
{
|
|
firstNum = ui.verticalScrollBar->value() - pageLines;
|
|
firstNum = std::max(firstNum, 0);
|
|
lastNum = std::min(firstNum + pageLines, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
/*for(int i=0;i< firstNum-lastBar;i++)
|
|
ui.plainTextEdit->c*/
|
|
ui.plainTextEdit->clear();
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(check_qsLines[i]);
|
|
|
|
lastBar = ui.verticalScrollBar->value();
|
|
}
|
|
else
|
|
{
|
|
firstNum = lastBar - 3;
|
|
firstNum = std::max(firstNum, 0);
|
|
lastNum = std::min(firstNum + pageLines, ui.verticalScrollBar->maximum());
|
|
firstNum = lastNum - pageLines;
|
|
|
|
ui.plainTextEdit->clear();
|
|
for (int i = firstNum; i < lastNum; i++)
|
|
ui.plainTextEdit->appendPlainText(check_qsLines[i]);
|
|
|
|
lastBar = ui.verticalScrollBar->value();
|
|
}
|
|
if (ui.verticalScrollBar->value() == 0)
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(4);
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(4);
|
|
}
|
|
}
|
|
//ifSettingEdit = false;
|
|
qApp->processEvents();
|
|
ifSettingEdit = false;
|
|
});
|
|
|
|
ui.plainTextEdit->verticalScrollBar()->setMaximum(pageLines);
|
|
|
|
static int last_plainValue = 0;
|
|
connect(ui.plainTextEdit->verticalScrollBar(), &QScrollBar::valueChanged, [=]()
|
|
{
|
|
if (ifSettingEdit)
|
|
{
|
|
return;
|
|
}
|
|
int m_value = ui.plainTextEdit->verticalScrollBar()->value();
|
|
int m = ui.verticalScrollBar->maximum();
|
|
if (ui.plainTextEdit->verticalScrollBar()->value() == 0)
|
|
if (lastBar == ui.verticalScrollBar->maximum())
|
|
ui.verticalScrollBar->setValue(std::max(0, lastBar - pageLines - 3));
|
|
else
|
|
ui.verticalScrollBar->setValue(std::max(0, lastBar - 3));
|
|
else if (ui.plainTextEdit->verticalScrollBar()->value() >= ui.plainTextEdit->verticalScrollBar()->maximum() - 2)
|
|
if (lastBar < pageLines)
|
|
ui.verticalScrollBar->setValue(std::min(ui.verticalScrollBar->maximum(), lastBar + ui.plainTextEdit->verticalScrollBar()->maximum() + 3));
|
|
else ui.verticalScrollBar->setValue(std::min(ui.verticalScrollBar->maximum(), lastBar + 3));
|
|
/*if (last_plainValue < m_value)
|
|
{
|
|
last_plainValue = m_value;
|
|
ui.verticalScrollBar->setValue(std::max(0, lastBar + last_plainValue - m_value));
|
|
}
|
|
else if (last_plainValue > m_value)
|
|
{
|
|
last_plainValue = m_value;
|
|
ui.verticalScrollBar->setValue(std::min(ui.verticalScrollBar->maximum(), lastBar + last_plainValue - m_value));
|
|
}*/
|
|
/*qDebug() << "ui.verticalScrollBar value::" << ui.verticalScrollBar->value();
|
|
qDebug() << "verticalScrollBar::" << ui.plainTextEdit->verticalScrollBar()->value();
|
|
qDebug() << "verticalScrollBar:maximum:" << ui.plainTextEdit->verticalScrollBar()->maximum();*/
|
|
});
|
|
}
|
|
|
|
void QtHistoryLogList::setData(QQueue<QString> historyLogList)
|
|
{
|
|
myhistoryLogList.clear();
|
|
//myhistoryLogList = historyLogList;
|
|
for (int i = 0; i < historyLogList.size(); i++)
|
|
myhistoryLogList.enqueue(historyLogList[i]);
|
|
pageLines = 200;
|
|
|
|
ui.plainTextEdit->clear();
|
|
ifSettingEdit = true;
|
|
ui.verticalScrollBar->setMaximum(myhistoryLogList.size());
|
|
if (myhistoryLogList.size() > pageLines)
|
|
{
|
|
for (int i = 0; i < pageLines; i++)
|
|
ui.plainTextEdit->appendPlainText(myhistoryLogList[i]);
|
|
lastBar = pageLines;
|
|
}
|
|
else
|
|
{
|
|
for (int i = 0; i < myhistoryLogList.size(); i++)
|
|
ui.plainTextEdit->appendPlainText(myhistoryLogList[i]);
|
|
lastBar = myhistoryLogList.size();
|
|
}
|
|
ui.plainTextEdit->verticalScrollBar()->setValue(0);
|
|
if (myhistoryLogList.size() > 0)
|
|
{
|
|
QString lineLast = myhistoryLogList.last();
|
|
qDebug() << "lineLast::" << lineLast;
|
|
}
|
|
qApp->processEvents();
|
|
ifSettingEdit = false;
|
|
}
|
|
|
|
QtHistoryLogList::~QtHistoryLogList()
|
|
{}
|
|
|
|
#define MOUSE_MARGIN 2
|
|
//计算鼠标位置
|
|
QtHistoryLogList::MousePoss QtHistoryLogList::calcmouseposs(QPoint p)
|
|
{
|
|
QtHistoryLogList::MousePoss mp;
|
|
if (p.x() < MOUSE_MARGIN && p.y() < MOUSE_MARGIN)
|
|
mp = QtHistoryLogList::MousePoss::LeftUp; //左上
|
|
else if (p.x() > MOUSE_MARGIN && p.y() < MOUSE_MARGIN && p.x() < this->width() - MOUSE_MARGIN)
|
|
mp = QtHistoryLogList::MousePoss::Up; //上
|
|
else if (p.x() > this->width() - MOUSE_MARGIN && p.y() < MOUSE_MARGIN)
|
|
mp = QtHistoryLogList::MousePoss::RightUp; //右上
|
|
else if (p.x() > this->width() - MOUSE_MARGIN && p.y() > MOUSE_MARGIN && p.y() < this->height() - MOUSE_MARGIN)
|
|
mp = QtHistoryLogList::MousePoss::Right; //右
|
|
else if (p.x() > this->width() - MOUSE_MARGIN && p.y() > this->height() - MOUSE_MARGIN)
|
|
mp = QtHistoryLogList::MousePoss::RightDown; //右下
|
|
else if (p.x() > MOUSE_MARGIN && p.x() < this->width() - MOUSE_MARGIN && p.y() > this->height() - MOUSE_MARGIN)
|
|
mp = QtHistoryLogList::MousePoss::Down; //下
|
|
else if (p.x() < MOUSE_MARGIN && p.y() > this->height() - MOUSE_MARGIN)
|
|
mp = QtHistoryLogList::MousePoss::LeftDown; //左下
|
|
else if (p.x() < MOUSE_MARGIN && p.y() < this->height() - MOUSE_MARGIN && p.y() > MOUSE_MARGIN)
|
|
mp = QtHistoryLogList::MousePoss::Left; //左
|
|
else
|
|
mp = QtHistoryLogList::MousePoss::Middle; //中间
|
|
return mp;
|
|
}
|
|
//修改鼠标样式
|
|
void QtHistoryLogList::setCursorType(QtHistoryLogList::MousePoss type)
|
|
{
|
|
Qt::CursorShape cursor;
|
|
switch (type)
|
|
{
|
|
case QtHistoryLogList::MousePoss::LeftUp:
|
|
case QtHistoryLogList::MousePoss::RightDown:
|
|
cursor = Qt::SizeFDiagCursor;
|
|
break;
|
|
case QtHistoryLogList::MousePoss::Up:
|
|
case QtHistoryLogList::MousePoss::Down:
|
|
cursor = Qt::SizeVerCursor;
|
|
break;
|
|
case QtHistoryLogList::MousePoss::RightUp:
|
|
case QtHistoryLogList::MousePoss::LeftDown:
|
|
cursor = Qt::SizeBDiagCursor;
|
|
break;
|
|
case QtHistoryLogList::MousePoss::Right:
|
|
case QtHistoryLogList::MousePoss::Left:
|
|
cursor = Qt::SizeHorCursor;
|
|
break;
|
|
default:
|
|
cursor = Qt::ArrowCursor;
|
|
break;
|
|
}
|
|
setCursor(cursor);
|
|
}
|
|
//改变窗口的大小
|
|
void QtHistoryLogList::changeWindowSize(QtHistoryLogList::MousePoss type, QRect& wid, QPoint ptemp, int minWidth, int minHeight)
|
|
{
|
|
switch (type)//改变窗口的大小
|
|
{
|
|
case QtHistoryLogList::MousePoss::LeftUp:
|
|
{
|
|
QPoint pos = wid.topLeft();
|
|
|
|
if (wid.width() > minWidth || ptemp.x() < 0)
|
|
pos.rx() = pos.rx() + ptemp.x();
|
|
if (wid.height() > minHeight || ptemp.y() < 0)
|
|
pos.ry() = pos.ry() + ptemp.y();
|
|
|
|
wid.setTopLeft(pos);
|
|
break;//左上角
|
|
}
|
|
case QtHistoryLogList::MousePoss::RightUp:
|
|
{
|
|
QPoint pos = wid.topRight();
|
|
|
|
if (wid.width() > minWidth || ptemp.x() > 0)
|
|
pos.rx() = pos.rx() + ptemp.x();
|
|
if (wid.height() > minHeight || ptemp.y() < 0)
|
|
pos.ry() = pos.ry() + ptemp.y();
|
|
|
|
wid.setTopRight(pos);
|
|
break;//右上角
|
|
}
|
|
case QtHistoryLogList::MousePoss::LeftDown:
|
|
{
|
|
QPoint pos = wid.bottomLeft();
|
|
|
|
if (wid.width() > minWidth || ptemp.x() < 0)
|
|
pos.rx() = pos.rx() + ptemp.x();
|
|
if (wid.height() > minHeight || ptemp.y() > 0)
|
|
pos.ry() = pos.ry() + ptemp.y();
|
|
|
|
wid.setBottomLeft(pos);
|
|
break;//左下角
|
|
}
|
|
case QtHistoryLogList::MousePoss::RightDown:
|
|
{
|
|
QPoint pos = wid.bottomRight();
|
|
|
|
if (wid.width() > minWidth || ptemp.x() > 0)
|
|
pos.rx() = pos.rx() + ptemp.x();
|
|
if (wid.height() > minHeight || ptemp.y() > 0)
|
|
pos.ry() = pos.ry() + ptemp.y();
|
|
|
|
wid.setBottomRight(pos);
|
|
break;//右下角
|
|
}
|
|
case QtHistoryLogList::MousePoss::Up:
|
|
{
|
|
int topY = wid.top();
|
|
if (wid.height() > minHeight || ptemp.y() < 0)
|
|
topY = topY + ptemp.y();
|
|
|
|
wid.setTop(topY);
|
|
break;//上
|
|
}
|
|
case QtHistoryLogList::MousePoss::Left:
|
|
{
|
|
int leftX = wid.left();
|
|
|
|
if (wid.width() > minWidth || ptemp.x() < 0)
|
|
leftX = leftX + ptemp.x();
|
|
|
|
wid.setLeft(leftX);
|
|
break;//左
|
|
}
|
|
case QtHistoryLogList::MousePoss::Right:
|
|
{
|
|
int rightX = wid.right();
|
|
|
|
if (wid.width() > minWidth || ptemp.x() > 0)
|
|
rightX = rightX + ptemp.x();
|
|
|
|
wid.setRight(rightX);
|
|
break;//右
|
|
}
|
|
case QtHistoryLogList::MousePoss::Down:
|
|
{
|
|
int botY = wid.bottom();
|
|
if (wid.height() > minHeight || ptemp.y() > 0)
|
|
botY = botY + ptemp.y();
|
|
|
|
wid.setBottom(botY);
|
|
break;//下
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
//三个鼠标事件的重写
|
|
void QtHistoryLogList::mousePressEvent(QMouseEvent* e)
|
|
{
|
|
|
|
if (e->button() == Qt::LeftButton) //鼠标左键按下
|
|
{
|
|
m_lastPos = e->globalPos();
|
|
e->ignore();
|
|
}
|
|
|
|
|
|
}
|
|
//鼠标移动
|
|
void QtHistoryLogList::mouseMoveEvent(QMouseEvent* e)
|
|
{
|
|
//最大化状态,鼠标是否在标题栏,拖拽还原
|
|
if (this->isMaximized())
|
|
{
|
|
if (ui.title->geometry().contains(this->mapFromGlobal(QCursor::pos())) && e->buttons() == Qt::LeftButton)
|
|
{
|
|
QPoint ptemp = e->globalPos();
|
|
if (ptemp != m_lastPos)
|
|
{
|
|
this->showNormal();
|
|
}
|
|
}
|
|
}
|
|
QtHistoryLogList::MousePoss curPos = calcmouseposs(e->pos());
|
|
if (!e->buttons())
|
|
{
|
|
setCursorType(curPos);
|
|
mp_curPos = curPos;
|
|
}
|
|
|
|
if (e->buttons() == Qt::LeftButton) //坐标左键按下并移动
|
|
{
|
|
QPoint ptemp = e->globalPos();
|
|
ptemp = ptemp - m_lastPos; //鼠标移动的偏移量
|
|
if (mp_curPos == QtHistoryLogList::MousePoss::Middle && ui.title->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
|
&& !ui.pushButton_max->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
|
&& !ui.pushButton_min->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
|
&& !ui.pushButton_close->geometry().contains(this->mapFromGlobal(QCursor::pos())))
|
|
{
|
|
move(ptemp + pos());
|
|
}
|
|
else
|
|
{
|
|
QRect wid = geometry();
|
|
int minWidth = this->minimumWidth();
|
|
int minHeight = this->minimumHeight();
|
|
if (ptemp.x() < 50 && ptemp.x() > -50)
|
|
{
|
|
changeWindowSize(mp_curPos, wid, ptemp, minWidth, minHeight);
|
|
//更新大小
|
|
setGeometry(wid);
|
|
}
|
|
}
|
|
m_lastPos = e->globalPos();
|
|
}
|
|
e->ignore();
|
|
}
|
|
//鼠标释放
|
|
void QtHistoryLogList::mouseReleaseEvent(QMouseEvent* e)
|
|
{
|
|
if (e->button() == Qt::LeftButton && ui.title->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
|
&& !ui.pushButton_max->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
|
&& !ui.pushButton_min->geometry().contains(this->mapFromGlobal(QCursor::pos()))
|
|
&& !ui.pushButton_close->geometry().contains(this->mapFromGlobal(QCursor::pos()))) //鼠标左键释放
|
|
{
|
|
int dx = e->globalX() - m_lastPos.x();
|
|
int dy = e->globalY() - m_lastPos.y();
|
|
move(x() + dx, y() + dy);
|
|
}
|
|
QApplication::restoreOverrideCursor();//恢复鼠标指针性状
|
|
e->ignore();
|
|
} |