根据qt中自带inputpanel实例,自己重写该过程,并详细分析过程及注意事项。
新建,GUI应用,基类Qwidget,主界面简单拖入几个有输入功能的部件。
#ifndef MYINPUTPANEL_H #define MYINPUTPANEL_H
#include <QtGui> #include <QWidget>
namespace Ui { class MyInputPanel; }
class MyInputPanel : public QWidget { Q_OBJECT public: MyInputPanel(); QWidget *getFocusedWidget();//获取有光标且需要输入的窗口指针 signals: void characterGenerated(QChar character);//字符产生,每个按键都要对应一个ASCII
protected://事件处理函数,这里只处理窗口激活事件,其它事件lfyw bool event(QEvent *e);
private slots://保存上次要输入窗口的指针 void saveFocusWidget(QWidget *oldFocus, QWidget *newFocus); void buttonClicked(QWidget *w);
private: Ui::MyInputPanel *ui; QWidget *lastFocusedWidget; QSignalMapper signalMapper;//多信号的映射 };
#endif // MYINPUTPANEL_H
myinputpanel.cpp
#include "myinputpanel.h" #include "ui_myinputpanelform.h"
MyInputPanel::MyInputPanel() : QWidget(0, Qt::Tool | Qt::WindowStaysOnTopHint), //工具窗口 lastFocusedWidget(0), ui(new Ui::MyInputPanel) { ui->setupUi(this); //连接应用程序的光标改变信号与saveFocusWidget connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)), this, SLOT(saveFocusWidget(QWidget*,QWidget*))); //用setMapping函数将各按键与特殊的字符串或整数建立映射, //这里是ui->panelButton_0和其自身这种整数建立映射, //这种特殊的整数在map函数重新发送各信号的时候有用 signalMapper.setMapping(ui->panelButton_0, ui->panelButton_0); signalMapper.setMapping(ui->panelButton_1, ui->panelButton_1); signalMapper.setMapping(ui->panelButton_2, ui->panelButton_2); signalMapper.setMapping(ui->panelButton_3, ui->panelButton_3); signalMapper.setMapping(ui->panelButton_4, ui->panelButton_4); signalMapper.setMapping(ui->panelButton_5, ui->panelButton_5); signalMapper.setMapping(ui->panelButton_6, ui->panelButton_6); signalMapper.setMapping(ui->panelButton_7, ui->panelButton_7); signalMapper.setMapping(ui->panelButton_8, ui->panelButton_8); signalMapper.setMapping(ui->panelButton_9, ui->panelButton_9); signalMapper.setMapping(ui->panelButton_star, ui->panelButton_star); signalMapper.setMapping(ui->panelButton_hash, ui->panelButton_hash); //再将各按键对象和map函数建立信号与槽的关系 connect(ui->panelButton_0, SIGNAL(clicked()), &signalMapper, SLOT(map())); connect(ui->panelButton_1, SIGNAL