#include "softnumkeyboardwidget.h" #include #include #include #include #include #include #include #include "Windows.h" #include #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()<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()<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 btns = widgetMain->findChildren(); foreach (QPushButton *btn, btns) { connect(btn, SIGNAL(clicked()), this, SLOT(btnClicked())); } // btns = widgetTop->findChildren(); // 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(message); // if(msg->message == 3000)//消息类型 { move(msg->wParam,msg->lParam); return true; } } return QWidget::nativeEvent(eventType, message, result);//交给Qt处理 }