diff --git a/ClockCounter/ClockCounter.cpp b/ClockCounter/ClockCounter.cpp index 5349cdd..f83dba9 100644 --- a/ClockCounter/ClockCounter.cpp +++ b/ClockCounter/ClockCounter.cpp @@ -3,6 +3,8 @@ ClockCounter::ClockCounter(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); + PreClickCount = 0; + PreClickPosition = QPoint(0, 0); ui.SpliterHourMinute->Init(UDateTimeSpliter::Type::Time); ui.SpliterMinuteSecond->Init(UDateTimeSpliter::Type::Time); ui.SpliterSecondMS->Init(UDateTimeSpliter::Type::Dots); @@ -11,7 +13,9 @@ ClockCounter::ClockCounter(QWidget *parent) : QMainWindow(parent) connect(ui.BtnGetPreclickPos, &QPushButton::clicked, this, &ClockCounter::ShowPreClickWindow); connect(ui.BtnClearPreclickPos, &QPushButton::clicked, this, &ClockCounter::ClearPreClickInfo); connect(&CountTimer, &QTimer::timeout, this, &ClockCounter::CountCallback); + connect(&WindowUpdater, &QTimer::timeout, this, &ClockCounter::WindowUpdateCallback); CountTimer.setInterval(1); + WindowUpdater.setInterval(50); CountTime = 0; } @@ -44,11 +48,17 @@ void ClockCounter::ShowPreClickWindow() pre_click_window.show(); pre_click_window.activateWindow(); pre_click_window.setWindowState((pre_click_window.windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); + this->hide(); + WindowUpdater.start(); } } void ClockCounter::ClearPreClickInfo() { + PreClickCount = 0; + PreClickPosition = QPoint(0, 0); + this->setWindowTitle("软件执行计时器"); + MessageBox(NULL, L"预点击坐标已清空", L"提示", MB_OK | MB_ICONINFORMATION); } void ClockCounter::CountCallback() @@ -69,3 +79,20 @@ void ClockCounter::CountCallback() ui.NumMillSec03->setNumber((millsecond % 100) % 10); return; } + +void ClockCounter::WindowUpdateCallback() +{ + if (!pre_click_window.isVisible()) + { + WindowUpdater.stop(); + this->show(); + this->activateWindow(); + this->setWindowState((this->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); + if (pre_click_window.GetWindowStatus()) + { + PreClickCount = pre_click_window.GetClickCount(); + PreClickPosition = pre_click_window.GetCursorPosition(); + this->setWindowTitle("软件执行计时器: 预点击指令已激活"); + } + } +} diff --git a/ClockCounter/ClockCounter.h b/ClockCounter/ClockCounter.h index b7adfc5..cdd32a2 100644 --- a/ClockCounter/ClockCounter.h +++ b/ClockCounter/ClockCounter.h @@ -20,10 +20,14 @@ public slots: void ShowPreClickWindow(); void ClearPreClickInfo(); void CountCallback(); + void WindowUpdateCallback(); private: time_t CountTime; + int PreClickCount; QTimer CountTimer; + QTimer WindowUpdater; + QPoint PreClickPosition; Ui::ClockCounterClass ui; PreClick pre_click_window; }; diff --git a/ClockCounter/PreClick.cpp b/ClockCounter/PreClick.cpp index 35dfd55..e2cfad3 100644 --- a/ClockCounter/PreClick.cpp +++ b/ClockCounter/PreClick.cpp @@ -2,16 +2,40 @@ PreClick::PreClick(QWidget* parent) : QMainWindow(parent) { + ClickCount = 1; + WindowStatus = false; + CursorPosition = QPoint(0, 0); ui.setupUi(this); + ui.ClickCount->setValue(1); + ui.ClickCount->setMinimum(1); + ui.ClickCount->setMaximum(10); connect(ui.BtnGetPos, &QPushButton::clicked, this, &PreClick::StartCursorTrack); + connect(ui.BtnOK, &QPushButton::clicked, this, &PreClick::OnBnClickedOK); + connect(ui.BtnCancel, &QPushButton::clicked, this, &PreClick::OnBnClickedCancel); connect(&CursorUpdate, &QTimer::timeout, this, &PreClick::UpdateCursorPosition); CursorUpdate.setInterval(50); + this->grabKeyboard(); } PreClick::~PreClick() { } +bool PreClick::GetWindowStatus() +{ + return WindowStatus; +} + +int PreClick::GetClickCount() +{ + return ClickCount; +} + +QPoint PreClick::GetCursorPosition() +{ + return CursorPosition; +} + void PreClick::UpdateCursorPosition() { POINT point; @@ -29,7 +53,36 @@ void PreClick::StartCursorTrack() } else { - CursorUpdate.stop(); + CursorUpdate.start(); ui.BtnGetPos->setText("停止获取"); } } + +void PreClick::OnBnClickedOK() +{ + CursorPosition = QPoint(ui.PosX->toPlainText().toInt(), ui.PosY->toPlainText().toInt()); + ClickCount = ui.ClickCount->value(); + WindowStatus = true; + this->hide(); +} + +void PreClick::OnBnClickedCancel() +{ + WindowStatus = false; + this->hide(); +} + +void PreClick::keyPressEvent(QKeyEvent* event) +{ + if ((event->key() == Qt::Key_Space) && CursorUpdate.isActive()) + { + CursorUpdate.stop(); + ui.BtnGetPos->setText("获取坐标"); + } +} + +void PreClick::closeEvent(QCloseEvent* event) +{ + this->hide(); + event->ignore(); +} diff --git a/ClockCounter/PreClick.h b/ClockCounter/PreClick.h index 3aefbef..af85fdf 100644 --- a/ClockCounter/PreClick.h +++ b/ClockCounter/PreClick.h @@ -3,6 +3,8 @@ #include "ui_PreClick.h" #include #include +#include +#include class PreClick : public QMainWindow { @@ -12,12 +14,26 @@ public: PreClick(QWidget* parent = nullptr); ~PreClick(); +public: + bool GetWindowStatus(); + int GetClickCount(); + QPoint GetCursorPosition(); + public slots: void UpdateCursorPosition(); void StartCursorTrack(); + void OnBnClickedOK(); + void OnBnClickedCancel(); + +protected: + void keyPressEvent(QKeyEvent* event) override; + void closeEvent(QCloseEvent* event) override; private: QTimer CursorUpdate; Ui::PreClickWindow ui; + QPoint CursorPosition; + int ClickCount; + bool WindowStatus; }; diff --git a/ClockCounter/UDateTimeSpliter.h b/ClockCounter/UDateTimeSpliter.h index 5f9fdee..fd4abf8 100644 --- a/ClockCounter/UDateTimeSpliter.h +++ b/ClockCounter/UDateTimeSpliter.h @@ -29,7 +29,7 @@ private: QColor TextColor2; QColor Background1; QColor Background2; - const int DotSpace = 20; + const int DotSpace = 14; const int DateSpace = 20; const int TimeSpace = 20; const int DateSpliterLineSize = 10;