QT5 多语言设计及键盘控制

来源:互联网 发布:网络电商平台 编辑:程序博客网 时间:2024/05/18 04:01

//主界面类

#ifndef MYKEYRESPOND_H

#define MYKEYRESPOND_H


#include <QtWidgets/QWidget>
#include "ui_mykeyrespond.h"
#include <QKeyEvent>
#include <QMouseEvent>
#include "mychilddlg.h"
#include <QTextCodec>
#include <QtGui>


class MyKeyRespond : public QWidget
{
Q_OBJECT


public:
MyKeyRespond(QWidget *parent = 0);
~MyKeyRespond();


virtual void keyPressEvent(QKeyEvent *event);
//virtual void changeEvent(QEvent *e);
void setQTranslator(QTranslator *tra);
private:
Ui::MyKeyRespondClass ui;
MyChildDlg *m_dlg;
QTranslator* translator;
public slots:
  void SetLanguage();
};


#endif // MYKEYRESPOND_H


#include "mykeyrespond.h"
#include <QMessageBox>




#pragma execution_character_set("utf-8")//解决中文乱码


MyKeyRespond::MyKeyRespond(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
m_dlg = new MyChildDlg;
connect(ui.m_butsetLanguage, SIGNAL(clicked()), this, SLOT(SetLanguage()));
}


MyKeyRespond::~MyKeyRespond()
{


}

//重写的键盘事件
void MyKeyRespond::keyPressEvent(QKeyEvent *event)
{


switch (event->key())
{
case Qt::Key_F1://设置界面
{
m_dlg->exec();
break;
}
case Qt::Key_F2://导管信息界面
{
QMessageBox msgBox;
msgBox.setText(tr("Catheter information page F2"));
msgBox.exec();
break;


}
case Qt::Key_F3://病历列表界面
{
QMessageBox msgBox;
msgBox.setText(tr("Medical record list interface F3"));
msgBox.exec();
break;
}
case Qt::Key_F4://检查列表
{
QMessageBox msgBox;
msgBox.setText(tr("Check the list F4"));
msgBox.exec();
break;
}
case Qt::Key_F5://编辑界面
{
QMessageBox msgBox;
msgBox.setText(tr("The editing interface F5"));//-no-obsolete -codecfortr system
msgBox.exec();
break;
}
case Qt::Key_F6://登录界面(注销)
{
QMessageBox msgBox;
msgBox.setText(tr("Login screen F6"));
msgBox.exec();
break;
}
case Qt::Key_F12://帮助界面
{
QMessageBox msgBox;
msgBox.setText(tr("Help interface F12"));
msgBox.exec();
break;
}
default:
break;
}


//按下 空格 键
if (event->key() == Qt::Key_Space)
{
QMessageBox msgBox;
msgBox.setText(tr("You press the space key"));
msgBox.exec();
}


//按下Esc键 关闭当前窗口
if (event->key() == Qt::Key_Escape)
{
this->close();
}



// 是否按下Ctrl键+按键
if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_A))
{
QMessageBox msgBox;
msgBox.setText(tr("You have press the Ctrl+ A key."));
msgBox.exec();
}


// 是否按下Alt键+按键
if ((event->modifiers() == Qt::AltModifier) && (event->key() == Qt::Key_A))
{
QMessageBox msgBox;
msgBox.setText(tr("You have press the Alt+ A key."));
msgBox.exec();
}




// 是否按下Ctrl键+鼠标Left键
if ((event->modifiers() == Qt::ControlModifier) && (QApplication::mouseButtons() == Qt::LeftButton))
{
QMessageBox msgBox;
msgBox.setText(tr("You have press the Ctrl+ Left key."));
msgBox.exec();
}


}
int i = 0;


void MyKeyRespond::SetLanguage()
{
if (i == 1)
{
i = 0;
bool b = false;
b = translator->load("CN_zh.qm");//CN_zh mykeyrespond_en
qApp->installTranslator(translator);
ui.retranslateUi(this);
m_dlg->Refrush(0);


ui.m_labKeyRespond->setText(tr("Chinese"));
}
else
{
i = 1;
qApp->removeTranslator(translator);
ui.retranslateUi(this);
m_dlg->Refrush(1);


ui.m_labKeyRespond->setText(tr("English"));
}
}


void MyKeyRespond::setQTranslator(QTranslator *tra)
{
translator = tra;
}

