123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- #include "softnumkeyboardwidget.h"
- #include <QMutex>
- #include <QApplication>
- #include <QTimer>
- #include <QLayout>
- #include <QLabel>
- #include <QTextEdit>
- #include <QLineEdit>
- #include "Windows.h"
- #include<QDebug>
- #pragma comment(lib, "user32.lib")
- /*
- *
- 示例1 外部编辑框点击弹起软键盘并移动窗口
- bool QModifyPasswordDialog::eventFilter(QObject *watched, QEvent *event)
- {
- if(watched == passwordEdit1){
- static QPoint point;
- switch (event->type()) {
- case QEvent::MouseButtonPress:
- point.setY(cursor().pos().y());
- qDebug()<<"i find it";
- HWND hw1 = ::FindWindowA(NULL, "数字软键盘");
- if(hw1==NULL)
- {
- QString dir = QCoreApplication::applicationDirPath();
- QProcess::startDetached(QString(dir+"//SoftNumKeyBoard.exe"));
- }
- RECT rc;
- GetWindowRect(hw1,&rc);
- ::MoveWindow(hw1,cursor().pos().x(),cursor().pos().y()+30,rc.right-rc.left,rc.bottom-rc.top,true);
- qDebug()<<hw1;
- break;
- }
- }
- return QDialog::eventFilter(watched, event);
- }
- 示例2 外部编辑框点击弹起软键盘并发送移动窗口命令
- bool QModifyPasswordDialog::eventFilter(QObject *watched, QEvent *event)
- {
- if(watched == passwordEdit1){
- static QPoint point;
- switch (event->type()) {
- case QEvent::MouseButtonPress:
- point.setY(cursor().pos().y());
- qDebug()<<"i find it";
- HWND hw1 = ::FindWindowA(NULL, "数字软键盘");
- if(hw1==NULL)
- {
- QString dir = QCoreApplication::applicationDirPath();
- QProcess::startDetached(QString(dir+"//SoftNumKeyBoard.exe"));
- Sleep(500);
- hw1 = ::FindWindowA(NULL, "数字软键盘");
- }
- ::PostMessageA(hw1,3000,cursor().pos().x(),cursor().pos().y()+30);
- qDebug()<<hw1;
- break;
- }
- }
- return QDialog::eventFilter(watched, event);
- }
- */
- SoftNumKeyboardWidget::SoftNumKeyboardWidget(QWidget *parent) : QWidget(parent)
- {
- resize(350, 350);
- initUI();
- initForm();
- LONG exs = GetWindowLong((HWND)this->winId(), GWL_EXSTYLE);
- exs |= 0x08000000;//始终不处于活动状态
- SetWindowLong((HWND)this->winId(),GWL_EXSTYLE, exs);
- //置顶
- SetWindowPos((HWND)this->winId(), HWND_TOPMOST, this->x(), this->y(), this->width(), this->height(), SWP_SHOWWINDOW);
- }
- SoftNumKeyboardWidget::~SoftNumKeyboardWidget()
- {
- }
- void SoftNumKeyboardWidget::initUI()
- {
- QGridLayout *gridLayout_3;
- //QHBoxLayout *lay2;
- //QLabel *labTitle;
- QGridLayout *gridLayout;
- QPushButton *btn3;
- QPushButton *btn5;
- QPushButton *btn6;
- QPushButton *btn7;
- QPushButton *btn8;
- QPushButton *btn9;
- QPushButton *btn0;
- QPushButton *btn4;
- QPushButton *btn1;
- QPushButton *btn2;
- QPushButton *btnDot;
- QSizePolicy sizePolicy1(QSizePolicy::Ignored, QSizePolicy::Expanding);
- sizePolicy1.setHorizontalStretch(0);
- sizePolicy1.setVerticalStretch(0);
- gridLayout_3 = new QGridLayout(this);
- gridLayout_3->setSpacing(0);
- gridLayout_3->setObjectName(QStringLiteral("gridLayout_3"));
- gridLayout_3->setContentsMargins(0, 0, 0, 0);
- // widgetTop = new QWidget(this);
- // widgetTop->setObjectName(QStringLiteral("widgetTop"));
- // widgetTop->setFixedHeight(40);
- // lay2 = new QHBoxLayout(widgetTop);
- // lay2->setSpacing(0);
- // lay2->setObjectName(QStringLiteral("lay2"));
- // lay2->setContentsMargins(0, 0, 0, 0);
- // labTitle = new QLabel(widgetTop);
- // labTitle->setObjectName(QStringLiteral("labTitle"));
- // labTitle->setAlignment(Qt::AlignLeft);
- // labTitle->setContentsMargins(10, 10, 0, 0);
- // lay2->addWidget(labTitle);
- // btnClose = new QPushButton(widgetTop);
- // btnClose->setObjectName(QStringLiteral("btnClose"));
- // btnClose->setFixedWidth(32);
- // btnClose->setFixedHeight(32);
- // btnClose->setFocusPolicy(Qt::NoFocus);
- // lay2->addWidget(btnClose);
- // gridLayout_3->addWidget(widgetTop, 0, 0, 1, 2);
- widgetMain = new QWidget(this);
- widgetMain->setObjectName(QStringLiteral("widgetMain"));
- QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Preferred);
- sizePolicy2.setHorizontalStretch(0);
- sizePolicy2.setVerticalStretch(0);
- sizePolicy2.setHeightForWidth(widgetMain->sizePolicy().hasHeightForWidth());
- widgetMain->setSizePolicy(sizePolicy2);
- gridLayout = new QGridLayout(widgetMain);
- gridLayout->setObjectName(QStringLiteral("gridLayout"));
- btn7 = new QPushButton(widgetMain);
- btn7->setObjectName(QStringLiteral("btn7"));
- sizePolicy1.setHeightForWidth(btn7->sizePolicy().hasHeightForWidth());
- btn7->setSizePolicy(sizePolicy1);
- btn7->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btn7, 0, 0, 1, 1);
- btn8 = new QPushButton(widgetMain);
- btn8->setObjectName(QStringLiteral("btn8"));
- sizePolicy1.setHeightForWidth(btn8->sizePolicy().hasHeightForWidth());
- btn8->setSizePolicy(sizePolicy1);
- btn8->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btn8, 0, 1, 1, 1);
- btn9 = new QPushButton(widgetMain);
- btn9->setObjectName(QStringLiteral("btn9"));
- sizePolicy1.setHeightForWidth(btn9->sizePolicy().hasHeightForWidth());
- btn9->setSizePolicy(sizePolicy1);
- btn9->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btn9, 0, 2, 1, 1);
- btn4 = new QPushButton(widgetMain);
- btn4->setObjectName(QStringLiteral("btn4"));
- sizePolicy1.setHeightForWidth(btn4->sizePolicy().hasHeightForWidth());
- btn4->setSizePolicy(sizePolicy1);
- btn4->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btn4, 1, 0, 1, 1);
- btn5 = new QPushButton(widgetMain);
- btn5->setObjectName(QStringLiteral("btn5"));
- sizePolicy1.setHeightForWidth(btn5->sizePolicy().hasHeightForWidth());
- btn5->setSizePolicy(sizePolicy1);
- btn5->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btn5, 1, 1, 1, 1);
- btn6 = new QPushButton(widgetMain);
- btn6->setObjectName(QStringLiteral("btn6"));
- sizePolicy1.setHeightForWidth(btn6->sizePolicy().hasHeightForWidth());
- btn6->setSizePolicy(sizePolicy1);
- btn6->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btn6, 1, 2, 1, 1);
- btn1 = new QPushButton(widgetMain);
- btn1->setObjectName(QStringLiteral("btn1"));
- sizePolicy1.setHeightForWidth(btn1->sizePolicy().hasHeightForWidth());
- btn1->setSizePolicy(sizePolicy1);
- btn1->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btn1, 2, 0, 1, 1);
- btn2 = new QPushButton(widgetMain);
- btn2->setObjectName(QStringLiteral("btn2"));
- sizePolicy1.setHeightForWidth(btn2->sizePolicy().hasHeightForWidth());
- btn2->setSizePolicy(sizePolicy1);
- btn2->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btn2, 2, 1, 1, 1);
- btn3 = new QPushButton(widgetMain);
- btn3->setObjectName(QStringLiteral("btn3"));
- sizePolicy1.setHeightForWidth(btn3->sizePolicy().hasHeightForWidth());
- btn3->setSizePolicy(sizePolicy1);
- btn3->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btn3, 2, 2, 1, 1);
- btn0 = new QPushButton(widgetMain);
- btn0->setObjectName(QStringLiteral("btn0"));
- sizePolicy1.setHeightForWidth(btn0->sizePolicy().hasHeightForWidth());
- btn0->setSizePolicy(sizePolicy1);
- btn0->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btn0, 3, 0, 1, 1);
- btnDot = new QPushButton(widgetMain);
- btnDot->setObjectName(QStringLiteral("btnDot"));
- sizePolicy1.setHeightForWidth(btnDot->sizePolicy().hasHeightForWidth());
- btnDot->setSizePolicy(sizePolicy1);
- btnDot->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btnDot, 3, 1, 1, 1);
- btnDelete = new QPushButton(widgetMain);
- btnDelete->setObjectName(QStringLiteral("btnDelete"));
- sizePolicy1.setHeightForWidth(btnDelete->sizePolicy().hasHeightForWidth());
- btnDelete->setSizePolicy(sizePolicy1);
- btnDelete->setFocusPolicy(Qt::NoFocus);
- gridLayout->addWidget(btnDelete, 3, 2, 1, 1);
- gridLayout_3->addWidget(widgetMain, 1, 1, 1, 1);
- //labTitle->setText(QString());
- btn0->setText("0");
- btn1->setText("1");
- btn2->setText("2");
- btn3->setText("3");
- btn4->setText("4");
- btn5->setText("5");
- btn6->setText("6");
- btn7->setText("7");
- btn8->setText("8");
- btn9->setText("9");
- btnDot->setText(".");
- btnDelete->setText(QString());
- this->setWindowTitle(QString::fromLocal8Bit("数字软键盘"));
- QList<QPushButton *> btns = widgetMain->findChildren<QPushButton *>();
- foreach (QPushButton *btn, btns) {
- connect(btn, SIGNAL(clicked()), this, SLOT(btnClicked()));
- }
- // btns = widgetTop->findChildren<QPushButton *>();
- // foreach (QPushButton *btn, btns) {
- // connect(btn, SIGNAL(clicked()), this, SLOT(btnClicked()));
- // }
- }
- void SoftNumKeyboardWidget::initForm()
- {
- setFrmSize(350, 350);
- //图标固定大小
- setIconSize(20, 20);
- //按钮之间的间隔
- setSpacing(6);
- //面板的样式
- setMainStyle();
- }
- void SoftNumKeyboardWidget::btnClicked()
- {
- //keybd_eve7nt(VK_F5,0,0,0);
- QPushButton *btn = (QPushButton *)sender();
- QString objectName = btn->objectName();
- if(objectName == "btnClose")
- {
- close();
- }
- if (objectName == "btnDelete")
- {
- deleteValue();
- }
- else {
- QString value = btn->text();
- insertValue(value);
- }
- }
- void SoftNumKeyboardWidget::insertValue(const QString &v)
- {
-
- QString value = v;
- int key = VK_NUMPAD0;
- if(v == ".")
- {
- key=110;
- }
- else
- key +=v.toInt();
- keybd_event(key,0,0,0);
- }
- void SoftNumKeyboardWidget::deleteValue()
- {
- keybd_event(VK_BACK,0,0,0);
- }
- void SoftNumKeyboardWidget::setFrmSize(int frmWidth, int frmHeight)
- {
- this->frmWidth = frmWidth;
- this->frmHeight = frmHeight;
- this->setMinimumSize(frmWidth, frmHeight);
- }
- void SoftNumKeyboardWidget::setIconSize(int iconWidth, int iconHeight)
- {
- QSize icoSize3(iconWidth + 3, iconHeight + 3);
- btnDelete->setIconSize(icoSize3);
- }
- void SoftNumKeyboardWidget::setSpacing(int spacing)
- {
- widgetMain->layout()->setSpacing(spacing);
- }
- void SoftNumKeyboardWidget::setMainStyle()
- {
- btnDelete->setIcon(QIcon(":/image/delete_white.png"));
- //btnClose->setIcon(QIcon(ThemeInfo::staticGetIcon("dock_close.png")));
- setColor("#191919", "#F3F3F3", "#313131", "#4189D3", "#F3F3F3", "#F95717", "#F3F3F3");
- }
- void SoftNumKeyboardWidget::setColor(const QString &mainBackgroundColor, const QString &mainTextColor, const QString &btnBackgroundColor,
- const QString &btnHoveColor, const QString &btnHoveTextColor, const QString &labHoveColor, const QString &labHoveTextColor)
- {
- QStringList qss;
- qss.append(QString("QWidget{background-color:%1;}").arg(mainBackgroundColor));
- qss.append(QString("QWidget#widgetTop,QWidget#widgetMain,QWidget#widgetNumber{background-color:%1;}").arg(mainBackgroundColor));
- qss.append(QString("QPushButton{border-width:0px;border-radius:3px;color:%1;}").arg(mainTextColor));
- qss.append(QString("QPushButton{padding:0px;background-color:%1;}").arg(btnBackgroundColor));
- qss.append(QString("QPushButton:pressed,QPushButton:hover{background-color:%1;color:%2;}").arg(btnHoveColor).arg(btnHoveTextColor));
- qss.append(QString("QLabel{border-width:0px;border-radius:3px;color:%1;background:none;}").arg(mainTextColor));
- //qss.append(QString("QLabel:pressed,QLabel:hover{background-color:%1;color:%2;}").arg(labHoveColor).arg(labHoveTextColor));
- //设置主样式
- this->setStyleSheet(qss.join(""));
- }
- bool SoftNumKeyboardWidget::nativeEvent(const QByteArray &eventType, void *message, long *result)
- {
- if (eventType == "windows_generic_MSG") //windows平台
- {
- MSG* msg = reinterpret_cast<MSG*>(message); //
- if(msg->message == 3000)//消息类型
- {
- move(msg->wParam,msg->lParam);
- return true;
- }
- }
- return QWidget::nativeEvent(eventType, message, result);//交给Qt处理
- }
|