From df4f4c0b8fd525e22712bdc6a338f29cb2ebca96 Mon Sep 17 00:00:00 2001 From: AbelTian <2407223896@qq.com> Date: Fri, 18 May 2018 12:28:54 +0800 Subject: [PATCH 1/7] add click sound helper --- src/exquisite/qqtclicksoundhelper.cpp | 11 ++++++ src/exquisite/qqtclicksoundhelper.h | 56 +++++++++++++++++++++++++++ src/exquisite/qqtclickwidget.h | 3 ++ src/exquisite/qqtdoubleclickhelper.h | 8 ++-- src/exquisite/qqtdoubleclickwidget.h | 2 + src/frame/qqtapplication.cpp | 8 ++-- src/qqt_qkit.pri | 25 ++++++++++-- src/qqt_source.pri | 5 +++ 8 files changed, 107 insertions(+), 11 deletions(-) create mode 100644 src/exquisite/qqtclicksoundhelper.cpp create mode 100644 src/exquisite/qqtclicksoundhelper.h diff --git a/src/exquisite/qqtclicksoundhelper.cpp b/src/exquisite/qqtclicksoundhelper.cpp new file mode 100644 index 00000000..ec9a05d1 --- /dev/null +++ b/src/exquisite/qqtclicksoundhelper.cpp @@ -0,0 +1,11 @@ +#include "qqtclicksoundhelper.h" + +QQtClickSoundHelper::QQtClickSoundHelper ( QObject* parent ) +{ + mClickHelper = 0; +} + +QQtClickSoundHelper::~QQtClickSoundHelper() +{ + +} diff --git a/src/exquisite/qqtclicksoundhelper.h b/src/exquisite/qqtclicksoundhelper.h new file mode 100644 index 00000000..98a2e9b6 --- /dev/null +++ b/src/exquisite/qqtclicksoundhelper.h @@ -0,0 +1,56 @@ +#ifndef QQTCLICKSOUNDHELPER_H +#define QQTCLICKSOUNDHELPER_H + +#include +#include +#include + +/** + * QQtClickSoundHelper + * + * 为Widget提供按键声音支持. + * + * ClickSoundHelper和Widget共用ClickHelper,实现Widget按键同时能播放声音的能力 + * 依赖QQtClickHelper实现 + */ +class QQTSHARED_EXPORT QQtClickSoundHelper : public QObject +{ + Q_OBJECT + +public: + explicit QQtClickSoundHelper ( QObject* parent = 0 ); + virtual ~QQtClickSoundHelper(); + + void setClickSound(); + void setLongClickSound(); + +public: + //一般,调用widget的clickHelper,设置到这里. + inline void setClickHelper ( QQtClickHelper* helper ) { + uninstallClickHelper(); + mClickHelper = helper; + installClickHelper(); + } + inline const QQtClickHelper* clickHelper() const { + return mClickHelper; + } + +protected: + //允许重写 + virtual void installClickHelper() { + + } + virtual void uninstallClickHelper() { + + } + QQtClickHelper* mClickHelper; + + /** + * 内部 + */ +public slots: + void slotClick() {} + void slotLongClick() {} +}; + +#endif // QQTCLICKSOUNDHELPER_H diff --git a/src/exquisite/qqtclickwidget.h b/src/exquisite/qqtclickwidget.h index c7787101..840c7d3b 100644 --- a/src/exquisite/qqtclickwidget.h +++ b/src/exquisite/qqtclickwidget.h @@ -8,8 +8,11 @@ #include /** + * 内置ClickHelper + * * 添加了longClick支持的QQtCanClickWidget * 这个Widget表示了如何使用QQtWidgetClickHelper和它的子类 + * */ class QQTSHARED_EXPORT QQtClickWidget : public QQtCanClickWidget { diff --git a/src/exquisite/qqtdoubleclickhelper.h b/src/exquisite/qqtdoubleclickhelper.h index 336444fd..5f29d400 100644 --- a/src/exquisite/qqtdoubleclickhelper.h +++ b/src/exquisite/qqtdoubleclickhelper.h @@ -39,9 +39,9 @@ public: //调用于userWidget相对应的Event里 //允许重写 public: - virtual void mousePressEvent ( QMouseEvent* event, QWidget* userWidget = 0 ); - virtual void mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget = 0 ); - virtual void mouseDoubleClickEvent ( QMouseEvent* event, QWidget* userWidget = 0 ); + virtual void mousePressEvent ( QMouseEvent* event, QWidget* userWidget = 0 ) override; + virtual void mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget = 0 ) override; + virtual void mouseDoubleClickEvent ( QMouseEvent* event, QWidget* userWidget = 0 ) override; signals: void doubleClick(); @@ -55,7 +55,7 @@ signals: //optional public: //这个语法比较难,只有整型有特权. - static const int doubleClickInterval = 400; + static const int doubleClickInterval = 200; //设置双击检测时延 default: doubleClickInterval ms //不会影响系统默认时延 diff --git a/src/exquisite/qqtdoubleclickwidget.h b/src/exquisite/qqtdoubleclickwidget.h index 76f41b38..9b49351a 100644 --- a/src/exquisite/qqtdoubleclickwidget.h +++ b/src/exquisite/qqtdoubleclickwidget.h @@ -8,6 +8,8 @@ #include /** + * 内置DoubleClickHelper + * * 添加了doubleClick支持的QQtClickWidget * 这个Widget表示了如何使用QQtWidgetClickHelper和它的子类 */ diff --git a/src/frame/qqtapplication.cpp b/src/frame/qqtapplication.cpp index 36cca468..f6413d9a 100644 --- a/src/frame/qqtapplication.cpp +++ b/src/frame/qqtapplication.cpp @@ -1,4 +1,4 @@ -#include "qqtapplication.h" +#include "qqtapplication.h" #ifdef __PLUGINSUPPORT__ #include "qqtpluginwatcher.h" #endif @@ -49,14 +49,14 @@ QQtApplication::QQtApplication ( int& argc, char** argv ) : QDir::setCurrent ( qApp->applicationDirPath() ); #endif - /*在linux系统,不自动在当前目录寻找lib,需要命令行设置LD_LIBRARY_PATH,这里添加一下自动查找,不冲突。*/ - addLibraryPath ( qApp->applicationDirPath() );//[qApp->] - pline() << "app root:" << qApp->applicationDirPath(); pline() << "app work root:" << QDir::currentPath(); pline() << "Qt version:" << QT_VERSION_STR; pline() << "LibQQt version:" << STR ( QQT_VERSION ); + /*在linux系统,不自动在当前目录寻找lib,需要命令行设置LD_LIBRARY_PATH,这里添加一下自动查找,不冲突。*/ + addLibraryPath ( QDir::currentPath() );//[qApp->] + #ifdef __EMBEDDED_LINUX__ pline() << "QTDIR:" << QProcessEnvironment::systemEnvironment().value ( "QTDIR" ); pline() << "TSLIB_TSDEVICE:" << QProcessEnvironment::systemEnvironment().value ( "TSLIB_TSDEVICE" ); diff --git a/src/qqt_qkit.pri b/src/qqt_qkit.pri index 65a98054..2c2947c2 100644 --- a/src/qqt_qkit.pri +++ b/src/qqt_qkit.pri @@ -9,10 +9,29 @@ #FileSystemName的终极状态是编译器_目标系统名,比如gcc_macOS, clang_macOS这样。 -#target arch type +#当工程编译目标相同,可是编译配置的Qt版本不同的时候,这个机制有一点点缺点, +#使用相同的中间编译目录吗? 很明显,这不合理?No,这很合理.Qt版本变化,引起链接库变化,但是,还是Qt,依然是Qt.程序中应当注意使用的Qt库(Qt4和Qt5库名字不太一样)和版本(版本号不一样,源代码会有点小区别,需要注意兼容性). +#比如桌面 gcc_64的Qt4 和 gcc_64的Qt5,不合适使用相同的中间编译目录,可是他们的FileSystemName都是Linux64,导致中间编译目录相同. +#为此,做出改进? No,用户请注意电脑上用Qt5开发就不要用Qt4,如果使用Qt4,请换电脑进行开发.(或者全部rebuild?其实Qt的版本之间引起的差异,如果不大,混用没什么问题,Qt库只能使用一个版本的) +#整体而言,Qt版本变化,引发的编译会比较多源文件.建议使用不同电脑开发. + +#原理 +#Qt Creator kit页的FileSystemName Creator自己用,忘记了传给qmake.(存储于Qt Creator配置区域) +#工程构建和配置页(存储于.pro.userxxx)里的环境变量QKIT给qmake用. +#如果用户在pro里面设置QMAKE.KIT QMAKE.SYSNAME,Qt Creator从qmake里读也挺好的. + #You need define a env variable QKIT=XX +#target arch type +#注释 +#config += xxx qmake用配置开关 +#$$(XXX) 环境变量XXX +#$${XXX} qmake用变量XXX +#XXX = AAA 给qmake用变量XXX赋值 +#DEFINES += XXX 源代码用宏 和上边的XXX可以重名,但是是两回事,不干扰. + QKIT_PRIVATE = $$(QKIT) -#处理文件内平台小差异 +#源文件内平台小差异 +#QKIT -> 源文件宏 #EMBEDDED __EMBEDDED_LINUX__ #MIPS __MIPS_LINUX__ #ARM __ARM_LINUX__ @@ -53,7 +72,7 @@ equals(QKIT_PRIVATE, EMBEDDED) { DEFINES += __ANDROID__ } else:equals(QKIT_PRIVATE, ANDROIDX86) { DEFINES += __ANDROID__ - DEFINES += __ANDROIDX86__ + DEFINES += __ANDROIDX86__ #可能废弃 } #QMAKESPEC_NAME = $${QMAKESPEC} diff --git a/src/qqt_source.pri b/src/qqt_source.pri index f89c2569..f64f2392 100644 --- a/src/qqt_source.pri +++ b/src/qqt_source.pri @@ -318,6 +318,11 @@ contains (DEFINES, __NETWORKSUPPORT__) { contains (DEFINES, __EXQUISITE__) { #exquisite + SOURCES += \ + $$PWD/exquisite/qqtclicksoundhelper.cpp + HEADERS += \ + $$PWD/exquisite/qqtclicksoundhelper.h + SOURCES += \ $$PWD/exquisite/qqtclickhelper.cpp \ $$PWD/exquisite/qqtdoubleclickhelper.cpp From 33de3a1580ff12b363dd223de8dd7ff257ac9e9f Mon Sep 17 00:00:00 2001 From: AbelTian <2407223896@qq.com> Date: Fri, 18 May 2018 16:26:43 +0800 Subject: [PATCH 2/7] fix click helper behavior --- src/exquisite/qqtcanclickwidget.cpp | 4 +- src/exquisite/qqtclickhelper.cpp | 26 +++++++---- src/exquisite/qqtclickhelper.h | 6 +-- src/exquisite/qqtdoubleclickhelper.cpp | 64 ++++++++++++++++++++++++-- src/exquisite/qqtdoubleclickhelper.h | 8 ++++ 5 files changed, 89 insertions(+), 19 deletions(-) diff --git a/src/exquisite/qqtcanclickwidget.cpp b/src/exquisite/qqtcanclickwidget.cpp index a2ee6963..932306d7 100644 --- a/src/exquisite/qqtcanclickwidget.cpp +++ b/src/exquisite/qqtcanclickwidget.cpp @@ -13,8 +13,8 @@ QQtCanClickWidget::~QQtCanClickWidget() void QQtCanClickWidget::mousePressEvent ( QMouseEvent* event ) { - if ( mClickHelper ) - mClickHelper->mousePressEvent ( event, this ); +// if ( mClickHelper ) +// mClickHelper->mousePressEvent ( event, this ); return QQtWidget::mousePressEvent ( event ); } diff --git a/src/exquisite/qqtclickhelper.cpp b/src/exquisite/qqtclickhelper.cpp index 6c336afb..91bf6d07 100644 --- a/src/exquisite/qqtclickhelper.cpp +++ b/src/exquisite/qqtclickhelper.cpp @@ -4,8 +4,8 @@ QQtClickHelper::QQtClickHelper ( QObject* parent ) { mLongClickInterval = longClickInterval; - t1 = QTime::currentTime(); - t2 = QTime::currentTime(); + t1_press = QTime::currentTime(); + t2_release = t1_press; nClickNum = 0; nLongClickNum = 0; @@ -24,28 +24,36 @@ void QQtClickHelper::mousePressEvent ( QMouseEvent* event, QWidget* userWidget ) p2debug() << "press" << event->pos() << userWidget; mPoint = event->pos(); mClickType = QQtClick; - t1 = QTime::currentTime(); + t1_press = QTime::currentTime(); } void QQtClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget ) { p2debug() << "release" << event->pos() << userWidget; //这一次 current click - t2 = QTime::currentTime(); + QTime t2_release_preview = t2_release; + t2_release = QTime::currentTime(); //这里加了个判断,其实肯定>=0 - if ( t1.msecsTo ( t2 ) >= 0 && t1.msecsTo ( t2 ) <= mLongClickInterval ) + if ( t1_press.msecsTo ( t2_release ) >= 0 && t1_press.msecsTo ( t2_release ) <= mLongClickInterval ) { //单击发生 mClickType = QQtClick; } - else if ( t1.msecsTo ( t2 ) >= 0 && t1.msecsTo ( t2 ) > mLongClickInterval ) + else if ( t1_press.msecsTo ( t2_release ) >= 0 && t1_press.msecsTo ( t2_release ) > mLongClickInterval ) { //长击发生 mClickType = QQtLongClick; + + //这次点击, + //上次的release竟然比press晚,说明press没发生,置位click + //第一次click, 上一次release=press也在这里被置位click + if ( t2_release_preview.msecsTo ( t2_release ) >= 0 + && t2_release_preview.msecsTo ( t1_press ) <= 0 ) + { + mClickType = QQtClick; + } + } - //更新t1 防止用户忘记press,直接release. - //preview click - t1 = QTime::currentTime(); if ( mClickType == QQtLongClick ) { diff --git a/src/exquisite/qqtclickhelper.h b/src/exquisite/qqtclickhelper.h index 8f51fc6f..9bfbfdd5 100644 --- a/src/exquisite/qqtclickhelper.h +++ b/src/exquisite/qqtclickhelper.h @@ -4,7 +4,7 @@ #include #include -#if 0 +#if 1 #define p2debug() p2line() #else #define p2debug() QNoDebug() @@ -91,8 +91,8 @@ protected: int mLongClickInterval; //click 检测使用 - QTime t1;//press relase - QTime t2;//release + QTime t1_press;//press relase + QTime t2_release;//release //click num virtual void checkClickNum(); diff --git a/src/exquisite/qqtdoubleclickhelper.cpp b/src/exquisite/qqtdoubleclickhelper.cpp index ceeb3df2..a8939367 100644 --- a/src/exquisite/qqtdoubleclickhelper.cpp +++ b/src/exquisite/qqtdoubleclickhelper.cpp @@ -7,6 +7,12 @@ QQtDoubleClickHelper::QQtDoubleClickHelper ( QObject* parent ) : nDoubleClickNum = 0; + t1_doubleclick = QTime::currentTime(); + t2_doubleclick = t2_doubleclick; + + t2_release_initial = QTime::currentTime(); + t2_release_preview = t2_release_initial; + mMouseEvent = new QQtMouseEvent; mClickType = QQtNullClick; @@ -45,26 +51,43 @@ void QQtDoubleClickHelper::mousePressEvent ( QMouseEvent* event , QWidget* userW //mClickType = QQtNullClick; m_long_click_timer->start(); m_click_timer->stop(); + + //复用一下t1_press t2_release 这里的实现和父类关系不太大 + t1_press = QTime::currentTime(); } void QQtDoubleClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget ) { p2debug() << "release" << event->pos() << userWidget; + + //添加longClick检测, 更新longclick检测时间 + t2_release_preview = t2_release;//记录上次的release + t2_release = QTime::currentTime(); + //在release-press>longclick暨click时钟判定为longclick后 加一次判断修复误判 防止用户不发press,引起click一直longclick. +// if ( t1_press.msecsTo ( t2_release ) >= mLongClickInterval +// && t2_doubleclick.msecsTo ( t2_release ) >= 0 +// && t2_doubleclick.msecsTo ( t2_release ) < mLongClickInterval ) +// { +// //单击发生 +// mClickType = QQtClick; +// } + //doubleClick检测不依赖press,所以只要发release就会有doubleClick发生. //检测方式: 两次release的间隔小于doubleClickInterval那么触发doubleClick. //这一次 current click - t1 = QTime::currentTime(); + t1_doubleclick = QTime::currentTime(); //这里有小技巧: 这里没有加 && mClickType != QQtClick //难道不会和click时钟混淆吗?不会,因为click时钟那边用的startTime和nowTime两个变量, t2比startTime还早,t1比nowTime还晚,t1-t2绝对比nowTime-startTime还长. //如果是click,绝对不会混淆成doubleClick. //正好mDoubleClickInterval ms代表双击 不代表单击. - if ( t2.msecsTo ( t1 ) >= 0 && t2.msecsTo ( t1 ) <= mDoubleClickInterval ) + if ( t2_doubleclick.msecsTo ( t1_doubleclick ) >= 0 + && t2_doubleclick.msecsTo ( t1_doubleclick ) < mDoubleClickInterval ) { //双击发生 mClickType = QQtDoubleClick; } //上一次 prev click - t2 = QTime::currentTime(); + t2_doubleclick = QTime::currentTime(); //梳理状态 m_long_click_timer->stop(); @@ -191,8 +214,38 @@ void QQtDoubleClickHelper::slotClickTimeout() QTime nowTime = QTime::currentTime(); int t0 = startClickTime.msecsTo ( nowTime ); p2debug() << t0 << mDoubleClickInterval << qApp->doubleClickInterval(); - if ( t0 > mDoubleClickInterval/*qApp->doubleClickInterval()*/ ) + if ( t0 >= mDoubleClickInterval/*qApp->doubleClickInterval()*/ ) { + //先判断是否为长击 + //注意:必须和点击一样在超时的时候检测,否则和双击检测冲突,分不清是长击还是双击.导致长击必发. + //注意:必须press击发. + //不发press 发生误判 认为总是long click + if ( t1_press.msecsTo ( t2_release ) >= 0 + && t1_press.msecsTo ( t2_release ) >= mLongClickInterval ) + { + //长击发生 + mClickType = QQtLongClick; + + //有误判, 未发press的时候, 这个一直都是longclick,其实还有click + //press比前一次release小的时候 其实是click + if ( t2_release_preview.msecsTo ( t2_release ) >= 0 + && t2_release_preview.msecsTo ( t1_press ) <= 0 ) + { + mClickType = QQtClick; + } + + //initial press + if ( t2_release_preview.msecsTo ( t2_release ) >= 0 + && t2_release_preview == t2_release_initial ) + { + mClickType = QQtClick; + } + + //经过以上两部fix,不发press过来,longclick绝不会发生. + mouseReleaseEvent ( mMouseEvent, mUserWidget ); + return; + } + mClickType = QQtClick; mouseReleaseEvent ( mMouseEvent, mUserWidget ); return; @@ -202,7 +255,8 @@ void QQtDoubleClickHelper::slotClickTimeout() void QQtDoubleClickHelper::slotLongClickTimeout() { //longclick超时,确认longclick. - mClickType = QQtLongClick; + //不再使用此处检测,而是改在click时钟检测. + //mClickType = QQtLongClick; m_long_click_timer->stop(); } diff --git a/src/exquisite/qqtdoubleclickhelper.h b/src/exquisite/qqtdoubleclickhelper.h index 5f29d400..e661a867 100644 --- a/src/exquisite/qqtdoubleclickhelper.h +++ b/src/exquisite/qqtdoubleclickhelper.h @@ -96,6 +96,14 @@ protected: //click 检测使用 QTime startClickTime; + //double click检测用 + QTime t1_doubleclick; + QTime t2_doubleclick; + + //long click用 + QTime t2_release_preview; + QTime t2_release_initial; + //click 用 QWidget* mUserWidget; QQtMouseEvent* mMouseEvent; From 88da5a389165865f319d415e55ebae4f2f6bb216 Mon Sep 17 00:00:00 2001 From: AbelTian <2407223896@qq.com> Date: Fri, 18 May 2018 17:34:24 +0800 Subject: [PATCH 3/7] fix checknum action --- src/exquisite/qqtcanclickwidget.cpp | 4 +- src/exquisite/qqtclickhelper.cpp | 73 ++++++++++++++++------ src/exquisite/qqtclickhelper.h | 21 +++++-- src/exquisite/qqtdoubleclickhelper.cpp | 84 ++++++++++++++++++-------- src/exquisite/qqtdoubleclickhelper.h | 15 +++-- 5 files changed, 142 insertions(+), 55 deletions(-) diff --git a/src/exquisite/qqtcanclickwidget.cpp b/src/exquisite/qqtcanclickwidget.cpp index 932306d7..a2ee6963 100644 --- a/src/exquisite/qqtcanclickwidget.cpp +++ b/src/exquisite/qqtcanclickwidget.cpp @@ -13,8 +13,8 @@ QQtCanClickWidget::~QQtCanClickWidget() void QQtCanClickWidget::mousePressEvent ( QMouseEvent* event ) { -// if ( mClickHelper ) -// mClickHelper->mousePressEvent ( event, this ); + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); return QQtWidget::mousePressEvent ( event ); } diff --git a/src/exquisite/qqtclickhelper.cpp b/src/exquisite/qqtclickhelper.cpp index 91bf6d07..4fdd4b32 100644 --- a/src/exquisite/qqtclickhelper.cpp +++ b/src/exquisite/qqtclickhelper.cpp @@ -4,8 +4,12 @@ QQtClickHelper::QQtClickHelper ( QObject* parent ) { mLongClickInterval = longClickInterval; - t1_press = QTime::currentTime(); - t2_release = t1_press; + now_press = QTime::currentTime().addMSecs ( 1 ); + now_release = QTime::currentTime().addMSecs ( 2 ); + + nClickNumWithCancel = 0; + nLongClickNumWithCancel = 0; + nTotalClickNumWithCancel = 0; nClickNum = 0; nLongClickNum = 0; @@ -24,22 +28,22 @@ void QQtClickHelper::mousePressEvent ( QMouseEvent* event, QWidget* userWidget ) p2debug() << "press" << event->pos() << userWidget; mPoint = event->pos(); mClickType = QQtClick; - t1_press = QTime::currentTime(); + now_press = QTime::currentTime(); } void QQtClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget ) { p2debug() << "release" << event->pos() << userWidget; //这一次 current click - QTime t2_release_preview = t2_release; - t2_release = QTime::currentTime(); + QTime t2_release_preview = now_release; + now_release = QTime::currentTime(); //这里加了个判断,其实肯定>=0 - if ( t1_press.msecsTo ( t2_release ) >= 0 && t1_press.msecsTo ( t2_release ) <= mLongClickInterval ) + if ( now_press.msecsTo ( now_release ) >= 0 && now_press.msecsTo ( now_release ) <= mLongClickInterval ) { //单击发生 mClickType = QQtClick; } - else if ( t1_press.msecsTo ( t2_release ) >= 0 && t1_press.msecsTo ( t2_release ) > mLongClickInterval ) + else if ( now_press.msecsTo ( now_release ) >= 0 && now_press.msecsTo ( now_release ) > mLongClickInterval ) { //长击发生 mClickType = QQtLongClick; @@ -47,8 +51,8 @@ void QQtClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget //这次点击, //上次的release竟然比press晚,说明press没发生,置位click //第一次click, 上一次release=press也在这里被置位click - if ( t2_release_preview.msecsTo ( t2_release ) >= 0 - && t2_release_preview.msecsTo ( t1_press ) <= 0 ) + if ( t2_release_preview.msecsTo ( now_release ) >= 0 + && t2_release_preview.msecsTo ( now_press ) <= 0 ) { mClickType = QQtClick; } @@ -58,7 +62,7 @@ void QQtClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget if ( mClickType == QQtLongClick ) { //计算点击数目 - checkClickNum(); + checkClickNumWithCancel(); //修改状态 mClickType = QQtNullClick; @@ -75,6 +79,8 @@ void QQtClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget } } + checkClickNum ( QQtLongClick ); + //发送长信号 p2debug() << "send long click " ; emit longClick(); @@ -86,7 +92,7 @@ void QQtClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget else if ( mClickType == QQtClick ) { //计算点击数目 - checkClickNum(); + checkClickNumWithCancel(); //修改状态 mClickType = QQtNullClick; @@ -103,6 +109,8 @@ void QQtClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget } } + checkClickNum ( QQtClick ); + //发送单击信号 p2debug() << "send click." ; emit click(); @@ -137,15 +145,46 @@ int QQtClickHelper::getLongClickInterval() const return mLongClickInterval; } -quint32 QQtClickHelper::clickNum() const { return nClickNum; } -quint32 QQtClickHelper::longClickNum() const { return nLongClickNum; } - -quint64 QQtClickHelper::totalClickNum() const { return nTotalClickNum; } - -void QQtClickHelper::checkClickNum() +void QQtClickHelper::checkClickNumWithCancel() { switch ( mClickType ) + { + case QQtClick: + { + nClickNumWithCancel++; + if ( nClickNumWithCancel >= 0xFFFFFFFF ) + { + p2debug() << "out......"; + nClickNumWithCancel = 0; + } + } + break; + case QQtLongClick: + { + nLongClickNumWithCancel++; + if ( nLongClickNumWithCancel >= 0xFFFFFFFF ) + { + p2debug() << "out......"; + nLongClickNumWithCancel = 0; + } + } + break; + default: + break; + } + + nTotalClickNumWithCancel = nClickNumWithCancel + nLongClickNumWithCancel; + if ( nTotalClickNumWithCancel >= 0xFFFFFFFFFFFFFFFF ) + { + p2debug() << "out......"; + nTotalClickNumWithCancel = 0; + } +} + +void QQtClickHelper::checkClickNum ( QQtClickHelper::QQtClickType type ) +{ + switch ( type ) { case QQtClick: { diff --git a/src/exquisite/qqtclickhelper.h b/src/exquisite/qqtclickhelper.h index 9bfbfdd5..d08738b8 100644 --- a/src/exquisite/qqtclickhelper.h +++ b/src/exquisite/qqtclickhelper.h @@ -55,9 +55,13 @@ public: void setLongClickInterval ( int millSecond = longClickInterval ); int getLongClickInterval() const; - quint32 clickNum() const; - quint32 longClickNum() const; - quint64 totalClickNum() const; + inline const quint32 clickNum() const { return nClickNum; } + inline const quint32 longClickNum() const { return nLongClickNum; } + inline const quint64 totalClickNum() const { return nTotalClickNum; } + + inline const quint32 clickNumWithCancel() const { return nClickNumWithCancel; } + inline const quint32 longClickNumWithCancel() const { return nLongClickNumWithCancel; } + inline const quint64 totalClickNumWithCancel() const { return nTotalClickNumWithCancel; } /** * 以下用于内部 @@ -91,15 +95,20 @@ protected: int mLongClickInterval; //click 检测使用 - QTime t1_press;//press relase - QTime t2_release;//release + QTime now_press;//press relase + QTime now_release;//release //click num - virtual void checkClickNum(); + virtual void checkClickNumWithCancel(); + virtual void checkClickNum ( QQtClickType type ); quint32 nClickNum; quint32 nLongClickNum; quint64 nTotalClickNum; + + quint32 nClickNumWithCancel; + quint32 nLongClickNumWithCancel; + quint64 nTotalClickNumWithCancel; }; #endif // QQTCLICKHELPER_H diff --git a/src/exquisite/qqtdoubleclickhelper.cpp b/src/exquisite/qqtdoubleclickhelper.cpp index a8939367..21f5640d 100644 --- a/src/exquisite/qqtdoubleclickhelper.cpp +++ b/src/exquisite/qqtdoubleclickhelper.cpp @@ -6,17 +6,18 @@ QQtDoubleClickHelper::QQtDoubleClickHelper ( QObject* parent ) : mDoubleClickInterval = doubleClickInterval; nDoubleClickNum = 0; + nDoubleClickNumWithCancel = 0; - t1_doubleclick = QTime::currentTime(); - t2_doubleclick = t2_doubleclick; + prev_doubleclick = QTime::currentTime().addMSecs ( 3 ); + now_doubleclick = QTime::currentTime().addMSecs ( 4 ); - t2_release_initial = QTime::currentTime(); - t2_release_preview = t2_release_initial; + p2debug() << prev_doubleclick.msecsTo ( now_doubleclick ); + + prev_release = QTime::currentTime().addMSecs ( 5 ); + now_release_initial = QTime::currentTime().addMSecs ( 6 ); mMouseEvent = new QQtMouseEvent; - mClickType = QQtNullClick; - m_click_timer = new QTimer ( this ); m_click_timer->setSingleShot ( false ); //击发延迟20ms @@ -53,7 +54,7 @@ void QQtDoubleClickHelper::mousePressEvent ( QMouseEvent* event , QWidget* userW m_click_timer->stop(); //复用一下t1_press t2_release 这里的实现和父类关系不太大 - t1_press = QTime::currentTime(); + now_press = QTime::currentTime(); } void QQtDoubleClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget ) @@ -61,8 +62,8 @@ void QQtDoubleClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* user p2debug() << "release" << event->pos() << userWidget; //添加longClick检测, 更新longclick检测时间 - t2_release_preview = t2_release;//记录上次的release - t2_release = QTime::currentTime(); + prev_release = now_release;//记录上次的release + now_release = QTime::currentTime(); //在release-press>longclick暨click时钟判定为longclick后 加一次判断修复误判 防止用户不发press,引起click一直longclick. // if ( t1_press.msecsTo ( t2_release ) >= mLongClickInterval // && t2_doubleclick.msecsTo ( t2_release ) >= 0 @@ -75,19 +76,20 @@ void QQtDoubleClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* user //doubleClick检测不依赖press,所以只要发release就会有doubleClick发生. //检测方式: 两次release的间隔小于doubleClickInterval那么触发doubleClick. //这一次 current click - t1_doubleclick = QTime::currentTime(); + now_doubleclick = QTime::currentTime(); //这里有小技巧: 这里没有加 && mClickType != QQtClick //难道不会和click时钟混淆吗?不会,因为click时钟那边用的startTime和nowTime两个变量, t2比startTime还早,t1比nowTime还晚,t1-t2绝对比nowTime-startTime还长. //如果是click,绝对不会混淆成doubleClick. //正好mDoubleClickInterval ms代表双击 不代表单击. - if ( t2_doubleclick.msecsTo ( t1_doubleclick ) >= 0 - && t2_doubleclick.msecsTo ( t1_doubleclick ) < mDoubleClickInterval ) + p2debug() << prev_doubleclick << now_doubleclick << mClickType; + if ( prev_doubleclick.msecsTo ( now_doubleclick ) >= 0 + && prev_doubleclick.msecsTo ( now_doubleclick ) < mDoubleClickInterval ) { //双击发生 mClickType = QQtDoubleClick; } //上一次 prev click - t2_doubleclick = QTime::currentTime(); + prev_doubleclick = QTime::currentTime(); //梳理状态 m_long_click_timer->stop(); @@ -96,7 +98,7 @@ void QQtDoubleClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* user if ( mClickType == QQtLongClick ) { //计算点击数目 - checkClickNum(); + checkClickNumWithCancel(); //修改状态 mClickType = QQtNullClick; @@ -113,6 +115,8 @@ void QQtDoubleClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* user } } + checkClickNum ( QQtLongClick ); + //发送长信号 p2debug() << "send long click " ; emit longClick(); @@ -124,7 +128,7 @@ void QQtDoubleClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* user else if ( mClickType == QQtDoubleClick ) { //计算点击数目 - checkClickNum(); + checkClickNumWithCancel(); //修改状态 mClickType = QQtNullClick; @@ -141,6 +145,8 @@ void QQtDoubleClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* user } } + checkClickNum ( QQtDoubleClick ); + //发送双击信号 p2debug() << "send double click." ; emit doubleClick(); @@ -152,7 +158,7 @@ void QQtDoubleClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* user else if ( mClickType == QQtClick ) { //计算点击数目 - checkClickNum(); + checkClickNumWithCancel(); //修改状态 mClickType = QQtNullClick; @@ -169,6 +175,8 @@ void QQtDoubleClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* user } } + checkClickNum ( QQtClick ); + //发送单击信号 p2debug() << "send click." ; emit click(); @@ -220,23 +228,23 @@ void QQtDoubleClickHelper::slotClickTimeout() //注意:必须和点击一样在超时的时候检测,否则和双击检测冲突,分不清是长击还是双击.导致长击必发. //注意:必须press击发. //不发press 发生误判 认为总是long click - if ( t1_press.msecsTo ( t2_release ) >= 0 - && t1_press.msecsTo ( t2_release ) >= mLongClickInterval ) + if ( now_press.msecsTo ( now_release ) >= 0 + && now_press.msecsTo ( now_release ) >= mLongClickInterval ) { //长击发生 mClickType = QQtLongClick; //有误判, 未发press的时候, 这个一直都是longclick,其实还有click //press比前一次release小的时候 其实是click - if ( t2_release_preview.msecsTo ( t2_release ) >= 0 - && t2_release_preview.msecsTo ( t1_press ) <= 0 ) + if ( prev_release.msecsTo ( now_release ) >= 0 + && prev_release.msecsTo ( now_press ) <= 0 ) { mClickType = QQtClick; } //initial press - if ( t2_release_preview.msecsTo ( t2_release ) >= 0 - && t2_release_preview == t2_release_initial ) + if ( prev_release.msecsTo ( now_release ) >= 0 + && prev_release == now_release_initial ) { mClickType = QQtClick; } @@ -265,10 +273,38 @@ void QQtDoubleClickHelper::slotDoubleClickTimeout() } -void QQtDoubleClickHelper::checkClickNum() +void QQtDoubleClickHelper::checkClickNumWithCancel() { - QQtClickHelper::checkClickNum(); + QQtClickHelper::checkClickNumWithCancel(); switch ( mClickType ) + { + case QQtDoubleClick: + { + nDoubleClickNumWithCancel++; + if ( nDoubleClickNumWithCancel >= 0xFFFFFFFF ) + { + p2debug() << "out......"; + nDoubleClickNumWithCancel = 0; + } + } + break; + default: + break; + } + + nTotalClickNumWithCancel = nClickNumWithCancel + nLongClickNumWithCancel + nDoubleClickNumWithCancel; + if ( nTotalClickNumWithCancel >= 0xFFFFFFFFFFFFFFFF ) + { + p2debug() << "out......"; + nTotalClickNumWithCancel = 0; + } +} + + +void QQtDoubleClickHelper::checkClickNum ( QQtClickType type ) +{ + QQtClickHelper::checkClickNum ( type ); + switch ( type ) { case QQtDoubleClick: { diff --git a/src/exquisite/qqtdoubleclickhelper.h b/src/exquisite/qqtdoubleclickhelper.h index e661a867..e4e1c8b8 100644 --- a/src/exquisite/qqtdoubleclickhelper.h +++ b/src/exquisite/qqtdoubleclickhelper.h @@ -66,7 +66,8 @@ public: return mDoubleClickInterval; } - quint32 doubleClickNum() const { return nDoubleClickNum; } + inline const quint32 doubleClickNum() const { return nDoubleClickNum; } + inline const quint32 doubleClickNumWithCancel() const { return nDoubleClickNumWithCancel; } /** * 以下用于内部 @@ -97,20 +98,22 @@ protected: QTime startClickTime; //double click检测用 - QTime t1_doubleclick; - QTime t2_doubleclick; + QTime prev_doubleclick; + QTime now_doubleclick; //long click用 - QTime t2_release_preview; - QTime t2_release_initial; + QTime prev_release; + QTime now_release_initial; //click 用 QWidget* mUserWidget; QQtMouseEvent* mMouseEvent; //click num - virtual void checkClickNum(); + virtual void checkClickNumWithCancel(); + virtual void checkClickNum ( QQtClickType type ) override; quint32 nDoubleClickNum; + quint32 nDoubleClickNumWithCancel; }; #endif // QQTDOUBLECLICKHELPER_H From bfb412b324684713a70668aab84293433eabed08 Mon Sep 17 00:00:00 2001 From: AbelTian <2407223896@qq.com> Date: Fri, 18 May 2018 19:52:17 +0800 Subject: [PATCH 4/7] add click widgets --- .../{ => clickwidgets}/qqtclickhelper.cpp | 15 ++- .../{ => clickwidgets}/qqtclickhelper.h | 31 +++-- src/exquisite/clickwidgets/qqtclicklabel.cpp | 1 + src/exquisite/clickwidgets/qqtclicklabel.h | 105 ++++++++++++++++ .../qqtclicksoundhelper.cpp | 0 .../{ => clickwidgets}/qqtclicksoundhelper.h | 0 src/exquisite/clickwidgets/qqtclickwidget.cpp | 1 + src/exquisite/clickwidgets/qqtclickwidget.h | 103 ++++++++++++++++ .../qqtdoubleclickhelper.cpp | 0 .../{ => clickwidgets}/qqtdoubleclickhelper.h | 0 .../clickwidgets/qqtdoubleclicklabel.cpp | 1 + .../clickwidgets/qqtdoubleclicklabel.h | 112 +++++++++++++++++ .../clickwidgets/qqtdoubleclickwidget.cpp | 1 + .../clickwidgets/qqtdoubleclickwidget.h | 115 ++++++++++++++++++ .../clickwidgets/qqtlongclicklabel.cpp | 1 + .../clickwidgets/qqtlongclicklabel.h | 108 ++++++++++++++++ .../clickwidgets/qqtlongclickwidget.cpp | 1 + .../clickwidgets/qqtlongclickwidget.h | 107 ++++++++++++++++ src/exquisite/qqtcanclicklabel.cpp | 35 ------ src/exquisite/qqtcanclicklabel.h | 48 -------- src/exquisite/qqtcanclickwidget.cpp | 35 ------ src/exquisite/qqtcanclickwidget.h | 48 -------- src/exquisite/qqtclicklabel.cpp | 35 ------ src/exquisite/qqtclicklabel.h | 35 ------ src/exquisite/qqtclickwidget.cpp | 35 ------ src/exquisite/qqtclickwidget.h | 41 ------- src/exquisite/qqtdoubleclicklabel.cpp | 37 ------ src/exquisite/qqtdoubleclicklabel.h | 37 ------ src/exquisite/qqtdoubleclickwidget.cpp | 38 ------ src/exquisite/qqtdoubleclickwidget.h | 39 ------ src/qqt_header.pri | 2 + src/qqt_source.pri | 63 +++++----- 32 files changed, 728 insertions(+), 502 deletions(-) rename src/exquisite/{ => clickwidgets}/qqtclickhelper.cpp (94%) rename src/exquisite/{ => clickwidgets}/qqtclickhelper.h (82%) create mode 100644 src/exquisite/clickwidgets/qqtclicklabel.cpp create mode 100644 src/exquisite/clickwidgets/qqtclicklabel.h rename src/exquisite/{ => clickwidgets}/qqtclicksoundhelper.cpp (100%) rename src/exquisite/{ => clickwidgets}/qqtclicksoundhelper.h (100%) create mode 100644 src/exquisite/clickwidgets/qqtclickwidget.cpp create mode 100644 src/exquisite/clickwidgets/qqtclickwidget.h rename src/exquisite/{ => clickwidgets}/qqtdoubleclickhelper.cpp (100%) rename src/exquisite/{ => clickwidgets}/qqtdoubleclickhelper.h (100%) create mode 100644 src/exquisite/clickwidgets/qqtdoubleclicklabel.cpp create mode 100644 src/exquisite/clickwidgets/qqtdoubleclicklabel.h create mode 100644 src/exquisite/clickwidgets/qqtdoubleclickwidget.cpp create mode 100644 src/exquisite/clickwidgets/qqtdoubleclickwidget.h create mode 100644 src/exquisite/clickwidgets/qqtlongclicklabel.cpp create mode 100644 src/exquisite/clickwidgets/qqtlongclicklabel.h create mode 100644 src/exquisite/clickwidgets/qqtlongclickwidget.cpp create mode 100644 src/exquisite/clickwidgets/qqtlongclickwidget.h delete mode 100644 src/exquisite/qqtcanclicklabel.cpp delete mode 100644 src/exquisite/qqtcanclicklabel.h delete mode 100644 src/exquisite/qqtcanclickwidget.cpp delete mode 100644 src/exquisite/qqtcanclickwidget.h delete mode 100644 src/exquisite/qqtclicklabel.cpp delete mode 100644 src/exquisite/qqtclicklabel.h delete mode 100644 src/exquisite/qqtclickwidget.cpp delete mode 100644 src/exquisite/qqtclickwidget.h delete mode 100644 src/exquisite/qqtdoubleclicklabel.cpp delete mode 100644 src/exquisite/qqtdoubleclicklabel.h delete mode 100644 src/exquisite/qqtdoubleclickwidget.cpp delete mode 100644 src/exquisite/qqtdoubleclickwidget.h diff --git a/src/exquisite/qqtclickhelper.cpp b/src/exquisite/clickwidgets/qqtclickhelper.cpp similarity index 94% rename from src/exquisite/qqtclickhelper.cpp rename to src/exquisite/clickwidgets/qqtclickhelper.cpp index 4fdd4b32..4f0a19e6 100644 --- a/src/exquisite/qqtclickhelper.cpp +++ b/src/exquisite/clickwidgets/qqtclickhelper.cpp @@ -85,8 +85,13 @@ void QQtClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget p2debug() << "send long click " ; emit longClick(); emit longClickWithPoint ( event->pos() ); - emit longClickWithPointF ( event->localPos() ); + +#if 0 + emit longClick ( userWidget ); + emit longClickWithPoint ( event->pos(), userWidget ); + emit longClickWithPointF ( event->localPos(), userWidget ); +#endif return; } else if ( mClickType == QQtClick ) @@ -115,8 +120,14 @@ void QQtClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget p2debug() << "send click." ; emit click(); emit clickWithPoint ( event->pos() ); - emit clickWithPointF ( event->localPos() ); + +#if 0 + emit click ( userWidget ); + emit clickWithPoint ( event->pos(), userWidget ); + emit clickWithPointF ( event->localPos(), userWidget ); +#endif + return; } diff --git a/src/exquisite/qqtclickhelper.h b/src/exquisite/clickwidgets/qqtclickhelper.h similarity index 82% rename from src/exquisite/qqtclickhelper.h rename to src/exquisite/clickwidgets/qqtclickhelper.h index d08738b8..44f6c23d 100644 --- a/src/exquisite/qqtclickhelper.h +++ b/src/exquisite/clickwidgets/qqtclickhelper.h @@ -30,13 +30,9 @@ public: explicit QQtClickHelper ( QObject* parent = 0 ); virtual ~QQtClickHelper(); - //调用于userWidget相对应的Event里 - //允许重写 -public: - virtual void mousePressEvent ( QMouseEvent* event, QWidget* userWidget = 0 ); - virtual void mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget = 0 ); - virtual void mouseDoubleClickEvent ( QMouseEvent* event, QWidget* userWidget = 0 ); - + //发给业务层 + //发回界面层 + //这些信号不区分Widget,谁发过来都发出去,不论Widget signals: void click(); void longClick(); @@ -49,6 +45,27 @@ signals: void clickWithPointF ( QPointF point ); void longClickWithPointF ( QPointF point ); +#if 0 + //发给业务层 + //发回界面层 + //这里的信号都带着Widget指针,可以区分Widget +signals: + void click ( QWidget* userWidget ); + void clickWithPoint ( QPoint point, QWidget* userWidget ); + void clickWithPointF ( QPointF point, QWidget* userWidget ); + + void longClick ( QWidget* userWidget ); + void longClickWithPoint ( QPoint point, QWidget* userWidget ); + void longClickWithPointF ( QPointF point, QWidget* userWidget ); +#endif + + //调用于userWidget相对应的Event里 + //允许重写 +public: + virtual void mousePressEvent ( QMouseEvent* event, QWidget* userWidget = 0 ); + virtual void mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget = 0 ); + virtual void mouseDoubleClickEvent ( QMouseEvent* event, QWidget* userWidget = 0 ); + //optional public: //设置longClick超时 default:1200ms diff --git a/src/exquisite/clickwidgets/qqtclicklabel.cpp b/src/exquisite/clickwidgets/qqtclicklabel.cpp new file mode 100644 index 00000000..d147a0bc --- /dev/null +++ b/src/exquisite/clickwidgets/qqtclicklabel.cpp @@ -0,0 +1 @@ +#include "qqtclicklabel.h" diff --git a/src/exquisite/clickwidgets/qqtclicklabel.h b/src/exquisite/clickwidgets/qqtclicklabel.h new file mode 100644 index 00000000..1815f90a --- /dev/null +++ b/src/exquisite/clickwidgets/qqtclicklabel.h @@ -0,0 +1,105 @@ +#ifndef QQTCLICKLABEL_H +#define QQTCLICKLABEL_H + +#include +#include + +#include +#include + +/** + * 这个是个basic类 提供click信号 + * 提供安装ClickHelper的能力 + * 提供MouseEvent响应 + * + * 用户使用方法 + * new ClickHelper + * installClickHelper + */ +class QQTSHARED_EXPORT QQtClickLabel : public QQtLabel +{ + Q_OBJECT +public: + explicit QQtClickLabel ( QWidget* parent = 0 ) : + QQtLabel ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtClickHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtClickLabel() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + +signals: + void clickWithPoint ( QPoint point ); + + /** + * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + */ +public: + inline void installClickHelper ( QQtClickHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline const QQtClickHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + } + +private: + QQtClickHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtLabel::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtLabel::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtLabel::mouseDoubleClickEvent ( event ); + } +}; + +#endif // QQTCLICKLABEL_H diff --git a/src/exquisite/qqtclicksoundhelper.cpp b/src/exquisite/clickwidgets/qqtclicksoundhelper.cpp similarity index 100% rename from src/exquisite/qqtclicksoundhelper.cpp rename to src/exquisite/clickwidgets/qqtclicksoundhelper.cpp diff --git a/src/exquisite/qqtclicksoundhelper.h b/src/exquisite/clickwidgets/qqtclicksoundhelper.h similarity index 100% rename from src/exquisite/qqtclicksoundhelper.h rename to src/exquisite/clickwidgets/qqtclicksoundhelper.h diff --git a/src/exquisite/clickwidgets/qqtclickwidget.cpp b/src/exquisite/clickwidgets/qqtclickwidget.cpp new file mode 100644 index 00000000..25e068d5 --- /dev/null +++ b/src/exquisite/clickwidgets/qqtclickwidget.cpp @@ -0,0 +1 @@ +#include "qqtclickwidget.h" diff --git a/src/exquisite/clickwidgets/qqtclickwidget.h b/src/exquisite/clickwidgets/qqtclickwidget.h new file mode 100644 index 00000000..e6f6c850 --- /dev/null +++ b/src/exquisite/clickwidgets/qqtclickwidget.h @@ -0,0 +1,103 @@ +#ifndef QQTCLICKWIDGET_H +#define QQTCLICKWIDGET_H + +#include +#include + +#include +#include + +/** + * 内置ClickHelper + * + * 添加了click支持的QQtWidget + * 这个Widget表示了如何使用QQtWidgetClickHelper和它的子类 + * +*/ +class QQTSHARED_EXPORT QQtClickWidget : public QQtWidget +{ + Q_OBJECT +public: + explicit QQtClickWidget ( QWidget* parent = 0 ) : + QQtWidget ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtClickHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtClickWidget() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + +signals: + void clickWithPoint ( QPoint point ); + + /** + * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + */ +public: + inline void installClickHelper ( QQtClickHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline const QQtClickHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + } + +private: + QQtClickHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtWidget::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtWidget::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtWidget::mouseDoubleClickEvent ( event ); + } +}; + +#endif // QQTCLICKWIDGET_H diff --git a/src/exquisite/qqtdoubleclickhelper.cpp b/src/exquisite/clickwidgets/qqtdoubleclickhelper.cpp similarity index 100% rename from src/exquisite/qqtdoubleclickhelper.cpp rename to src/exquisite/clickwidgets/qqtdoubleclickhelper.cpp diff --git a/src/exquisite/qqtdoubleclickhelper.h b/src/exquisite/clickwidgets/qqtdoubleclickhelper.h similarity index 100% rename from src/exquisite/qqtdoubleclickhelper.h rename to src/exquisite/clickwidgets/qqtdoubleclickhelper.h diff --git a/src/exquisite/clickwidgets/qqtdoubleclicklabel.cpp b/src/exquisite/clickwidgets/qqtdoubleclicklabel.cpp new file mode 100644 index 00000000..a10cc6aa --- /dev/null +++ b/src/exquisite/clickwidgets/qqtdoubleclicklabel.cpp @@ -0,0 +1 @@ +#include "qqtdoubleclicklabel.h" diff --git a/src/exquisite/clickwidgets/qqtdoubleclicklabel.h b/src/exquisite/clickwidgets/qqtdoubleclicklabel.h new file mode 100644 index 00000000..a178d79a --- /dev/null +++ b/src/exquisite/clickwidgets/qqtdoubleclicklabel.h @@ -0,0 +1,112 @@ +#ifndef QQTDOUBLECLICKLABEL_H +#define QQTDOUBLECLICKLABEL_H + +#include +#include + +#include +#include + +/** + * 这个是个虚类 + * 提供安装ClickHelper的能力 + */ +class QQTSHARED_EXPORT QQtDoubleClickLabel : public QQtLabel +{ +public: + explicit QQtDoubleClickLabel ( QWidget* parent = 0 ) : + QQtLabel ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtDoubleClickHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtDoubleClickLabel() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + void longClick(); + void doubleClick(); + +signals: + void clickWithPoint ( QPoint point ); + void longClickWithPoint ( QPoint point ); + void doubleClickWithPoint ( QPoint point ); + + /** + * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + */ +public: + inline void installClickHelper ( QQtClickHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline const QQtClickHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + connect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + disconnect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, + SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); + } + +private: + QQtClickHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtLabel::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtLabel::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtLabel::mouseDoubleClickEvent ( event ); + } +}; + +#endif // QQTDOUBLECLICKLABEL_H diff --git a/src/exquisite/clickwidgets/qqtdoubleclickwidget.cpp b/src/exquisite/clickwidgets/qqtdoubleclickwidget.cpp new file mode 100644 index 00000000..1e031506 --- /dev/null +++ b/src/exquisite/clickwidgets/qqtdoubleclickwidget.cpp @@ -0,0 +1 @@ +#include "qqtdoubleclickwidget.h" diff --git a/src/exquisite/clickwidgets/qqtdoubleclickwidget.h b/src/exquisite/clickwidgets/qqtdoubleclickwidget.h new file mode 100644 index 00000000..130c7b38 --- /dev/null +++ b/src/exquisite/clickwidgets/qqtdoubleclickwidget.h @@ -0,0 +1,115 @@ +#ifndef QQTDOUBLECLICKWIDGET_H +#define QQTDOUBLECLICKWIDGET_H + +#include +#include + +#include +#include + +/** + * 内置DoubleClickHelper + * + * 添加了doubleClick支持的QQtClickWidget + * 这个Widget表示了如何使用QQtWidgetClickHelper和它的子类 +*/ +class QQTSHARED_EXPORT QQtDoubleClickWidget : public QQtWidget +{ + Q_OBJECT +public: + explicit QQtDoubleClickWidget ( QWidget* parent = 0 ) : + QQtWidget ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtDoubleClickHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtDoubleClickWidget() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + void longClick(); + void doubleClick(); + +signals: + void clickWithPoint ( QPoint point ); + void longClickWithPoint ( QPoint point ); + void doubleClickWithPoint ( QPoint point ); + + /** + * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + */ +public: + inline void installClickHelper ( QQtClickHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline const QQtClickHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + connect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + disconnect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, + SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); + } + +private: + QQtClickHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtWidget::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtWidget::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtWidget::mouseDoubleClickEvent ( event ); + } +}; + +#endif // QQTDOUBLECLICKWIDGET_H diff --git a/src/exquisite/clickwidgets/qqtlongclicklabel.cpp b/src/exquisite/clickwidgets/qqtlongclicklabel.cpp new file mode 100644 index 00000000..9f489ebb --- /dev/null +++ b/src/exquisite/clickwidgets/qqtlongclicklabel.cpp @@ -0,0 +1 @@ +#include "qqtlongclicklabel.h" diff --git a/src/exquisite/clickwidgets/qqtlongclicklabel.h b/src/exquisite/clickwidgets/qqtlongclicklabel.h new file mode 100644 index 00000000..9c369859 --- /dev/null +++ b/src/exquisite/clickwidgets/qqtlongclicklabel.h @@ -0,0 +1,108 @@ +#ifndef QQTLONGCLICKLABEL_H +#define QQTLONGCLICKLABEL_H + +#include +#include + +#include +#include + +/** + * 这个是个虚类 + * 提供安装ClickHelper的能力 + * 为确定功能的子类Label服务 + */ +class QQTSHARED_EXPORT QQtLongClickLabel : public QQtLabel +{ + Q_OBJECT +public: + explicit QQtLongClickLabel ( QWidget* parent = 0 ) : + QQtLabel ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtClickHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtLongClickLabel() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + void longClick(); + +signals: + void clickWithPoint ( QPoint point ); + void longClickWithPoint ( QPoint point ); + + /** + * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + */ +public: + inline void installClickHelper ( QQtClickHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline const QQtClickHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + } + +private: + QQtClickHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtLabel::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtLabel::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtLabel::mouseDoubleClickEvent ( event ); + } + +}; + +#endif // QQTLONGCLICKLABEL_H diff --git a/src/exquisite/clickwidgets/qqtlongclickwidget.cpp b/src/exquisite/clickwidgets/qqtlongclickwidget.cpp new file mode 100644 index 00000000..2d96cfd3 --- /dev/null +++ b/src/exquisite/clickwidgets/qqtlongclickwidget.cpp @@ -0,0 +1 @@ +#include "qqtlongclickwidget.h" diff --git a/src/exquisite/clickwidgets/qqtlongclickwidget.h b/src/exquisite/clickwidgets/qqtlongclickwidget.h new file mode 100644 index 00000000..bb5687ff --- /dev/null +++ b/src/exquisite/clickwidgets/qqtlongclickwidget.h @@ -0,0 +1,107 @@ +#ifndef QQTLONGCLICKWIDGET_H +#define QQTLONGCLICKWIDGET_H + +#include +#include + +#include +#include + +/** + * 提供安装ClickHelper的能力 + * 为确定功能的子类Widget服务 + */ +class QQTSHARED_EXPORT QQtLongClickWidget : public QQtWidget +{ + Q_OBJECT + +public: + explicit QQtLongClickWidget ( QWidget* parent = 0 ) : + QQtWidget ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtClickHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtLongClickWidget() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + void longClick(); + +signals: + void clickWithPoint ( QPoint point ); + void longClickWithPoint ( QPoint point ); + + /** + * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + */ +public: + inline void installClickHelper ( QQtClickHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline const QQtClickHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + } + +private: + QQtClickHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtWidget::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtWidget::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtWidget::mouseDoubleClickEvent ( event ); + } +}; + +#endif // QQTLONGCLICKWIDGET_H diff --git a/src/exquisite/qqtcanclicklabel.cpp b/src/exquisite/qqtcanclicklabel.cpp deleted file mode 100644 index 8db3eca7..00000000 --- a/src/exquisite/qqtcanclicklabel.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "qqtcanclicklabel.h" - -QQtCanClickLabel::QQtCanClickLabel ( QWidget* parent ) : - QQtLabel ( parent ) -{ - mClickHelper = 0; -} - -QQtCanClickLabel::~QQtCanClickLabel() -{ -} - - -void QQtCanClickLabel::mousePressEvent ( QMouseEvent* event ) -{ - if ( mClickHelper ) - mClickHelper->mousePressEvent ( event, this ); - return QQtLabel::mousePressEvent ( event ); -} - -void QQtCanClickLabel::mouseReleaseEvent ( QMouseEvent* event ) -{ - if ( mClickHelper ) - mClickHelper->mouseReleaseEvent ( event, this ); - return QQtLabel::mouseReleaseEvent ( event ); -} - -void QQtCanClickLabel::mouseDoubleClickEvent ( QMouseEvent* event ) -{ - if ( mClickHelper ) - mClickHelper->mouseDoubleClickEvent ( event, this ); - return QQtLabel::mouseDoubleClickEvent ( event ); -} - - diff --git a/src/exquisite/qqtcanclicklabel.h b/src/exquisite/qqtcanclicklabel.h deleted file mode 100644 index d9f2cccf..00000000 --- a/src/exquisite/qqtcanclicklabel.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef QQTCANCLICKLABEL_H -#define QQTCANCLICKLABEL_H - -#include -#include - -#include -#include - -/** - * 这个是个虚类 - * 提供安装ClickHelper的能力 - * 为确定功能的子类Label服务 - */ -class QQTSHARED_EXPORT QQtCanClickLabel : public QQtLabel -{ - Q_OBJECT -public: - explicit QQtCanClickLabel ( QWidget* parent = 0 ); - virtual ~QQtCanClickLabel(); - -signals: - -signals: - -public: - inline void setClickHelper ( QQtClickHelper* helper ) { - uninstallClickHelper(); - mClickHelper = helper; - installClickHelper(); - } - inline const QQtClickHelper* clickHelper() const { - return mClickHelper; - } -protected: - //需要重写 - virtual void installClickHelper() {} - virtual void uninstallClickHelper() {} - QQtClickHelper* mClickHelper; - - // QWidget interface -protected: - virtual void mousePressEvent ( QMouseEvent* event ) override; - virtual void mouseReleaseEvent ( QMouseEvent* event ) override; - virtual void mouseDoubleClickEvent ( QMouseEvent* event ) override; -}; - -#endif // QQTCANCLICKLABEL_H diff --git a/src/exquisite/qqtcanclickwidget.cpp b/src/exquisite/qqtcanclickwidget.cpp deleted file mode 100644 index a2ee6963..00000000 --- a/src/exquisite/qqtcanclickwidget.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "qqtcanclickwidget.h" - -QQtCanClickWidget::QQtCanClickWidget ( QWidget* parent ) : - QQtWidget ( parent ) -{ - mClickHelper = 0; -} - -QQtCanClickWidget::~QQtCanClickWidget() -{ -} - - -void QQtCanClickWidget::mousePressEvent ( QMouseEvent* event ) -{ - if ( mClickHelper ) - mClickHelper->mousePressEvent ( event, this ); - return QQtWidget::mousePressEvent ( event ); -} - -void QQtCanClickWidget::mouseReleaseEvent ( QMouseEvent* event ) -{ - if ( mClickHelper ) - mClickHelper->mouseReleaseEvent ( event, this ); - return QQtWidget::mouseReleaseEvent ( event ); -} - -void QQtCanClickWidget::mouseDoubleClickEvent ( QMouseEvent* event ) -{ - if ( mClickHelper ) - mClickHelper->mouseDoubleClickEvent ( event, this ); - return QQtWidget::mouseDoubleClickEvent ( event ); -} - - diff --git a/src/exquisite/qqtcanclickwidget.h b/src/exquisite/qqtcanclickwidget.h deleted file mode 100644 index 07e12e99..00000000 --- a/src/exquisite/qqtcanclickwidget.h +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef QQTCANCLICKWIDGET_H -#define QQTCANCLICKWIDGET_H - -#include -#include - -#include -#include - -/** - * 这个是个虚类 - * 提供安装ClickHelper的能力 - * 为确定功能的子类Widget服务 - */ -class QQTSHARED_EXPORT QQtCanClickWidget : public QQtWidget -{ - Q_OBJECT -public: - explicit QQtCanClickWidget ( QWidget* parent = 0 ); - virtual ~QQtCanClickWidget(); - -signals: - -signals: - -public: - inline void setClickHelper ( QQtClickHelper* helper ) { - uninstallClickHelper(); - mClickHelper = helper; - installClickHelper(); - } - inline const QQtClickHelper* clickHelper() const { - return mClickHelper; - } -protected: - //需要重写 - virtual void installClickHelper() {} - virtual void uninstallClickHelper() {} - QQtClickHelper* mClickHelper; - - // QWidget interface -protected: - virtual void mousePressEvent ( QMouseEvent* event ) override; - virtual void mouseReleaseEvent ( QMouseEvent* event ) override; - virtual void mouseDoubleClickEvent ( QMouseEvent* event ) override; -}; - -#endif // QQTCANCLICKWIDGET_H diff --git a/src/exquisite/qqtclicklabel.cpp b/src/exquisite/qqtclicklabel.cpp deleted file mode 100644 index 24696531..00000000 --- a/src/exquisite/qqtclicklabel.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "qqtclicklabel.h" - -QQtClickLabel::QQtClickLabel ( QWidget* parent ) : - QQtCanClickLabel ( parent ) -{ - mClickHelper = new QQtClickHelper ( this ); - installClickHelper(); -} - -QQtClickLabel::~QQtClickLabel() -{ -} - -void QQtClickLabel::installClickHelper() -{ - if ( !mClickHelper ) - return; - - connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); - connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); - connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); - connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); -} - -void QQtClickLabel::uninstallClickHelper() -{ - if ( !mClickHelper ) - return; - - disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); - disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); - disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); - disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); -} - diff --git a/src/exquisite/qqtclicklabel.h b/src/exquisite/qqtclicklabel.h deleted file mode 100644 index 4341bcb6..00000000 --- a/src/exquisite/qqtclicklabel.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef QQTCLICKLABEL_H -#define QQTCLICKLABEL_H - -#include -#include - -#include -#include - -/** - * 这个是个虚类 - * 提供安装ClickHelper的能力 - */ -class QQTSHARED_EXPORT QQtClickLabel : public QQtCanClickLabel -{ - Q_OBJECT -public: - explicit QQtClickLabel ( QWidget* parent = 0 ); - virtual ~QQtClickLabel(); - -signals: - void click(); - void longClick(); - -signals: - void clickWithPoint ( QPoint point ); - void longClickWithPoint ( QPoint point ); - - // QQtWidget interface -protected: - virtual void installClickHelper() override; - virtual void uninstallClickHelper() override; -}; - -#endif // QQTCLICKLABEL_H diff --git a/src/exquisite/qqtclickwidget.cpp b/src/exquisite/qqtclickwidget.cpp deleted file mode 100644 index 15ded5b8..00000000 --- a/src/exquisite/qqtclickwidget.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "qqtclickwidget.h" - -QQtClickWidget::QQtClickWidget ( QWidget* parent ) : - QQtCanClickWidget ( parent ) -{ - mClickHelper = new QQtClickHelper ( this ); - installClickHelper(); -} - -QQtClickWidget::~QQtClickWidget() -{ -} - -void QQtClickWidget::installClickHelper() -{ - if ( !mClickHelper ) - return; - - connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); - connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); - connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); - connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); -} - -void QQtClickWidget::uninstallClickHelper() -{ - if ( !mClickHelper ) - return; - - disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); - disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); - disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); - disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); -} - diff --git a/src/exquisite/qqtclickwidget.h b/src/exquisite/qqtclickwidget.h deleted file mode 100644 index 840c7d3b..00000000 --- a/src/exquisite/qqtclickwidget.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef QQTCLICKWIDGET_H -#define QQTCLICKWIDGET_H - -#include -#include - -#include -#include - -/** - * 内置ClickHelper - * - * 添加了longClick支持的QQtCanClickWidget - * 这个Widget表示了如何使用QQtWidgetClickHelper和它的子类 - * -*/ -class QQTSHARED_EXPORT QQtClickWidget : public QQtCanClickWidget -{ - Q_OBJECT -public: - explicit QQtClickWidget ( QWidget* parent = 0 ); - virtual ~QQtClickWidget(); - - /** - * 按键功能支持者 - */ -signals: - void click(); - void longClick(); - -signals: - void clickWithPoint ( QPoint point ); - void longClickWithPoint ( QPoint point ); - - // QQtWidget interface -protected: - virtual void installClickHelper() override; - virtual void uninstallClickHelper() override; -}; - -#endif // QQTCLICKWIDGET_H diff --git a/src/exquisite/qqtdoubleclicklabel.cpp b/src/exquisite/qqtdoubleclicklabel.cpp deleted file mode 100644 index 6664357a..00000000 --- a/src/exquisite/qqtdoubleclicklabel.cpp +++ /dev/null @@ -1,37 +0,0 @@ -#include "qqtdoubleclicklabel.h" - -QQtDoubleClickLabel::QQtDoubleClickLabel ( QWidget* parent ) : - QQtCanClickLabel ( parent ) -{ - mClickHelper = new QQtDoubleClickHelper ( this ); - installClickHelper(); -} - -QQtDoubleClickLabel::~QQtDoubleClickLabel() -{ -} - -void QQtDoubleClickLabel::installClickHelper() -{ - if ( !mClickHelper ) - return; - connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); - connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); - connect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); - connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); - connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); - connect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); -} - -void QQtDoubleClickLabel::uninstallClickHelper() -{ - if ( !mClickHelper ) - return; - disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); - disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); - disconnect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); - disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); - disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); - disconnect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, - SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); -} diff --git a/src/exquisite/qqtdoubleclicklabel.h b/src/exquisite/qqtdoubleclicklabel.h deleted file mode 100644 index 0ce59c29..00000000 --- a/src/exquisite/qqtdoubleclicklabel.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef QQTDOUBLECLICKLABEL_H -#define QQTDOUBLECLICKLABEL_H - -#include -#include - -#include -#include - -/** - * 这个是个虚类 - * 提供安装ClickHelper的能力 - */ -class QQTSHARED_EXPORT QQtDoubleClickLabel : public QQtCanClickLabel -{ - Q_OBJECT -public: - explicit QQtDoubleClickLabel ( QWidget* parent = 0 ); - virtual ~QQtDoubleClickLabel(); - -signals: - void click(); - void longClick(); - void doubleClick(); - -signals: - void clickWithPoint ( QPoint point ); - void longClickWithPoint ( QPoint point ); - void doubleClickWithPoint ( QPoint point ); - - // QQtWidget interface -protected: - virtual void installClickHelper() override; - virtual void uninstallClickHelper() override; -}; - -#endif // QQTDOUBLECLICKLABEL_H diff --git a/src/exquisite/qqtdoubleclickwidget.cpp b/src/exquisite/qqtdoubleclickwidget.cpp deleted file mode 100644 index c7ea71f7..00000000 --- a/src/exquisite/qqtdoubleclickwidget.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "qqtdoubleclickwidget.h" - -QQtDoubleClickWidget::QQtDoubleClickWidget ( QWidget* parent ) : - QQtCanClickWidget ( parent ) -{ - mClickHelper = new QQtDoubleClickHelper ( this ); - installClickHelper(); -} - -QQtDoubleClickWidget::~QQtDoubleClickWidget() -{ -} - -void QQtDoubleClickWidget::installClickHelper() -{ - if ( !mClickHelper ) - return; - connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); - connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); - connect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); - connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); - connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); - connect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); -} - -void QQtDoubleClickWidget::uninstallClickHelper() -{ - if ( !mClickHelper ) - return; - disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); - disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); - disconnect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); - disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); - disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); - disconnect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, - SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); -} - diff --git a/src/exquisite/qqtdoubleclickwidget.h b/src/exquisite/qqtdoubleclickwidget.h deleted file mode 100644 index 9b49351a..00000000 --- a/src/exquisite/qqtdoubleclickwidget.h +++ /dev/null @@ -1,39 +0,0 @@ -#ifndef QQTDOUBLECLICKWIDGET_H -#define QQTDOUBLECLICKWIDGET_H - -#include -#include - -#include -#include - -/** - * 内置DoubleClickHelper - * - * 添加了doubleClick支持的QQtClickWidget - * 这个Widget表示了如何使用QQtWidgetClickHelper和它的子类 -*/ -class QQTSHARED_EXPORT QQtDoubleClickWidget : public QQtCanClickWidget -{ - Q_OBJECT -public: - explicit QQtDoubleClickWidget ( QWidget* parent = 0 ); - virtual ~QQtDoubleClickWidget(); - -signals: - void click(); - void longClick(); - void doubleClick(); - -signals: - void clickWithPoint ( QPoint point ); - void longClickWithPoint ( QPoint point ); - void doubleClickWithPoint ( QPoint point ); - - // QQtWidget interface -protected: - virtual void installClickHelper() override; - virtual void uninstallClickHelper() override; -}; - -#endif // QQTDOUBLECLICKWIDGET_H diff --git a/src/qqt_header.pri b/src/qqt_header.pri index 36bec587..599b5c39 100644 --- a/src/qqt_header.pri +++ b/src/qqt_header.pri @@ -343,6 +343,7 @@ contains (DEFINES, __EXQUISITE__) { #single color only widget DEFINES += __COLORWIDGETS__ + DEFINES += __CLICKWIDGETS__ } ######################################################################## @@ -432,6 +433,7 @@ defineReplace(qqt_header){ #exquisite widgets command += $${path}/exquisite + command += $${path}/exquisite/clickwidgets command += $${path}/exquisite/svgwidgets command += $${path}/exquisite/gifwidgets command += $${path}/exquisite/openglwidgets diff --git a/src/qqt_source.pri b/src/qqt_source.pri index f64f2392..9e1969a6 100644 --- a/src/qqt_source.pri +++ b/src/qqt_source.pri @@ -318,36 +318,6 @@ contains (DEFINES, __NETWORKSUPPORT__) { contains (DEFINES, __EXQUISITE__) { #exquisite - SOURCES += \ - $$PWD/exquisite/qqtclicksoundhelper.cpp - HEADERS += \ - $$PWD/exquisite/qqtclicksoundhelper.h - - SOURCES += \ - $$PWD/exquisite/qqtclickhelper.cpp \ - $$PWD/exquisite/qqtdoubleclickhelper.cpp - HEADERS += \ - $$PWD/exquisite/qqtclickhelper.h \ - $$PWD/exquisite/qqtdoubleclickhelper.h - - SOURCES += \ - $$PWD/exquisite/qqtcanclickwidget.cpp \ - $$PWD/exquisite/qqtclickwidget.cpp \ - $$PWD/exquisite/qqtdoubleclickwidget.cpp - HEADERS += \ - $$PWD/exquisite/qqtcanclickwidget.h \ - $$PWD/exquisite/qqtclickwidget.h \ - $$PWD/exquisite/qqtdoubleclickwidget.h - - SOURCES += \ - $$PWD/exquisite/qqtcanclicklabel.cpp \ - $$PWD/exquisite/qqtclicklabel.cpp \ - $$PWD/exquisite/qqtdoubleclicklabel.cpp - HEADERS += \ - $$PWD/exquisite/qqtcanclicklabel.h \ - $$PWD/exquisite/qqtclicklabel.h \ - $$PWD/exquisite/qqtdoubleclicklabel.h - SOURCES += \ $$PWD/exquisite/qqtframelesshelper.cpp \ $$PWD/exquisite/qqtframelesshelperprivate.cpp @@ -355,6 +325,39 @@ contains (DEFINES, __EXQUISITE__) { $$PWD/exquisite/qqtframelesshelper.h \ $$PWD/exquisite/qqtframelesshelperprivate.h + #can click support widgets + contains (DEFINES, __CLICKWIDGETS__) { + SOURCES += \ + $$PWD/exquisite/clickwidgets/qqtclicksoundhelper.cpp + HEADERS += \ + $$PWD/exquisite/clickwidgets/qqtclicksoundhelper.h + + SOURCES += \ + $$PWD/exquisite/clickwidgets/qqtclickhelper.cpp \ + $$PWD/exquisite/clickwidgets/qqtdoubleclickhelper.cpp + HEADERS += \ + $$PWD/exquisite/clickwidgets/qqtclickhelper.h \ + $$PWD/exquisite/clickwidgets/qqtdoubleclickhelper.h + + SOURCES += \ + $$PWD/exquisite/clickwidgets/qqtclickwidget.cpp \ + $$PWD/exquisite/clickwidgets/qqtlongclickwidget.cpp \ + $$PWD/exquisite/clickwidgets/qqtdoubleclickwidget.cpp + HEADERS += \ + $$PWD/exquisite/clickwidgets/qqtclickwidget.h \ + $$PWD/exquisite/clickwidgets/qqtlongclickwidget.h \ + $$PWD/exquisite/clickwidgets/qqtdoubleclickwidget.h + + SOURCES += \ + $$PWD/exquisite/clickwidgets/qqtclicklabel.cpp \ + $$PWD/exquisite/clickwidgets/qqtlongclicklabel.cpp \ + $$PWD/exquisite/clickwidgets/qqtdoubleclicklabel.cpp + HEADERS += \ + $$PWD/exquisite/clickwidgets/qqtclicklabel.h \ + $$PWD/exquisite/clickwidgets/qqtlongclicklabel.h \ + $$PWD/exquisite/clickwidgets/qqtdoubleclicklabel.h + } + #dialog SOURCES += \ $$PWD/exquisite/qqtpopupdialog.cpp From 02b930336930aed104fb9971a897539e87efa478 Mon Sep 17 00:00:00 2001 From: AbelTian <2407223896@qq.com> Date: Fri, 18 May 2018 20:15:52 +0800 Subject: [PATCH 5/7] update click test --- test/QQtWidgetClickHelperTest/mainwindow.cpp | 8 +++++ test/QQtWidgetClickHelperTest/mainwindow.h | 2 ++ test/QQtWidgetClickHelperTest/mainwindow.ui | 32 ++++++++++++++++++-- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/test/QQtWidgetClickHelperTest/mainwindow.cpp b/test/QQtWidgetClickHelperTest/mainwindow.cpp index 65f1ae39..99c41a70 100644 --- a/test/QQtWidgetClickHelperTest/mainwindow.cpp +++ b/test/QQtWidgetClickHelperTest/mainwindow.cpp @@ -21,6 +21,9 @@ MainWindow::MainWindow ( QWidget* parent ) : this, SLOT ( set4Sum() ) ); connect ( ui->widget_2, SIGNAL ( longClick() ), this, SLOT ( set5Sum() ) ); + + connect ( ui->widget_3, SIGNAL ( click() ), + this, SLOT ( set6Sum() ) ); } MainWindow::~MainWindow() @@ -53,3 +56,8 @@ void MainWindow::set5Sum() { ui->textBrowser_2->append ( QString ( "%1 long click" ).arg ( ui->widget_2->clickHelper()->totalClickNum() ) );; } + +void MainWindow::set6Sum() +{ + ui->textBrowser_3->append ( QString ( "%1 click" ).arg ( ui->widget_3->clickHelper()->totalClickNum() ) );; +} diff --git a/test/QQtWidgetClickHelperTest/mainwindow.h b/test/QQtWidgetClickHelperTest/mainwindow.h index ef34bbeb..f081a145 100644 --- a/test/QQtWidgetClickHelperTest/mainwindow.h +++ b/test/QQtWidgetClickHelperTest/mainwindow.h @@ -23,6 +23,8 @@ public slots: void set4Sum(); void set5Sum(); + void set6Sum(); + private: Ui::MainWindow* ui; }; diff --git a/test/QQtWidgetClickHelperTest/mainwindow.ui b/test/QQtWidgetClickHelperTest/mainwindow.ui index dc7d967c..a905a5ef 100644 --- a/test/QQtWidgetClickHelperTest/mainwindow.ui +++ b/test/QQtWidgetClickHelperTest/mainwindow.ui @@ -18,7 +18,7 @@ - 1 + 2 @@ -42,14 +42,34 @@ - Click + LongClick - + + + + 200 + 0 + + + + + + + + + Click + + + + + + + 200 @@ -92,6 +112,12 @@
qqtdoubleclickwidget.h
1 + + QQtLongClickWidget + QWidget +
qqtlongclickwidget.h
+ 1 +
QQtClickWidget QWidget From 99b99cb2a4e42542e42b32b5f6687e7b8d22635d Mon Sep 17 00:00:00 2001 From: tianduanrui Date: Sat, 19 May 2018 15:43:07 +0800 Subject: [PATCH 6/7] add long click helper --- src/exquisite/clickwidgets/qqtclickhelper.cpp | 156 +++---------- src/exquisite/clickwidgets/qqtclickhelper.h | 30 +-- .../clickwidgets/qqtclicksoundhelper.cpp | 10 - .../clickwidgets/qqtclicksoundhelper.h | 44 ++-- .../clickwidgets/qqtdoubleclickhelper.cpp | 6 +- .../clickwidgets/qqtdoubleclickhelper.h | 20 +- .../clickwidgets/qqtlongclickhelper.cpp | 205 ++++++++++++++++++ .../clickwidgets/qqtlongclickhelper.h | 92 ++++++++ .../clickwidgets/qqtlongclicklabel.h | 4 +- .../clickwidgets/qqtlongclickwidget.h | 4 +- src/linux_cd_path.sh | 0 src/linux_cp_files.sh | 0 src/linux_cur_path.sh | 0 src/qqt_source.pri | 2 + test/QQtWidgetClickHelperTest/mainwindow.ui | 4 +- 15 files changed, 365 insertions(+), 212 deletions(-) create mode 100644 src/exquisite/clickwidgets/qqtlongclickhelper.cpp create mode 100644 src/exquisite/clickwidgets/qqtlongclickhelper.h mode change 100755 => 100644 src/linux_cd_path.sh mode change 100755 => 100644 src/linux_cp_files.sh mode change 100755 => 100644 src/linux_cur_path.sh diff --git a/src/exquisite/clickwidgets/qqtclickhelper.cpp b/src/exquisite/clickwidgets/qqtclickhelper.cpp index 4f0a19e6..0f232873 100644 --- a/src/exquisite/clickwidgets/qqtclickhelper.cpp +++ b/src/exquisite/clickwidgets/qqtclickhelper.cpp @@ -1,18 +1,11 @@ #include "qqtclickhelper.h" -QQtClickHelper::QQtClickHelper ( QObject* parent ) +QQtClickHelper::QQtClickHelper ( QObject* parent ) : QObject ( parent ) { - mLongClickInterval = longClickInterval; - - now_press = QTime::currentTime().addMSecs ( 1 ); - now_release = QTime::currentTime().addMSecs ( 2 ); - nClickNumWithCancel = 0; - nLongClickNumWithCancel = 0; nTotalClickNumWithCancel = 0; nClickNum = 0; - nLongClickNum = 0; nTotalClickNum = 0; mClickType = QQtNullClick; @@ -28,108 +21,44 @@ void QQtClickHelper::mousePressEvent ( QMouseEvent* event, QWidget* userWidget ) p2debug() << "press" << event->pos() << userWidget; mPoint = event->pos(); mClickType = QQtClick; - now_press = QTime::currentTime(); } void QQtClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget ) { p2debug() << "release" << event->pos() << userWidget; - //这一次 current click - QTime t2_release_preview = now_release; - now_release = QTime::currentTime(); - //这里加了个判断,其实肯定>=0 - if ( now_press.msecsTo ( now_release ) >= 0 && now_press.msecsTo ( now_release ) <= mLongClickInterval ) - { - //单击发生 - mClickType = QQtClick; - } - else if ( now_press.msecsTo ( now_release ) >= 0 && now_press.msecsTo ( now_release ) > mLongClickInterval ) - { - //长击发生 - mClickType = QQtLongClick; - //这次点击, - //上次的release竟然比press晚,说明press没发生,置位click - //第一次click, 上一次release=press也在这里被置位click - if ( t2_release_preview.msecsTo ( now_release ) >= 0 - && t2_release_preview.msecsTo ( now_press ) <= 0 ) + mClickType = QQtClick; + //计算点击数目 + checkClickNumWithCancel(); + + //修改状态 + mClickType = QQtNullClick; + + //如果手移开了,那么不发送. + //条件是用户传入了这个Widget为真. + if ( userWidget ) + { + p2debug() << userWidget << userWidget->rect() << event->pos() << userWidget->rect().contains ( event->pos() ); + if ( !userWidget->rect().contains ( event->pos() ) ) { - mClickType = QQtClick; + p2debug() << "send click canceled." ; + return; } - } - if ( mClickType == QQtLongClick ) - { - //计算点击数目 - checkClickNumWithCancel(); + checkClickNum ( QQtClick ); - //修改状态 - mClickType = QQtNullClick; - - //如果手移开了,那么不发送. - //条件是用户传入了这个Widget为真. - if ( userWidget ) - { - p2debug() << userWidget << userWidget->rect() << event->pos() << userWidget->rect().contains ( event->pos() ); - if ( !userWidget->rect().contains ( event->pos() ) ) - { - p2debug() << "send long click canceled." ; - return; - } - } - - checkClickNum ( QQtLongClick ); - - //发送长信号 - p2debug() << "send long click " ; - emit longClick(); - emit longClickWithPoint ( event->pos() ); - emit longClickWithPointF ( event->localPos() ); + //发送单击信号 + p2debug() << "send click." ; + emit click(); + emit clickWithPoint ( event->pos() ); + emit clickWithPointF ( event->localPos() ); #if 0 - emit longClick ( userWidget ); - emit longClickWithPoint ( event->pos(), userWidget ); - emit longClickWithPointF ( event->localPos(), userWidget ); + emit click ( userWidget ); + emit clickWithPoint ( event->pos(), userWidget ); + emit clickWithPointF ( event->localPos(), userWidget ); #endif - return; - } - else if ( mClickType == QQtClick ) - { - //计算点击数目 - checkClickNumWithCancel(); - - //修改状态 - mClickType = QQtNullClick; - - //如果手移开了,那么不发送. - //条件是用户传入了这个Widget为真. - if ( userWidget ) - { - p2debug() << userWidget << userWidget->rect() << event->pos() << userWidget->rect().contains ( event->pos() ); - if ( !userWidget->rect().contains ( event->pos() ) ) - { - p2debug() << "send click canceled." ; - return; - } - } - - checkClickNum ( QQtClick ); - - //发送单击信号 - p2debug() << "send click." ; - emit click(); - emit clickWithPoint ( event->pos() ); - emit clickWithPointF ( event->localPos() ); - -#if 0 - emit click ( userWidget ); - emit clickWithPoint ( event->pos(), userWidget ); - emit clickWithPointF ( event->localPos(), userWidget ); -#endif - - return; - } //修改状态 mClickType = QQtNullClick; @@ -146,17 +75,6 @@ void QQtClickHelper::mouseDoubleClickEvent ( QMouseEvent* event, QWidget* userWi mPoint = event->pos(); } -void QQtClickHelper::setLongClickInterval ( int millSecond ) -{ - mLongClickInterval = millSecond; -} - -int QQtClickHelper::getLongClickInterval() const -{ - return mLongClickInterval; -} - - void QQtClickHelper::checkClickNumWithCancel() { switch ( mClickType ) @@ -171,21 +89,11 @@ void QQtClickHelper::checkClickNumWithCancel() } } break; - case QQtLongClick: - { - nLongClickNumWithCancel++; - if ( nLongClickNumWithCancel >= 0xFFFFFFFF ) - { - p2debug() << "out......"; - nLongClickNumWithCancel = 0; - } - } - break; default: break; } - nTotalClickNumWithCancel = nClickNumWithCancel + nLongClickNumWithCancel; + nTotalClickNumWithCancel = nClickNumWithCancel; if ( nTotalClickNumWithCancel >= 0xFFFFFFFFFFFFFFFF ) { p2debug() << "out......"; @@ -207,21 +115,11 @@ void QQtClickHelper::checkClickNum ( QQtClickHelper::QQtClickType type ) } } break; - case QQtLongClick: - { - nLongClickNum++; - if ( nLongClickNum >= 0xFFFFFFFF ) - { - p2debug() << "out......"; - nLongClickNum = 0; - } - } - break; default: break; } - nTotalClickNum = nClickNum + nLongClickNum; + nTotalClickNum = nClickNum; if ( nTotalClickNum >= 0xFFFFFFFFFFFFFFFF ) { p2debug() << "out......"; diff --git a/src/exquisite/clickwidgets/qqtclickhelper.h b/src/exquisite/clickwidgets/qqtclickhelper.h index 44f6c23d..33b1f8d2 100644 --- a/src/exquisite/clickwidgets/qqtclickhelper.h +++ b/src/exquisite/clickwidgets/qqtclickhelper.h @@ -4,7 +4,7 @@ #include #include -#if 1 +#if 0 #define p2debug() p2line() #else #define p2debug() QNoDebug() @@ -35,15 +35,12 @@ public: //这些信号不区分Widget,谁发过来都发出去,不论Widget signals: void click(); - void longClick(); signals: void clickWithPoint ( QPoint point ); - void longClickWithPoint ( QPoint point ); signals: void clickWithPointF ( QPointF point ); - void longClickWithPointF ( QPointF point ); #if 0 //发给业务层 @@ -53,10 +50,6 @@ signals: void click ( QWidget* userWidget ); void clickWithPoint ( QPoint point, QWidget* userWidget ); void clickWithPointF ( QPointF point, QWidget* userWidget ); - - void longClick ( QWidget* userWidget ); - void longClickWithPoint ( QPoint point, QWidget* userWidget ); - void longClickWithPointF ( QPointF point, QWidget* userWidget ); #endif //调用于userWidget相对应的Event里 @@ -68,25 +61,16 @@ public: //optional public: - //设置longClick超时 default:1200ms - void setLongClickInterval ( int millSecond = longClickInterval ); - int getLongClickInterval() const; - inline const quint32 clickNum() const { return nClickNum; } - inline const quint32 longClickNum() const { return nLongClickNum; } inline const quint64 totalClickNum() const { return nTotalClickNum; } inline const quint32 clickNumWithCancel() const { return nClickNumWithCancel; } - inline const quint32 longClickNumWithCancel() const { return nLongClickNumWithCancel; } inline const quint64 totalClickNumWithCancel() const { return nTotalClickNumWithCancel; } /** * 以下用于内部 */ public: - Q_ENUMS ( QQtClickType ) - Q_PROPERTY ( int mLongClickInterval READ getLongClickInterval WRITE setLongClickInterval ) - typedef enum { QQtNullClick = 0, @@ -98,33 +82,23 @@ public: QQtMaxClick } QQtClickType; + Q_ENUMS ( QQtClickType ) protected: - //这个语法比较难,只有整型有特权. - static const int longClickInterval = 1200; - //用于记录点击到了什么状态. QQtClickType mClickType; //用于记录按钮的位置 QPoint mPoint; - int mLongClickInterval; - - //click 检测使用 - QTime now_press;//press relase - QTime now_release;//release - //click num virtual void checkClickNumWithCancel(); virtual void checkClickNum ( QQtClickType type ); quint32 nClickNum; - quint32 nLongClickNum; quint64 nTotalClickNum; quint32 nClickNumWithCancel; - quint32 nLongClickNumWithCancel; quint64 nTotalClickNumWithCancel; }; diff --git a/src/exquisite/clickwidgets/qqtclicksoundhelper.cpp b/src/exquisite/clickwidgets/qqtclicksoundhelper.cpp index ec9a05d1..52d9d05e 100644 --- a/src/exquisite/clickwidgets/qqtclicksoundhelper.cpp +++ b/src/exquisite/clickwidgets/qqtclicksoundhelper.cpp @@ -1,11 +1 @@ #include "qqtclicksoundhelper.h" - -QQtClickSoundHelper::QQtClickSoundHelper ( QObject* parent ) -{ - mClickHelper = 0; -} - -QQtClickSoundHelper::~QQtClickSoundHelper() -{ - -} diff --git a/src/exquisite/clickwidgets/qqtclicksoundhelper.h b/src/exquisite/clickwidgets/qqtclicksoundhelper.h index 98a2e9b6..b5f556cd 100644 --- a/src/exquisite/clickwidgets/qqtclicksoundhelper.h +++ b/src/exquisite/clickwidgets/qqtclicksoundhelper.h @@ -4,53 +4,41 @@ #include #include #include +#include /** * QQtClickSoundHelper * * 为Widget提供按键声音支持. * - * ClickSoundHelper和Widget共用ClickHelper,实现Widget按键同时能播放声音的能力 - * 依赖QQtClickHelper实现 + * 支持 + * click + * */ -class QQTSHARED_EXPORT QQtClickSoundHelper : public QObject +class QQTSHARED_EXPORT QQtClickSoundHelper : public QQtClickHelper { Q_OBJECT public: - explicit QQtClickSoundHelper ( QObject* parent = 0 ); + explicit QQtClickSoundHelper ( QObject* parent = 0 ) : QQtClickHelper ( parent ) { + connect ( this, SIGNAL ( click() ), this, SLOT ( slotClick() ) ); + } virtual ~QQtClickSoundHelper(); - void setClickSound(); - void setLongClickSound(); - -public: - //一般,调用widget的clickHelper,设置到这里. - inline void setClickHelper ( QQtClickHelper* helper ) { - uninstallClickHelper(); - mClickHelper = helper; - installClickHelper(); + void setClickSound ( const QString clickSoundFile ) { + this->clickSoundFile = clickSoundFile; } - inline const QQtClickHelper* clickHelper() const { - return mClickHelper; - } - -protected: - //允许重写 - virtual void installClickHelper() { - - } - virtual void uninstallClickHelper() { - - } - QQtClickHelper* mClickHelper; /** * 内部 */ public slots: - void slotClick() {} - void slotLongClick() {} + void slotClick() { + + } + +private: + QString clickSoundFile; }; #endif // QQTCLICKSOUNDHELPER_H diff --git a/src/exquisite/clickwidgets/qqtdoubleclickhelper.cpp b/src/exquisite/clickwidgets/qqtdoubleclickhelper.cpp index 21f5640d..44a0b78d 100644 --- a/src/exquisite/clickwidgets/qqtdoubleclickhelper.cpp +++ b/src/exquisite/clickwidgets/qqtdoubleclickhelper.cpp @@ -1,7 +1,7 @@ #include "qqtdoubleclickhelper.h" QQtDoubleClickHelper::QQtDoubleClickHelper ( QObject* parent ) : - QQtClickHelper ( parent ) + QQtLongClickHelper ( parent ) { mDoubleClickInterval = doubleClickInterval; @@ -275,7 +275,7 @@ void QQtDoubleClickHelper::slotDoubleClickTimeout() void QQtDoubleClickHelper::checkClickNumWithCancel() { - QQtClickHelper::checkClickNumWithCancel(); + QQtLongClickHelper::checkClickNumWithCancel(); switch ( mClickType ) { case QQtDoubleClick: @@ -303,7 +303,7 @@ void QQtDoubleClickHelper::checkClickNumWithCancel() void QQtDoubleClickHelper::checkClickNum ( QQtClickType type ) { - QQtClickHelper::checkClickNum ( type ); + QQtLongClickHelper::checkClickNum ( type ); switch ( type ) { case QQtDoubleClick: diff --git a/src/exquisite/clickwidgets/qqtdoubleclickhelper.h b/src/exquisite/clickwidgets/qqtdoubleclickhelper.h index e4e1c8b8..9a3a3edc 100644 --- a/src/exquisite/clickwidgets/qqtdoubleclickhelper.h +++ b/src/exquisite/clickwidgets/qqtdoubleclickhelper.h @@ -4,7 +4,7 @@ #include #include -#include +#include #include #include @@ -12,6 +12,11 @@ /** * @brief The QQtDoubleClickHelper class * + * 支持 + * click + * longClick + * doubleClick + * * 原理 * release开始检测. * 发现longClick只发送longClick. @@ -28,7 +33,7 @@ * * DoubleClick检测是独立于系统的,用户可以在页面里实现多套独立的按键时延检测,一个widget一个时延系统也没问题. */ -class QQTSHARED_EXPORT QQtDoubleClickHelper : public QQtClickHelper +class QQTSHARED_EXPORT QQtDoubleClickHelper : public QQtLongClickHelper { Q_OBJECT @@ -54,9 +59,6 @@ signals: //optional public: - //这个语法比较难,只有整型有特权. - static const int doubleClickInterval = 200; - //设置双击检测时延 default: doubleClickInterval ms //不会影响系统默认时延 void setDoubleClickInterval ( int millSecond = doubleClickInterval ) { @@ -80,6 +82,9 @@ public slots: void slotDoubleClickTimeout(); protected: + //这个语法比较难,只有整型有特权. + static const int doubleClickInterval = 260; + //clickTimer QTimer* m_click_timer; //longClickTimer @@ -87,8 +92,6 @@ protected: //doubleClickTimer QTimer* m_double_click_timer; - //用于记录按钮的位置 - QPoint mPoint; //双击200ms. 这个比较符合双击舒适度.Qt内部的Timer慢一些,可能是计算了比较完整的时间. //在这个范围内的都 才 是双击 @@ -110,8 +113,9 @@ protected: QQtMouseEvent* mMouseEvent; //click num - virtual void checkClickNumWithCancel(); virtual void checkClickNum ( QQtClickType type ) override; + virtual void checkClickNumWithCancel() override; + quint32 nDoubleClickNum; quint32 nDoubleClickNumWithCancel; }; diff --git a/src/exquisite/clickwidgets/qqtlongclickhelper.cpp b/src/exquisite/clickwidgets/qqtlongclickhelper.cpp new file mode 100644 index 00000000..150ff4af --- /dev/null +++ b/src/exquisite/clickwidgets/qqtlongclickhelper.cpp @@ -0,0 +1,205 @@ +#include "qqtlongclickhelper.h" + +QQtLongClickHelper::QQtLongClickHelper ( QObject* parent ) : QQtClickHelper ( parent ) +{ + mLongClickInterval = longClickInterval; + + now_press = QTime::currentTime().addMSecs ( 1 ); + now_release = QTime::currentTime().addMSecs ( 2 ); + + nLongClickNum = 0; + nLongClickNumWithCancel = 0; +} + +QQtLongClickHelper::~QQtLongClickHelper() +{ + +} + +void QQtLongClickHelper::mousePressEvent ( QMouseEvent* event, QWidget* userWidget ) +{ + p2debug() << "press" << event->pos() << userWidget; + mPoint = event->pos(); + mClickType = QQtClick; + now_press = QTime::currentTime(); +} + +void QQtLongClickHelper::mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget ) +{ + p2debug() << "release" << event->pos() << userWidget; + //这一次 current click + QTime t2_release_preview = now_release; + now_release = QTime::currentTime(); + //这里加了个判断,其实肯定>=0 + if ( now_press.msecsTo ( now_release ) >= 0 && now_press.msecsTo ( now_release ) <= mLongClickInterval ) + { + //单击发生 + mClickType = QQtClick; + } + else if ( now_press.msecsTo ( now_release ) >= 0 && now_press.msecsTo ( now_release ) > mLongClickInterval ) + { + //长击发生 + mClickType = QQtLongClick; + + //这次点击, + //上次的release竟然比press晚,说明press没发生,置位click + //第一次click, 上一次release=press也在这里被置位click + if ( t2_release_preview.msecsTo ( now_release ) >= 0 + && t2_release_preview.msecsTo ( now_press ) <= 0 ) + { + mClickType = QQtClick; + } + + } + + if ( mClickType == QQtLongClick ) + { + //计算点击数目 + checkClickNumWithCancel(); + + //修改状态 + mClickType = QQtNullClick; + + //如果手移开了,那么不发送. + //条件是用户传入了这个Widget为真. + if ( userWidget ) + { + p2debug() << userWidget << userWidget->rect() << event->pos() << userWidget->rect().contains ( event->pos() ); + if ( !userWidget->rect().contains ( event->pos() ) ) + { + p2debug() << "send long click canceled." ; + return; + } + } + + checkClickNum ( QQtLongClick ); + + //发送长信号 + p2debug() << "send long click " ; + emit longClick(); + emit longClickWithPoint ( event->pos() ); + emit longClickWithPointF ( event->localPos() ); + +#if 0 + emit longClick ( userWidget ); + emit longClickWithPoint ( event->pos(), userWidget ); + emit longClickWithPointF ( event->localPos(), userWidget ); +#endif + return; + } + else if ( mClickType == QQtClick ) + { + //计算点击数目 + checkClickNumWithCancel(); + + //修改状态 + mClickType = QQtNullClick; + + //如果手移开了,那么不发送. + //条件是用户传入了这个Widget为真. + if ( userWidget ) + { + p2debug() << userWidget << userWidget->rect() << event->pos() << userWidget->rect().contains ( event->pos() ); + if ( !userWidget->rect().contains ( event->pos() ) ) + { + p2debug() << "send click canceled." ; + return; + } + } + + checkClickNum ( QQtClick ); + + //发送单击信号 + p2debug() << "send click." ; + emit click(); + emit clickWithPoint ( event->pos() ); + emit clickWithPointF ( event->localPos() ); + +#if 0 + emit click ( userWidget ); + emit clickWithPoint ( event->pos(), userWidget ); + emit clickWithPointF ( event->localPos(), userWidget ); +#endif + + return; + } + + //修改状态 + mClickType = QQtNullClick; + + //保存位置 + mPoint = event->pos(); + return; + +} + +void QQtLongClickHelper::mouseDoubleClickEvent ( QMouseEvent* event, QWidget* userWidget ) +{ + p2debug() << "double click" << event->pos() << userWidget; + mPoint = event->pos(); +} + +void QQtLongClickHelper::setLongClickInterval ( int millSecond ) +{ + mLongClickInterval = millSecond; +} + +int QQtLongClickHelper::getLongClickInterval() const +{ + return mLongClickInterval; +} + + +void QQtLongClickHelper::checkClickNumWithCancel() +{ + QQtClickHelper::checkClickNumWithCancel(); + switch ( mClickType ) + { + case QQtLongClick: + { + nLongClickNumWithCancel++; + if ( nLongClickNumWithCancel >= 0xFFFFFFFF ) + { + p2debug() << "out......"; + nLongClickNumWithCancel = 0; + } + } + break; + default: + break; + } + + nTotalClickNumWithCancel = nClickNumWithCancel + nLongClickNumWithCancel; + if ( nTotalClickNumWithCancel >= 0xFFFFFFFFFFFFFFFF ) + { + p2debug() << "out......"; + nTotalClickNumWithCancel = 0; + } +} + +void QQtLongClickHelper::checkClickNum ( QQtLongClickHelper::QQtClickType type ) +{ + QQtClickHelper::checkClickNum ( type ); + switch ( type ) + { + case QQtLongClick: + { + nLongClickNum++; + if ( nLongClickNum >= 0xFFFFFFFF ) + { + p2debug() << "out......"; + nLongClickNum = 0; + } + } + break; + default: + break; + } + + nTotalClickNum = nClickNum + nLongClickNum; + if ( nTotalClickNum >= 0xFFFFFFFFFFFFFFFF ) + { + p2debug() << "out......"; + nTotalClickNum = 0; + } +} diff --git a/src/exquisite/clickwidgets/qqtlongclickhelper.h b/src/exquisite/clickwidgets/qqtlongclickhelper.h new file mode 100644 index 00000000..5286f57d --- /dev/null +++ b/src/exquisite/clickwidgets/qqtlongclickhelper.h @@ -0,0 +1,92 @@ +#ifndef QQTLONGCLICKHELPER_H +#define QQTLONGCLICKHELPER_H + +#include + +#include +#include + +/** + * QQtLongClickHelper + * 这个Helper是给Widget响应按钮事件用的 + * 主要用于为QQtWidget系列添加按钮信号识别帮助 + * + * 支持 + * click + * longClick + * 不支持DoubleClick + * + * 可以统计按键次数 + */ +class QQTSHARED_EXPORT QQtLongClickHelper : public QQtClickHelper +{ + Q_OBJECT + +public: + explicit QQtLongClickHelper ( QObject* parent = 0 ); + virtual ~QQtLongClickHelper(); + + //发给业务层 + //发回界面层 + //这些信号不区分Widget,谁发过来都发出去,不论Widget +signals: + void click(); + void longClick(); + +signals: + void clickWithPoint ( QPoint point ); + void longClickWithPoint ( QPoint point ); + +signals: + void clickWithPointF ( QPointF point ); + void longClickWithPointF ( QPointF point ); + +#if 0 + //发给业务层 + //发回界面层 + //这里的信号都带着Widget指针,可以区分Widget +signals: + void longClick ( QWidget* userWidget ); + void longClickWithPoint ( QPoint point, QWidget* userWidget ); + void longClickWithPointF ( QPointF point, QWidget* userWidget ); +#endif + + //调用于userWidget相对应的Event里 + //允许重写 +public: + virtual void mousePressEvent ( QMouseEvent* event, QWidget* userWidget = 0 ) override; + virtual void mouseReleaseEvent ( QMouseEvent* event, QWidget* userWidget = 0 ) override; + virtual void mouseDoubleClickEvent ( QMouseEvent* event, QWidget* userWidget = 0 ) override; + + //optional +public: + //设置longClick超时 default:1200ms + void setLongClickInterval ( int millSecond = longClickInterval ); + int getLongClickInterval() const; + + inline const quint32 longClickNum() const { return nLongClickNum; } + inline const quint32 longClickNumWithCancel() const { return nLongClickNumWithCancel; } + + + /** + * 以下用于内部 + */ +protected: + //这个语法比较难,只有整型有特权. + static const int longClickInterval = 1200; + + int mLongClickInterval; + + //click 检测使用 + QTime now_press;//press relase + QTime now_release;//release + + //click num + virtual void checkClickNum ( QQtClickType type ) override; + virtual void checkClickNumWithCancel() override; + + quint32 nLongClickNum; + quint32 nLongClickNumWithCancel; +}; + +#endif // QQTLONGCLICKHELPER_H diff --git a/src/exquisite/clickwidgets/qqtlongclicklabel.h b/src/exquisite/clickwidgets/qqtlongclicklabel.h index 9c369859..e7f10006 100644 --- a/src/exquisite/clickwidgets/qqtlongclicklabel.h +++ b/src/exquisite/clickwidgets/qqtlongclicklabel.h @@ -2,7 +2,7 @@ #define QQTLONGCLICKLABEL_H #include -#include +#include #include #include @@ -19,7 +19,7 @@ public: explicit QQtLongClickLabel ( QWidget* parent = 0 ) : QQtLabel ( parent ) { mClickHelper = 0; - mClickHelper = new QQtClickHelper ( this ); + mClickHelper = new QQtLongClickHelper ( this ); installClickHelper ( mClickHelper ); } virtual ~QQtLongClickLabel() {} diff --git a/src/exquisite/clickwidgets/qqtlongclickwidget.h b/src/exquisite/clickwidgets/qqtlongclickwidget.h index bb5687ff..8d39fdcd 100644 --- a/src/exquisite/clickwidgets/qqtlongclickwidget.h +++ b/src/exquisite/clickwidgets/qqtlongclickwidget.h @@ -2,7 +2,7 @@ #define QQTLONGCLICKWIDGET_H #include -#include +#include #include #include @@ -19,7 +19,7 @@ public: explicit QQtLongClickWidget ( QWidget* parent = 0 ) : QQtWidget ( parent ) { mClickHelper = 0; - mClickHelper = new QQtClickHelper ( this ); + mClickHelper = new QQtLongClickHelper ( this ); installClickHelper ( mClickHelper ); } virtual ~QQtLongClickWidget() {} diff --git a/src/linux_cd_path.sh b/src/linux_cd_path.sh old mode 100755 new mode 100644 diff --git a/src/linux_cp_files.sh b/src/linux_cp_files.sh old mode 100755 new mode 100644 diff --git a/src/linux_cur_path.sh b/src/linux_cur_path.sh old mode 100755 new mode 100644 diff --git a/src/qqt_source.pri b/src/qqt_source.pri index 9e1969a6..a5548da4 100644 --- a/src/qqt_source.pri +++ b/src/qqt_source.pri @@ -334,9 +334,11 @@ contains (DEFINES, __EXQUISITE__) { SOURCES += \ $$PWD/exquisite/clickwidgets/qqtclickhelper.cpp \ + $$PWD/exquisite/clickwidgets/qqtlongclickhelper.cpp \ $$PWD/exquisite/clickwidgets/qqtdoubleclickhelper.cpp HEADERS += \ $$PWD/exquisite/clickwidgets/qqtclickhelper.h \ + $$PWD/exquisite/clickwidgets/qqtlongclickhelper.h \ $$PWD/exquisite/clickwidgets/qqtdoubleclickhelper.h SOURCES += \ diff --git a/test/QQtWidgetClickHelperTest/mainwindow.ui b/test/QQtWidgetClickHelperTest/mainwindow.ui index a905a5ef..12f19582 100644 --- a/test/QQtWidgetClickHelperTest/mainwindow.ui +++ b/test/QQtWidgetClickHelperTest/mainwindow.ui @@ -18,7 +18,7 @@ - 2 + 0 @@ -90,7 +90,7 @@ 0 0 816 - 39 + 17
From 4d73f21f85efefc134b5998379d28154ab57979e Mon Sep 17 00:00:00 2001 From: tianduanrui Date: Sat, 19 May 2018 17:45:06 +0800 Subject: [PATCH 7/7] add click sound widgets and example --- QQtExample.pro | 4 +- .../qqtclicksoundhelper.cpp | 0 .../qqtclicksoundhelper.h | 5 +- .../clicksoundwidgets/qqtclicksoundlabel.cpp | 1 + .../clicksoundwidgets/qqtclicksoundlabel.h | 105 ++++++++++++++ .../clicksoundwidgets/qqtclicksoundwidget.cpp | 1 + .../clicksoundwidgets/qqtclicksoundwidget.h | 103 ++++++++++++++ .../qqtdoubleclicksoundhelper.cpp | 1 + .../qqtdoubleclicksoundhelper.h | 69 ++++++++++ .../qqtdoubleclicksoundlabel.cpp | 1 + .../qqtdoubleclicksoundlabel.h | 112 +++++++++++++++ .../qqtdoubleclicksoundwidget.cpp | 1 + .../qqtdoubleclicksoundwidget.h | 115 ++++++++++++++++ .../qqtlongclicksoundhelper.cpp | 1 + .../qqtlongclicksoundhelper.h | 58 ++++++++ .../qqtlongclicksoundlabel.cpp | 1 + .../qqtlongclicksoundlabel.h | 108 +++++++++++++++ .../qqtlongclicksoundwidget.cpp | 1 + .../qqtlongclicksoundwidget.h | 107 ++++++++++++++ src/exquisite/clickwidgets/qqtclicklabel.h | 4 +- src/exquisite/clickwidgets/qqtclickwidget.h | 4 +- .../clickwidgets/qqtdoubleclicklabel.h | 8 +- .../clickwidgets/qqtdoubleclickwidget.h | 8 +- .../clickwidgets/qqtlongclicklabel.h | 8 +- .../clickwidgets/qqtlongclickwidget.h | 8 +- src/qqt_header.pri | 5 + src/qqt_source.pri | 34 ++++- .../AppRoot/click.wav | Bin 0 -> 150044 bytes .../AppRoot/doubleclick.wav | Bin 0 -> 200044 bytes .../AppRoot/longclick.wav | Bin 0 -> 500044 bytes .../QQtWidgetClickSoundHelperTest.pro | 40 ++++++ test/QQtWidgetClickSoundHelperTest/main.cpp | 11 ++ .../mainwindow.cpp | 72 ++++++++++ .../mainwindow.h | 32 +++++ .../mainwindow.ui | 130 ++++++++++++++++++ 35 files changed, 1132 insertions(+), 26 deletions(-) rename src/exquisite/{clickwidgets => clicksoundwidgets}/qqtclicksoundhelper.cpp (100%) rename src/exquisite/{clickwidgets => clicksoundwidgets}/qqtclicksoundhelper.h (84%) create mode 100644 src/exquisite/clicksoundwidgets/qqtclicksoundlabel.cpp create mode 100644 src/exquisite/clicksoundwidgets/qqtclicksoundlabel.h create mode 100644 src/exquisite/clicksoundwidgets/qqtclicksoundwidget.cpp create mode 100644 src/exquisite/clicksoundwidgets/qqtclicksoundwidget.h create mode 100644 src/exquisite/clicksoundwidgets/qqtdoubleclicksoundhelper.cpp create mode 100644 src/exquisite/clicksoundwidgets/qqtdoubleclicksoundhelper.h create mode 100644 src/exquisite/clicksoundwidgets/qqtdoubleclicksoundlabel.cpp create mode 100644 src/exquisite/clicksoundwidgets/qqtdoubleclicksoundlabel.h create mode 100644 src/exquisite/clicksoundwidgets/qqtdoubleclicksoundwidget.cpp create mode 100644 src/exquisite/clicksoundwidgets/qqtdoubleclicksoundwidget.h create mode 100644 src/exquisite/clicksoundwidgets/qqtlongclicksoundhelper.cpp create mode 100644 src/exquisite/clicksoundwidgets/qqtlongclicksoundhelper.h create mode 100644 src/exquisite/clicksoundwidgets/qqtlongclicksoundlabel.cpp create mode 100644 src/exquisite/clicksoundwidgets/qqtlongclicksoundlabel.h create mode 100644 src/exquisite/clicksoundwidgets/qqtlongclicksoundwidget.cpp create mode 100644 src/exquisite/clicksoundwidgets/qqtlongclicksoundwidget.h create mode 100644 test/QQtWidgetClickSoundHelperTest/AppRoot/click.wav create mode 100644 test/QQtWidgetClickSoundHelperTest/AppRoot/doubleclick.wav create mode 100644 test/QQtWidgetClickSoundHelperTest/AppRoot/longclick.wav create mode 100644 test/QQtWidgetClickSoundHelperTest/QQtWidgetClickSoundHelperTest.pro create mode 100644 test/QQtWidgetClickSoundHelperTest/main.cpp create mode 100644 test/QQtWidgetClickSoundHelperTest/mainwindow.cpp create mode 100644 test/QQtWidgetClickSoundHelperTest/mainwindow.h create mode 100644 test/QQtWidgetClickSoundHelperTest/mainwindow.ui diff --git a/QQtExample.pro b/QQtExample.pro index add42978..938473f9 100644 --- a/QQtExample.pro +++ b/QQtExample.pro @@ -85,7 +85,8 @@ greaterThan(QT_MAJOR_VERSION , 4):SUBDIRS += demo/VegeTablesPrice #必开 #SUBDIRS += test/qqtdicttest2 #必开 -#SUBDIRS += test/giftest +# +SUBDIRS += test/giftest #必开 这两个例子是关于QQtAudio的最好展示 #SUBDIRS += examples/qqtaudioexample @@ -115,3 +116,4 @@ greaterThan(QT_MAJOR_VERSION , 4):SUBDIRS += demo/VegeTablesPrice #SUBDIRS += demo/TouchMonitorServer SUBDIRS += test/QQtWidgetClickHelperTest +SUBDIRS += test/QQtWidgetClickSoundHelperTest diff --git a/src/exquisite/clickwidgets/qqtclicksoundhelper.cpp b/src/exquisite/clicksoundwidgets/qqtclicksoundhelper.cpp similarity index 100% rename from src/exquisite/clickwidgets/qqtclicksoundhelper.cpp rename to src/exquisite/clicksoundwidgets/qqtclicksoundhelper.cpp diff --git a/src/exquisite/clickwidgets/qqtclicksoundhelper.h b/src/exquisite/clicksoundwidgets/qqtclicksoundhelper.h similarity index 84% rename from src/exquisite/clickwidgets/qqtclicksoundhelper.h rename to src/exquisite/clicksoundwidgets/qqtclicksoundhelper.h index b5f556cd..4be03855 100644 --- a/src/exquisite/clickwidgets/qqtclicksoundhelper.h +++ b/src/exquisite/clicksoundwidgets/qqtclicksoundhelper.h @@ -23,7 +23,7 @@ public: explicit QQtClickSoundHelper ( QObject* parent = 0 ) : QQtClickHelper ( parent ) { connect ( this, SIGNAL ( click() ), this, SLOT ( slotClick() ) ); } - virtual ~QQtClickSoundHelper(); + virtual ~QQtClickSoundHelper() {} void setClickSound ( const QString clickSoundFile ) { this->clickSoundFile = clickSoundFile; @@ -34,7 +34,10 @@ public: */ public slots: void slotClick() { + if ( clickSoundFile.isEmpty() ) + return; + QQtWavSound ( clickSoundFile ); } private: diff --git a/src/exquisite/clicksoundwidgets/qqtclicksoundlabel.cpp b/src/exquisite/clicksoundwidgets/qqtclicksoundlabel.cpp new file mode 100644 index 00000000..19383432 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtclicksoundlabel.cpp @@ -0,0 +1 @@ +#include "qqtclicksoundlabel.h" diff --git a/src/exquisite/clicksoundwidgets/qqtclicksoundlabel.h b/src/exquisite/clicksoundwidgets/qqtclicksoundlabel.h new file mode 100644 index 00000000..42c37a75 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtclicksoundlabel.h @@ -0,0 +1,105 @@ +#ifndef QQTCLICKSOUNDLABEL_H +#define QQTCLICKSOUNDLABEL_H + +#include +#include + +#include +#include + +/** + * 这个是个basic类 提供click信号 + * 提供安装ClickHelper的能力 + * 提供MouseEvent响应 + * + * 用户使用方法 + * new ClickHelper + * installClickHelper + */ +class QQTSHARED_EXPORT QQtClickSoundLabel : public QQtLabel +{ + Q_OBJECT +public: + explicit QQtClickSoundLabel ( QWidget* parent = 0 ) : + QQtLabel ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtClickSoundHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtClickSoundLabel() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + +signals: + void clickWithPoint ( QPoint point ); + + /** + * 用户可选使用 + */ +public: + inline void installClickHelper ( QQtClickSoundHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline QQtClickSoundHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + } + +private: + QQtClickSoundHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtLabel::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtLabel::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtLabel::mouseDoubleClickEvent ( event ); + } +}; + +#endif // QQTCLICKSOUNDLABEL_H diff --git a/src/exquisite/clicksoundwidgets/qqtclicksoundwidget.cpp b/src/exquisite/clicksoundwidgets/qqtclicksoundwidget.cpp new file mode 100644 index 00000000..57717ad2 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtclicksoundwidget.cpp @@ -0,0 +1 @@ +#include "qqtclicksoundwidget.h" diff --git a/src/exquisite/clicksoundwidgets/qqtclicksoundwidget.h b/src/exquisite/clicksoundwidgets/qqtclicksoundwidget.h new file mode 100644 index 00000000..15de1133 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtclicksoundwidget.h @@ -0,0 +1,103 @@ +#ifndef QQTCLICKSOUNDWIDGET_H +#define QQTCLICKSOUNDWIDGET_H + +#include +#include + +#include +#include + +/** + * 内置ClickHelper + * + * 添加了clickSound支持的QQtWidget + * 这个Widget表示了如何使用QQtClickSoundHelper和它的子类 + * +*/ +class QQTSHARED_EXPORT QQtClickSoundWidget : public QQtWidget +{ + Q_OBJECT +public: + explicit QQtClickSoundWidget ( QWidget* parent = 0 ) : + QQtWidget ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtClickSoundHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtClickSoundWidget() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + +signals: + void clickWithPoint ( QPoint point ); + + /** + * 用户可选使用 + */ +public: + inline void installClickHelper ( QQtClickSoundHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline QQtClickSoundHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + } + +private: + QQtClickSoundHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtWidget::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtWidget::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtWidget::mouseDoubleClickEvent ( event ); + } +}; + +#endif // QQTCLICKSOUNDWIDGET_H diff --git a/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundhelper.cpp b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundhelper.cpp new file mode 100644 index 00000000..74bca98a --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundhelper.cpp @@ -0,0 +1 @@ +#include "qqtdoubleclicksoundhelper.h" diff --git a/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundhelper.h b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundhelper.h new file mode 100644 index 00000000..30b52203 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundhelper.h @@ -0,0 +1,69 @@ +#ifndef QQTDOUBLECLICKSOUNDHELPER_H +#define QQTDOUBLECLICKSOUNDHELPER_H + +#include +#include +#include +#include + +/** + * QQtDoubleClickSoundHelper + * + * 为Widget提供按键声音支持. + * + * 支持 + * click + * + */ +class QQTSHARED_EXPORT QQtDoubleClickSoundHelper : public QQtDoubleClickHelper +{ + Q_OBJECT + +public: + explicit QQtDoubleClickSoundHelper ( QObject* parent = 0 ) : QQtDoubleClickHelper ( parent ) { + connect ( this, SIGNAL ( click() ), this, SLOT ( slotClick() ) ); + connect ( this, SIGNAL ( longClick() ), this, SLOT ( slotLongClick() ) ); + connect ( this, SIGNAL ( doubleClick() ), this, SLOT ( slotDoubleClick() ) ); + } + virtual ~QQtDoubleClickSoundHelper() {} + + void setClickSound ( const QString clickSoundFile ) { + this->clickSoundFile = clickSoundFile; + } + void setLongClickSound ( const QString clickSoundFile ) { + this->longClickSoundFile = clickSoundFile; + } + void setDoubleClickSound ( const QString clickSoundFile ) { + this->doubleClickSoundFile = clickSoundFile; + } + + /** + * 内部 + */ +public slots: + void slotClick() { + if ( clickSoundFile.isEmpty() ) + return; + + QQtWavSound ( clickSoundFile ); + } + void slotLongClick() { + if ( longClickSoundFile.isEmpty() ) + return; + + QQtWavSound ( longClickSoundFile ); + } + void slotDoubleClick() { + if ( doubleClickSoundFile.isEmpty() ) + return; + + QQtWavSound ( doubleClickSoundFile ); + } + +private: + QString clickSoundFile; + QString longClickSoundFile; + QString doubleClickSoundFile; +}; + +#endif // QQTDOUBLECLICKSOUNDHELPER_H diff --git a/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundlabel.cpp b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundlabel.cpp new file mode 100644 index 00000000..e76c435a --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundlabel.cpp @@ -0,0 +1 @@ +#include "qqtdoubleclicksoundlabel.h" diff --git a/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundlabel.h b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundlabel.h new file mode 100644 index 00000000..ee486725 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundlabel.h @@ -0,0 +1,112 @@ +#ifndef QQTDOUBLECLICKSOUNDLABEL_H +#define QQTDOUBLECLICKSOUNDLABEL_H + +#include +#include + +#include +#include + +/** + * 这个是个虚类 + * 提供安装ClickHelper的能力 + */ +class QQTSHARED_EXPORT QQtDoubleClickSoundLabel : public QQtLabel +{ +public: + explicit QQtDoubleClickSoundLabel ( QWidget* parent = 0 ) : + QQtLabel ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtDoubleClickSoundHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtDoubleClickSoundLabel() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + void longClick(); + void doubleClick(); + +signals: + void clickWithPoint ( QPoint point ); + void longClickWithPoint ( QPoint point ); + void doubleClickWithPoint ( QPoint point ); + + /** + * 用户可选使用 + */ +public: + inline void installClickHelper ( QQtDoubleClickSoundHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline QQtDoubleClickSoundHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + connect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + disconnect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, + SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); + } + +private: + QQtDoubleClickSoundHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtLabel::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtLabel::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtLabel::mouseDoubleClickEvent ( event ); + } +}; + +#endif // QQTDOUBLECLICKSOUNDLABEL_H diff --git a/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundwidget.cpp b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundwidget.cpp new file mode 100644 index 00000000..ee33c564 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundwidget.cpp @@ -0,0 +1 @@ +#include "qqtdoubleclicksoundwidget.h" diff --git a/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundwidget.h b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundwidget.h new file mode 100644 index 00000000..6def0c11 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtdoubleclicksoundwidget.h @@ -0,0 +1,115 @@ +#ifndef QQTDOUBLECLICKSOUNDWIDGET_H +#define QQTDOUBLECLICKSOUNDWIDGET_H + +#include +#include + +#include +#include + +/** + * 内置DoubleClickHelper + * + * 添加了doubleClick支持的QQtClickSoundSoundWidget + * 这个Widget表示了如何使用QQtWidgetClickHelper和它的子类 +*/ +class QQTSHARED_EXPORT QQtDoubleClickSoundWidget : public QQtWidget +{ + Q_OBJECT +public: + explicit QQtDoubleClickSoundWidget ( QWidget* parent = 0 ) : + QQtWidget ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtDoubleClickSoundHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtDoubleClickSoundWidget() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + void longClick(); + void doubleClick(); + +signals: + void clickWithPoint ( QPoint point ); + void longClickWithPoint ( QPoint point ); + void doubleClickWithPoint ( QPoint point ); + + /** + * 用户可选使用 + */ +public: + inline void installClickHelper ( QQtDoubleClickSoundHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline QQtDoubleClickSoundHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + connect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + disconnect ( mClickHelper, SIGNAL ( doubleClick() ), this, SIGNAL ( doubleClick() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( doubleClickWithPoint ( QPoint ) ), this, + SIGNAL ( doubleClickWithPoint ( QPoint ) ) ); + } + +private: + QQtDoubleClickSoundHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtWidget::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtWidget::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtWidget::mouseDoubleClickEvent ( event ); + } +}; + +#endif // QQTDOUBLECLICKSOUNDWIDGET_H diff --git a/src/exquisite/clicksoundwidgets/qqtlongclicksoundhelper.cpp b/src/exquisite/clicksoundwidgets/qqtlongclicksoundhelper.cpp new file mode 100644 index 00000000..1a498c2a --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtlongclicksoundhelper.cpp @@ -0,0 +1 @@ +#include "qqtlongclicksoundhelper.h" diff --git a/src/exquisite/clicksoundwidgets/qqtlongclicksoundhelper.h b/src/exquisite/clicksoundwidgets/qqtlongclicksoundhelper.h new file mode 100644 index 00000000..3e10f7a9 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtlongclicksoundhelper.h @@ -0,0 +1,58 @@ +#ifndef QQTLONGCLICKSOUNDHELPER_H +#define QQTLONGCLICKSOUNDHELPER_H + +#include +#include +#include +#include + +/** + * QQtLongClickSoundHelper + * + * 为Widget提供按键声音支持. + * + * 支持 + * click + * + */ +class QQTSHARED_EXPORT QQtLongClickSoundHelper : public QQtLongClickHelper +{ + Q_OBJECT + +public: + explicit QQtLongClickSoundHelper ( QObject* parent = 0 ) : QQtLongClickHelper ( parent ) { + connect ( this, SIGNAL ( click() ), this, SLOT ( slotClick() ) ); + connect ( this, SIGNAL ( longClick() ), this, SLOT ( slotLongClick() ) ); + } + virtual ~QQtLongClickSoundHelper() {} + + inline void setClickSound ( const QString clickSoundFile ) { + this->clickSoundFile = clickSoundFile; + } + inline void setLongClickSound ( const QString clickSoundFile ) { + this->longClickSoundFile = clickSoundFile; + } + + /** + * 内部 + */ +public slots: + void slotClick() { + if ( clickSoundFile.isEmpty() ) + return; + + QQtWavSound ( clickSoundFile ); + } + void slotLongClick() { + if ( longClickSoundFile.isEmpty() ) + return; + + QQtWavSound ( longClickSoundFile ); + } + +private: + QString clickSoundFile; + QString longClickSoundFile; +}; + +#endif // QQTLONGCLICKSOUNDHELPER_H diff --git a/src/exquisite/clicksoundwidgets/qqtlongclicksoundlabel.cpp b/src/exquisite/clicksoundwidgets/qqtlongclicksoundlabel.cpp new file mode 100644 index 00000000..07143717 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtlongclicksoundlabel.cpp @@ -0,0 +1 @@ +#include "qqtlongclicksoundlabel.h" diff --git a/src/exquisite/clicksoundwidgets/qqtlongclicksoundlabel.h b/src/exquisite/clicksoundwidgets/qqtlongclicksoundlabel.h new file mode 100644 index 00000000..d223a53e --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtlongclicksoundlabel.h @@ -0,0 +1,108 @@ +#ifndef QQTLONGCLICKSOUNDLABEL_H +#define QQTLONGCLICKSOUNDLABEL_H + +#include +#include + +#include +#include + +/** + * 这个是个虚类 + * 提供安装ClickHelper的能力 + * 为确定功能的子类Label服务 + */ +class QQTSHARED_EXPORT QQtLongClickSoundLabel : public QQtLabel +{ + Q_OBJECT +public: + explicit QQtLongClickSoundLabel ( QWidget* parent = 0 ) : + QQtLabel ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtLongClickSoundHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtLongClickSoundLabel() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + void longClick(); + +signals: + void clickWithPoint ( QPoint point ); + void longClickWithPoint ( QPoint point ); + + /** + * 用户可选使用 + */ +public: + inline void installClickHelper ( QQtLongClickSoundHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline QQtLongClickSoundHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + } + +private: + QQtLongClickSoundHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtLabel::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtLabel::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtLabel::mouseDoubleClickEvent ( event ); + } + +}; + +#endif // QQTLONGCLICKSOUNDLABEL_H diff --git a/src/exquisite/clicksoundwidgets/qqtlongclicksoundwidget.cpp b/src/exquisite/clicksoundwidgets/qqtlongclicksoundwidget.cpp new file mode 100644 index 00000000..583647cd --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtlongclicksoundwidget.cpp @@ -0,0 +1 @@ +#include "qqtlongclicksoundwidget.h" diff --git a/src/exquisite/clicksoundwidgets/qqtlongclicksoundwidget.h b/src/exquisite/clicksoundwidgets/qqtlongclicksoundwidget.h new file mode 100644 index 00000000..417ca033 --- /dev/null +++ b/src/exquisite/clicksoundwidgets/qqtlongclicksoundwidget.h @@ -0,0 +1,107 @@ +#ifndef QQTLONGCLICKSOUNDWIDGET_H +#define QQTLONGCLICKSOUNDWIDGET_H + +#include +#include + +#include +#include + +/** + * 提供安装ClickHelper的能力 + * 为确定功能的子类Widget服务 + */ +class QQTSHARED_EXPORT QQtLongClickSoundWidget : public QQtWidget +{ + Q_OBJECT + +public: + explicit QQtLongClickSoundWidget ( QWidget* parent = 0 ) : + QQtWidget ( parent ) { + mClickHelper = 0; + mClickHelper = new QQtLongClickSoundHelper ( this ); + installClickHelper ( mClickHelper ); + } + virtual ~QQtLongClickSoundWidget() {} + + /** + * 提供给App用信号 + * 界面层内部直接处理 + */ +signals: + void click(); + void longClick(); + +signals: + void clickWithPoint ( QPoint point ); + void longClickWithPoint ( QPoint point ); + + /** + * 用户可选使用 + */ +public: + inline void installClickHelper ( QQtLongClickSoundHelper* helper ) { + unConnectClickHelper(); + mClickHelper = helper; + if ( !mClickHelper ) + return; + connectClickHelper(); + } + inline QQtLongClickSoundHelper* clickHelper() const { + return mClickHelper; + } + + /** + * 子类重写这两个函数,实现丰富的click能力 + */ + // QQtWidget interface +protected: + virtual void connectClickHelper() { + if ( !mClickHelper ) + return; + + connect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + connect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + connect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + connect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + } + + virtual void unConnectClickHelper() { + if ( !mClickHelper ) + return; + + disconnect ( mClickHelper, SIGNAL ( click() ), this, SIGNAL ( click() ) ); + disconnect ( mClickHelper, SIGNAL ( longClick() ), this, SIGNAL ( longClick() ) ); + disconnect ( mClickHelper, SIGNAL ( clickWithPoint ( QPoint ) ), this, SIGNAL ( clickWithPoint ( QPoint ) ) ); + disconnect ( mClickHelper, SIGNAL ( longClickWithPoint ( QPoint ) ), this, SIGNAL ( longClickWithPoint ( QPoint ) ) ); + } + +private: + QQtLongClickSoundHelper* mClickHelper; + + /** + * 子类不必重写MouseEvent函数, + * 这里实现对clickHelper的响应能力 + */ + // QWidget interface +protected: + virtual void mousePressEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mousePressEvent ( event, this ); + return QQtWidget::mousePressEvent ( event ); + } + + virtual void mouseReleaseEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseReleaseEvent ( event, this ); + return QQtWidget::mouseReleaseEvent ( event ); + } + + virtual void mouseDoubleClickEvent ( QMouseEvent* event ) { + if ( mClickHelper ) + mClickHelper->mouseDoubleClickEvent ( event, this ); + return QQtWidget::mouseDoubleClickEvent ( event ); + } +}; + +#endif // QQTLONGCLICKSOUNDWIDGET_H diff --git a/src/exquisite/clickwidgets/qqtclicklabel.h b/src/exquisite/clickwidgets/qqtclicklabel.h index 1815f90a..845264db 100644 --- a/src/exquisite/clickwidgets/qqtclicklabel.h +++ b/src/exquisite/clickwidgets/qqtclicklabel.h @@ -39,7 +39,7 @@ signals: void clickWithPoint ( QPoint point ); /** - * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + * 用户可选使用 */ public: inline void installClickHelper ( QQtClickHelper* helper ) { @@ -49,7 +49,7 @@ public: return; connectClickHelper(); } - inline const QQtClickHelper* clickHelper() const { + inline QQtClickHelper* clickHelper() const { return mClickHelper; } diff --git a/src/exquisite/clickwidgets/qqtclickwidget.h b/src/exquisite/clickwidgets/qqtclickwidget.h index e6f6c850..e394f56d 100644 --- a/src/exquisite/clickwidgets/qqtclickwidget.h +++ b/src/exquisite/clickwidgets/qqtclickwidget.h @@ -37,7 +37,7 @@ signals: void clickWithPoint ( QPoint point ); /** - * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + * 用户可选使用 */ public: inline void installClickHelper ( QQtClickHelper* helper ) { @@ -47,7 +47,7 @@ public: return; connectClickHelper(); } - inline const QQtClickHelper* clickHelper() const { + inline QQtClickHelper* clickHelper() const { return mClickHelper; } diff --git a/src/exquisite/clickwidgets/qqtdoubleclicklabel.h b/src/exquisite/clickwidgets/qqtdoubleclicklabel.h index a178d79a..eb20cf70 100644 --- a/src/exquisite/clickwidgets/qqtdoubleclicklabel.h +++ b/src/exquisite/clickwidgets/qqtdoubleclicklabel.h @@ -37,17 +37,17 @@ signals: void doubleClickWithPoint ( QPoint point ); /** - * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + * 用户可选使用 */ public: - inline void installClickHelper ( QQtClickHelper* helper ) { + inline void installClickHelper ( QQtDoubleClickHelper* helper ) { unConnectClickHelper(); mClickHelper = helper; if ( !mClickHelper ) return; connectClickHelper(); } - inline const QQtClickHelper* clickHelper() const { + inline QQtDoubleClickHelper* clickHelper() const { return mClickHelper; } @@ -82,7 +82,7 @@ protected: } private: - QQtClickHelper* mClickHelper; + QQtDoubleClickHelper* mClickHelper; /** * 子类不必重写MouseEvent函数, diff --git a/src/exquisite/clickwidgets/qqtdoubleclickwidget.h b/src/exquisite/clickwidgets/qqtdoubleclickwidget.h index 130c7b38..6eb85787 100644 --- a/src/exquisite/clickwidgets/qqtdoubleclickwidget.h +++ b/src/exquisite/clickwidgets/qqtdoubleclickwidget.h @@ -40,17 +40,17 @@ signals: void doubleClickWithPoint ( QPoint point ); /** - * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + * 用户可选使用 */ public: - inline void installClickHelper ( QQtClickHelper* helper ) { + inline void installClickHelper ( QQtDoubleClickHelper* helper ) { unConnectClickHelper(); mClickHelper = helper; if ( !mClickHelper ) return; connectClickHelper(); } - inline const QQtClickHelper* clickHelper() const { + inline QQtDoubleClickHelper* clickHelper() const { return mClickHelper; } @@ -85,7 +85,7 @@ protected: } private: - QQtClickHelper* mClickHelper; + QQtDoubleClickHelper* mClickHelper; /** * 子类不必重写MouseEvent函数, diff --git a/src/exquisite/clickwidgets/qqtlongclicklabel.h b/src/exquisite/clickwidgets/qqtlongclicklabel.h index e7f10006..b0460a61 100644 --- a/src/exquisite/clickwidgets/qqtlongclicklabel.h +++ b/src/exquisite/clickwidgets/qqtlongclicklabel.h @@ -37,17 +37,17 @@ signals: void longClickWithPoint ( QPoint point ); /** - * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + * 用户可选使用 */ public: - inline void installClickHelper ( QQtClickHelper* helper ) { + inline void installClickHelper ( QQtLongClickHelper* helper ) { unConnectClickHelper(); mClickHelper = helper; if ( !mClickHelper ) return; connectClickHelper(); } - inline const QQtClickHelper* clickHelper() const { + inline QQtLongClickHelper* clickHelper() const { return mClickHelper; } @@ -77,7 +77,7 @@ protected: } private: - QQtClickHelper* mClickHelper; + QQtLongClickHelper* mClickHelper; /** * 子类不必重写MouseEvent函数, diff --git a/src/exquisite/clickwidgets/qqtlongclickwidget.h b/src/exquisite/clickwidgets/qqtlongclickwidget.h index 8d39fdcd..462e53fb 100644 --- a/src/exquisite/clickwidgets/qqtlongclickwidget.h +++ b/src/exquisite/clickwidgets/qqtlongclickwidget.h @@ -37,17 +37,17 @@ signals: void longClickWithPoint ( QPoint point ); /** - * 用户需要这个进行设置ClickHelper,这个label才产生click能力. + * 用户可选使用 */ public: - inline void installClickHelper ( QQtClickHelper* helper ) { + inline void installClickHelper ( QQtLongClickHelper* helper ) { unConnectClickHelper(); mClickHelper = helper; if ( !mClickHelper ) return; connectClickHelper(); } - inline const QQtClickHelper* clickHelper() const { + inline QQtLongClickHelper* clickHelper() const { return mClickHelper; } @@ -77,7 +77,7 @@ protected: } private: - QQtClickHelper* mClickHelper; + QQtLongClickHelper* mClickHelper; /** * 子类不必重写MouseEvent函数, diff --git a/src/qqt_header.pri b/src/qqt_header.pri index 599b5c39..fd893a5e 100644 --- a/src/qqt_header.pri +++ b/src/qqt_header.pri @@ -343,7 +343,11 @@ contains (DEFINES, __EXQUISITE__) { #single color only widget DEFINES += __COLORWIDGETS__ + #click widgets DEFINES += __CLICKWIDGETS__ + + #click sound widgets + DEFINES += __CLICKSOUNDWIDGETS__ } ######################################################################## @@ -433,6 +437,7 @@ defineReplace(qqt_header){ #exquisite widgets command += $${path}/exquisite + command += $${path}/exquisite/clicksoundwidgets command += $${path}/exquisite/clickwidgets command += $${path}/exquisite/svgwidgets command += $${path}/exquisite/gifwidgets diff --git a/src/qqt_source.pri b/src/qqt_source.pri index a5548da4..f096baf0 100644 --- a/src/qqt_source.pri +++ b/src/qqt_source.pri @@ -325,12 +325,38 @@ contains (DEFINES, __EXQUISITE__) { $$PWD/exquisite/qqtframelesshelper.h \ $$PWD/exquisite/qqtframelesshelperprivate.h + #can click sound support widgets + contains (DEFINES, __CLICKSOUNDWIDGETS__) { + SOURCES += \ + $$PWD/exquisite/clicksoundwidgets/qqtclicksoundhelper.cpp \ + $$PWD/exquisite/clicksoundwidgets/qqtlongclicksoundhelper.cpp \ + $$PWD/exquisite/clicksoundwidgets/qqtdoubleclicksoundhelper.cpp + HEADERS += \ + $$PWD/exquisite/clicksoundwidgets/qqtclicksoundhelper.h \ + $$PWD/exquisite/clicksoundwidgets/qqtlongclicksoundhelper.h \ + $$PWD/exquisite/clicksoundwidgets/qqtdoubleclicksoundhelper.h + + SOURCES += \ + $$PWD/exquisite/clicksoundwidgets/qqtclicksoundwidget.cpp \ + $$PWD/exquisite/clicksoundwidgets/qqtlongclicksoundwidget.cpp \ + $$PWD/exquisite/clicksoundwidgets/qqtdoubleclicksoundwidget.cpp + HEADERS += \ + $$PWD/exquisite/clicksoundwidgets/qqtclicksoundwidget.h \ + $$PWD/exquisite/clicksoundwidgets/qqtlongclicksoundwidget.h \ + $$PWD/exquisite/clicksoundwidgets/qqtdoubleclicksoundwidget.h + + SOURCES += \ + $$PWD/exquisite/clicksoundwidgets/qqtclicksoundlabel.cpp \ + $$PWD/exquisite/clicksoundwidgets/qqtlongclicksoundlabel.cpp \ + $$PWD/exquisite/clicksoundwidgets/qqtdoubleclicksoundlabel.cpp + HEADERS += \ + $$PWD/exquisite/clicksoundwidgets/qqtclicksoundlabel.h \ + $$PWD/exquisite/clicksoundwidgets/qqtlongclicksoundlabel.h \ + $$PWD/exquisite/clicksoundwidgets/qqtdoubleclicksoundlabel.h + } + #can click support widgets contains (DEFINES, __CLICKWIDGETS__) { - SOURCES += \ - $$PWD/exquisite/clickwidgets/qqtclicksoundhelper.cpp - HEADERS += \ - $$PWD/exquisite/clickwidgets/qqtclicksoundhelper.h SOURCES += \ $$PWD/exquisite/clickwidgets/qqtclickhelper.cpp \ diff --git a/test/QQtWidgetClickSoundHelperTest/AppRoot/click.wav b/test/QQtWidgetClickSoundHelperTest/AppRoot/click.wav new file mode 100644 index 0000000000000000000000000000000000000000..ce90ed56a26b7f60ea652e7f835863d4cbed374d GIT binary patch literal 150044 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 Dc_nW1 literal 0 HcmV?d00001 diff --git a/test/QQtWidgetClickSoundHelperTest/AppRoot/doubleclick.wav b/test/QQtWidgetClickSoundHelperTest/AppRoot/doubleclick.wav new file mode 100644 index 0000000000000000000000000000000000000000..d7e9d5b4f43e2df7c4365bf308b0cc9294151c17 GIT binary patch literal 200044 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 #S=dShTNgTz(a$4gc9QchV+MWnVHg?Y;6Pf*w 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 literal 0 HcmV?d00001 diff --git a/test/QQtWidgetClickSoundHelperTest/QQtWidgetClickSoundHelperTest.pro b/test/QQtWidgetClickSoundHelperTest/QQtWidgetClickSoundHelperTest.pro new file mode 100644 index 00000000..585d2751 --- /dev/null +++ b/test/QQtWidgetClickSoundHelperTest/QQtWidgetClickSoundHelperTest.pro @@ -0,0 +1,40 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2018-03-28T19:21:56 +# +#------------------------------------------------- + +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +TARGET = QQtWidgetClickSoundHelperTest +TEMPLATE = app + +# The following define makes your compiler emit warnings if you use +# any feature of Qt which as been marked as deprecated (the exact warnings +# depend on your compiler). Please consult the documentation of the +# deprecated API in order to know how to port your code away from it. +DEFINES += QT_DEPRECATED_WARNINGS + +# You can also make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + + +SOURCES += main.cpp\ + mainwindow.cpp + +HEADERS += mainwindow.h + +FORMS += mainwindow.ui + +#促使qqt_deploy_config配置执行,没有这个变量不执行。 +APP_CONFIG_PWD = $${PWD}/AppRoot +equals(QMAKE_HOST.os, Windows) { + APP_CONFIG_PWD ~=s,/,\\,g +} + +system(touch main.cpp) +include (../../src/app_base_manager.pri) diff --git a/test/QQtWidgetClickSoundHelperTest/main.cpp b/test/QQtWidgetClickSoundHelperTest/main.cpp new file mode 100644 index 00000000..26208fe5 --- /dev/null +++ b/test/QQtWidgetClickSoundHelperTest/main.cpp @@ -0,0 +1,11 @@ +#include "mainwindow.h" +#include + +int main ( int argc, char* argv[] ) +{ + QQtApplication a ( argc, argv ); + MainWindow w; + w.show(); + + return a.exec(); +} diff --git a/test/QQtWidgetClickSoundHelperTest/mainwindow.cpp b/test/QQtWidgetClickSoundHelperTest/mainwindow.cpp new file mode 100644 index 00000000..b5ac744c --- /dev/null +++ b/test/QQtWidgetClickSoundHelperTest/mainwindow.cpp @@ -0,0 +1,72 @@ +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include "qqtcore.h" +#include + +MainWindow::MainWindow ( QWidget* parent ) : + QMainWindow ( parent ), + ui ( new Ui::MainWindow ) +{ + ui->setupUi ( this ); + ui->widget; + ui->widget->setPixmap ( "" ); + + connect ( ui->widget, SIGNAL ( click() ), + this, SLOT ( setSum() ) ); + connect ( ui->widget, SIGNAL ( doubleClick() ), + this, SLOT ( set2Sum() ) ); + connect ( ui->widget, SIGNAL ( longClick() ), + this, SLOT ( set3Sum() ) ); + + ui->widget->clickHelper()->setClickSound ( qrc ( "click.wav" ) ); + ui->widget->clickHelper()->setLongClickSound ( qrc ( "longclick.wav" ) ); + ui->widget->clickHelper()->setDoubleClickSound ( qrc ( "doubleclick.wav" ) ); + + connect ( ui->widget_2, SIGNAL ( click() ), + this, SLOT ( set4Sum() ) ); + connect ( ui->widget_2, SIGNAL ( longClick() ), + this, SLOT ( set5Sum() ) ); + + ui->widget_2->clickHelper()->setClickSound ( qrc ( "click.wav" ) ); + ui->widget_2->clickHelper()->setLongClickSound ( qrc ( "longclick.wav" ) ); + + connect ( ui->widget_3, SIGNAL ( click() ), + this, SLOT ( set6Sum() ) ); + ui->widget_3->clickHelper()->setClickSound ( qrc ( "click.wav" ) ); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::setSum() +{ + sender(); + ui->textBrowser->append ( QString ( "%1 click" ).arg ( ui->widget->clickHelper()->totalClickNum() ) );; +} + +void MainWindow::set2Sum() +{ + ui->textBrowser->append ( QString ( "%1 double click" ).arg ( ui->widget->clickHelper()->totalClickNum() ) );; +} + +void MainWindow::set3Sum() +{ + ui->textBrowser->append ( QString ( "%1 long click" ).arg ( ui->widget->clickHelper()->totalClickNum() ) );; +} + +void MainWindow::set4Sum() +{ + ui->textBrowser_2->append ( QString ( "%1 click" ).arg ( ui->widget_2->clickHelper()->totalClickNum() ) );; +} + +void MainWindow::set5Sum() +{ + ui->textBrowser_2->append ( QString ( "%1 long click" ).arg ( ui->widget_2->clickHelper()->totalClickNum() ) );; +} + +void MainWindow::set6Sum() +{ + ui->textBrowser_3->append ( QString ( "%1 click" ).arg ( ui->widget_3->clickHelper()->totalClickNum() ) );; +} diff --git a/test/QQtWidgetClickSoundHelperTest/mainwindow.h b/test/QQtWidgetClickSoundHelperTest/mainwindow.h new file mode 100644 index 00000000..f081a145 --- /dev/null +++ b/test/QQtWidgetClickSoundHelperTest/mainwindow.h @@ -0,0 +1,32 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +namespace Ui { +class MainWindow; +} + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + explicit MainWindow ( QWidget* parent = 0 ); + ~MainWindow(); + +public slots: + void setSum(); + void set2Sum(); + void set3Sum(); + + void set4Sum(); + void set5Sum(); + + void set6Sum(); + +private: + Ui::MainWindow* ui; +}; + +#endif // MAINWINDOW_H diff --git a/test/QQtWidgetClickSoundHelperTest/mainwindow.ui b/test/QQtWidgetClickSoundHelperTest/mainwindow.ui new file mode 100644 index 00000000..e1132e49 --- /dev/null +++ b/test/QQtWidgetClickSoundHelperTest/mainwindow.ui @@ -0,0 +1,130 @@ + + + MainWindow + + + + 0 + 0 + 816 + 519 + + + + MainWindow + + + + + + + 2 + + + + Double Click + + + + + + + + + + 200 + 0 + + + + + + + + + LongClick + + + + + + + + + + 200 + 0 + + + + + + + + + Click + + + + + + + + + + 200 + 0 + + + + + + + + + + + + + + 0 + 0 + 816 + 17 + + + + + + TopToolBarArea + + + false + + + + + + + + QQtDoubleClickSoundWidget + QWidget +
qqtdoubleclicksoundwidget.h
+ 1 +
+ + QQtLongClickSoundWidget + QWidget +
qqtlongclicksoundwidget.h
+ 1 +
+ + QQtClickSoundWidget + QWidget +
qqtclicksoundwidget.h
+ 1 +
+
+ + +