//子界面类

#include <QDialog>
#include "ui_mychilddlg.h"
#include <QKeyEvent>
#include <QMouseEvent>
#include <QTextCodec>
#include <QtGui>


class MyChildDlg : public QDialog
{
Q_OBJECT


public:
MyChildDlg(QWidget *parent = 0);
~MyChildDlg();
virtual void keyPressEvent(QKeyEvent *event);
virtual void changeEvent(QEvent *e);




void Refrush(int i);
QTranslator translator;
private:
Ui::MyChildDlg ui;
};


#endif // MYCHILDDLG_H


#include "mychilddlg.h"
#include <QMessageBox>
#include "mychilddlgtwo.h"




MyChildDlg::MyChildDlg(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
}


MyChildDlg::~MyChildDlg()
{


}

//重写的键盘事件
void MyChildDlg::keyPressEvent(QKeyEvent *event)
{


switch (event->key())
{
case Qt::Key_F1://设置界面
{
MyChildDlgTwo m_dlg;
m_dlg.exec();
break;
}
case Qt::Key_F2://导管信息界面
{
QMessageBox msgBox;
msgBox.setText(tr("Catheter information page F2"));
msgBox.exec();
break;


}
case Qt::Key_F3://病历列表界面
{
QMessageBox msgBox;
msgBox.setText(tr("Medical record list interface F3"));
msgBox.exec();
break;
}
case Qt::Key_F4://检查列表
{
QMessageBox msgBox;
msgBox.setText(tr("Check the list F4"));
msgBox.exec();
break;
}
case Qt::Key_F5://编辑界面
{
QMessageBox msgBox;
msgBox.setText(tr("The editing interface F5"));//-no-obsolete -codecfortr system
msgBox.exec();
break;
}
case Qt::Key_F6://登录界面(注销)
{
QMessageBox msgBox;
msgBox.setText(tr("Login screen F6"));
msgBox.exec();
break;
}
case Qt::Key_F12://帮助界面
{
QMessageBox msgBox;
msgBox.setText(tr("Help interface F12"));
msgBox.exec();
break;
}
default:
break;
}




//按下 空格 键
if (event->key() == Qt::Key_Space)
{
QMessageBox msgBox;
msgBox.setText(tr("You press the space key"));
msgBox.exec();
}


//按下Esc键 关闭当前窗口
if (event->key() == Qt::Key_Escape)
{
this->close();
}




// 是否按下Ctrl键+按键
if ((event->modifiers() == Qt::ControlModifier) && (event->key() == Qt::Key_A))
{
QMessageBox msgBox;
msgBox.setText("You have press the Ctrl+ A key.");
msgBox.exec();
}


// 是否按下Alt键+按键
if ((event->modifiers() == Qt::AltModifier) && (event->key() == Qt::Key_A))
{
QMessageBox msgBox;
msgBox.setText("You have press the Alt+ A key.");
msgBox.exec();
}




// 是否按下Ctrl键+鼠标Left键
if ((event->modifiers() == Qt::ControlModifier) && (QApplication::mouseButtons() == Qt::LeftButton))
{
QMessageBox msgBox;
msgBox.setText("You have press the Ctrl+ Left key.");
msgBox.exec();
}


}


void MyChildDlg::changeEvent(QEvent *e)
{
//QWidget::changeEvent(e);
//switch (e->type()) {
//case QEvent::LanguageChange:
// ui.retranslateUi(this);
// printf("changeEvent\n");
// break;
//default:
// break;
//}
}


void MyChildDlg::Refrush(int i)
{
if (i==1)
{

bool b = false;
b = translator.load("mykeyrespond_en.qm");
qApp->installTranslator(&translator);
ui.retranslateUi(this);
}
else
{
qApp->removeTranslator(&translator);
ui.retranslateUi(this);
}


}


//入口Main


#include "mykeyrespond.h"
#include <QtWidgets/QApplication>
//#include <QTextCodec>
//#include <QtGui>


int main(int argc, char *argv[])
{
QApplication a(argc, argv);


QTranslator qtTranslator;
qtTranslator.load("CN_zh.qm"); //加载语言包
a.installTranslator(&qtTranslator);


MyKeyRespond w;
w.setQTranslator(&qtTranslator);
w.show();
return a.exec();
}


原创粉丝点击