- brief: url解码 - retVal: 返回url解码的数据toPercentEncoding(const QByteArray &exclude = QByteArray(),const QByteArray &include = QByteArray(),char percent = '%') const -> QByteArray
- brief: url编码,对象的值没有更新 - retVal: 返回url编码的数据QEventLoop exec(enum);
QEventLoop loop;//定义一个事件循环 QTimer::singleShot(2000, &loop, SLOT(quit()));//创建单次定时器,槽函数为事件循环的退出函数 loop.exec();//事件循环开始执行,程序会卡在这里,直到定时时间到,本循环被退出QFile QFileInfo 快速入门
-
常用接口
#brief:
// 构造
QFileInfo fi = QString("TQFile.cpp");
// 获取绝对路径`相对工作目录`
QString absoluteFilePath() // 绝对路径 + /TQFile.cpp
;
//判断这个路径对应的文件是否存在,true表示存在,false表示不存在
bool exists();
//根据路径获取到文件的大小,返回值是int64类型,单位为Byte
qint64 size();
//获取到文件的路径,QFile与之对应的操作
QString path();
//获取到包含文件名称的路径
QString filePath();
//获取文件名称
QString fileName();
//是否是文件
bool isFile();
//是否是路径。
bool isDir();
//是否是符号链接。
bool isSymLink();
//获取符号链接文件
QString symLinkTarget();
QString qpath= "/usr/test.xxx.yyy";
QFileInfo fileInfo(qpath);
//获取文件的不包含文件名的路径,返回值为 “/usr”
fileInfo.path();
//获取到文件的名称,返回值为 “test.xxx.yyy”
fileInfo.fileName();
//返回 test,不含后缀
fileInfo.baseName();
//返回 "test.xxx"
fileInfo.completeBaseName();
//返回 "yyy"
fileInfo.suffix();
//返回 "xxx.yyy"
fileInfo.completeSuffix();
QFile aFile(aFileName);
if (!aFile.exists()) //文件不存在
return false;
if (!aFile.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
ui->textEditDevice->setPlainText(aFile.readAll());
aFile.close();
ui->tabWidget->setCurrentIndex(0);
return true;
QDir
QDir快速入门
// 获取项目路径 QCoreApplication::applicationDirPath();
// 清空路径中 "\" ,转换为 "/" cleanPath(const QString&) -> QString `路径转换为 \ -> /` // 待测试 toNativeSeparators -> QString `路径转换为 / -> \` QDir dir; if(dir.mkpath(path))//创建多级目录,如果已存在则会返回去true QDir dir; if(dir.mkdir(path))//创建文件夹 //可用QFileInfo QDir的exsit(),IsDir等判断路径情况QFont
-
example
double fontRate = 1.0f; int font_labelList = 16.0f*fontRate, font_btnList = 16.0f*fontRate; bool isBold_labelList = true, isBold_btnList = true; #ifdef Def_ScreenPixel_19201080 CScreenRate::Instance()->execute(fontlabel_CHTableTitle); CScreenRate::Instance()->execute(fontbtn_CHTableConfirm); #endif QFont font; font.setFamily(CControlsBase::fontFamily()); font.setPixelSize(fontlabel_CHTableTitle); font.setBold(isBoldlabel_CHTableTitle); ui->label_CHTableTitle->setFont(font); // 对齐方式 ui->label_CHTableTitle->setAlignment(Qt::AlignCenter);快速入门
// 加粗字体 setBold() // 设置字体像素大小 setPixelSize() // 设置字体大小 setPointSize()文本对齐方式
ui->doubleSpinBox->setSingleStep(0.01); // 步长 ui->doubleSpinBox->setAlignment(Qt::AlignRight);//文字右对齐 Qt::Alignment 类型有以下取值。 1)Qt::AlignLeft::水平方向靠左。 2)Qt::AlignRight:水平方向靠右。 3)Qt::AlignHCenter:水平方向居中。 4)Qt::AlignJustify:水平方向调整间距两端对齐。 5)Qt::AlignTop:垂直方向靠上。 6)Qt::AlignButton:垂直方向靠下。 7)Qt::AlignVCenter:垂直方向居中。 8)Qt::AlignCenter:等价于 Qt::AlignHCenter | Qt::AlignVCenter。QFontMetrics 快速入门
// 构造
fm(QFont("text",20))
// 获取文字像素大小
horizontalAdvance("texttext");// 宽
height();// 高
QList的介绍
常用介绍
// 初始化 QListQJsonstringList=QList ()<<"1"<<"2"<<"3";
-
json解析
void TQJson::on_json_parse()
{
#if 1
// QApplication::applicationDirPath();
QString jstr;
QStringList jobjList;
QJsonParseError jerror;
QJsonDocument jdoc = QJsonDocument::fromJson(jstr.toUtf8(),&jerror);
QJsonObject jobj,jarrObj;
QJsonArray jarr;
if(QJsonParseError::NoError != jerror.error){
return;
}
jobj = jdoc.object();
jobjList = jobj.keys();
foreach(QString key,jobjList){
if(jobj[key].isString()){
qDebug() << "key:" << key
<< "value:" << jobj[key].toString();
}else if(jobj[key].isArray()){
jarr = jobj[key].toArray();
for (auto i=0;i
-
json生成
void TQJson::on_json_encrypt()
{
#if 1
QJsonDocument jdoc;
QJsonObject jobj;
QJsonArray jarr;
QString jstr;
for (auto i = 0;i<5; i++) {
jobj["dataKey"] = "dataValue";
jarr.append(jobj);
}
jobj["arr"] = jarr;
jobj["dataKey"] = "dataValue";
jdoc.setObject(jobj);
jstr = jdoc.toJson(QJsonDocument::Indented);
qDebug() << jstr;
#endif
}
QMap 介绍
QMap快速入门-知乎
QMessageBox的介绍
警告盒子
@example:
QMessageBox box;
#if 1
//设置文本框的大小
box.setStyleSheet(R"(
QLabel {
min-width: 100;
min-height:50;
font:22px;
}
QPushButton {
background-color:#89AFDE;
border-style: outset;
border-width: 2px;
border-radius: 5px;
border-color: beige;
font: bold 24px;
min-width: 80;
min-height: 35;
}
)"
);
#endif
box.setText(QString("请先登陆"));
box.setWindowTitle(QString("警告"));
box.setIcon(QMessageBox::Icon::Warning );
box.setButtonText(QMessageBox::Ok , QString("确定"));
box.exec();
QNetwork
-
debug
//查看支持的协议
qDebug()<< Str(支持的协议:)<< manager.supportedSchemes();
//安装了openssl,会有https
//("ftp", "file", "qrc", "http", "data")
@example2:
void CHttp::on_https_debug()
{
//默认链接的ssl库版本
qDebug()<< Str(默认链接的ssl库版本:)<< QSslSocket::sslLibraryBuildVersionString();
//ssl错误
connect(&manager,&QNetworkAccessManager::sslErrors,
this,[=](QNetworkReply *reply,const QList &erros){
qDebug()<< Str(erros:)<< erros;
});
}
@example2:
void CHttp::on_replyFinished_debug(QNetworkReply *reply)
{
// log system
QString debugStr_func
, *pdebugStr = nullptr;
pdebugStr = (pdebugStr ? pdebugStr:&debugStr_func);
AddDebugNStr(*pdebugStr,func , Str(CHttp::on_replyFinished_debug()));
//请求方式
AddDebugNStr(*pdebugStr,operation-enum:, (int)reply->operation());
//状态码
AddDebugNStr(*pdebugStr,status code, reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt());
AddDebugNStr(*pdebugStr,url, QVariant(reply->url()).toString().toStdString().c_str());
AddDebugNStr(*pdebugStr,, Str(raw header:));
for(auto aoByteArr:reply->rawHeaderList()){
AddDebugNStr(*pdebugStr,rawHeaderList, QVariant(aoByteArr).toString());
}
//1、获取响应状态码
QVariant variant = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
if (variant.isValid())
{
AddDebugNStr(*pdebugStr,响应状态码, variant.toString());
}
//2、获取响应头
variant = reply->header(QNetworkRequest::ContentTypeHeader);
if (variant.isValid()){
AddDebugNStr(*pdebugStr,响应头, variant.toString());
}
//3、获取响应信息
QByteArray bytes = reply->readAll();
AddDebugNStr(*pdebugStr,响应信息, QVariant(bytes).toString());
qDebug() << pdebugStr->toStdString().c_str();
}
-
example reply
QNetworkRequest request;
//同步处理,可以开启一个局部的事件循环,等待响应,不会阻塞线程
QNetworkReply *reply=manager.get(request);
QEventLoop eventLoop;
connect(reply, &QNetworkReply ::finished, &eventLoop, &QEventLoop::quit);
eventLoop.exec();
//处理reply信息
replyFinished(reply);
-
example
void CHttp::on_request_example()
{
QUrl url("http://httpbin.org/get");
//拼接:url添加参数
QUrlQuery query;
query.addQueryItem("ie","utf-8");
url.setQuery(query);
qDebug()<isRunning()){
QTimer *timer=new QTimer(reply);//对象树关联释放,也可以在finish进行释放
timer->setSingleShot(true);
//超时就结束,abort后状态码为0,错误信息为"Operation canceled"
connect(timer,&QTimer::timeout,reply,&QNetworkReply::abort);
//结束就关定时器
connect(reply,&QNetworkReply::finished,timer,&QTimer::stop);
//定时
timer->start(5000);
}
#elif 1
#endif
}
-
get
void CHttp::get(QString url)
{
//构建请求对象
QNetworkRequest request;
request.setUrl(url);
request.setRawHeader("Content-Type","application/json");
qDebug() << request.url()
<< url;
//发送请求,异步请https://www.baidu.com/求
QNetworkReply *pReply = manager.get(request);
}
-
post
//构建请求对象
QNetworkAccessManager manager;
QNetworkRequest request;
connect(&manager,&QNetworkAccessManager::finished,this,&CHttp::replyFinished);
request.setUrl(url);
request.setRawHeader("Content-Type","application/json");
//发送请求,异步请求
QNetworkReply *pReply = manager.post(request, body.toLatin1());
-
postFile
void CHttp::postFile(QString url, QString filePath, int passTime)
{
//设置程序编码格式为utf-8
// QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
QUrl qurl(url);
QNetworkRequest request;
request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json;charset=utf-8");
//此处要注意上传的ContentType,json文本的话一般带这个参数即可,如果不是,请查阅其他资料,配置其他参数。
request.setUrl(url);
// 构造数据,我是直接从文件中读取,简化拼装数据过程
QFile lfile(filePath);
lfile.open(QFile::ReadOnly);
QByteArray dataArray = lfile.readAll();
lfile.close();
// 发送请求
QNetworkReply *pReply = manager.post(request, dataArray);
SetTimeOut(pReply);
}
-
postImage
if(QFile::exists(imagePath)){
qDebug() << "文件不存在" << imagePath;
return;
}
//设置程序编码格式为utf-8
// QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
//构造multiPart ,用来组装图片数据
QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType);
QHttpPart imagePart;
QFileInfo fi = imagePath;
//经测试,设置此content-type,并不是必须。我测试的为jpg文件,则是image/jpeg,其他的格式文件查找http状态码,或者查找HTTP content-type
imagePart.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("image/jpeg"));
//此ContentDispositionHeader参数极为重要,如果不对,则发送图片不成功,name可以随意起名字,但是filename则必须是你要上传的文件名。
imagePart.setHeader(QNetworkRequest::ContentDispositionHeader
, QString("form-data; name="%1"; filename="%2"").arg("f1").arg(fi.fileName()));
QFile *file = new QFile(imagePath);
file->open(QIODevice::ReadOnly);
//依照下面方式将图片文件的内容附着于multiPart上,
imagePart.setBodyDevice(file);
file->setParent(multiPart);
multiPart->append(imagePart);
//此处设置上传的url
QNetworkRequest request;
request.setUrl(url);
//发送post
QNetworkReply *pReply = manager.post(request, multiPart);
-
put
void CHttp::put(QString url, QString body)
{
//构建请求对象
QNetworkRequest request;
request.setUrl(url);
request.setRawHeader("Content-Type","application/json");
//发送请求,异步请求
QNetworkReply *pReply = manager.put(request, body.toLatin1());
}
-
setTimeOut
void CHttp::SetTimeOut(QNetworkReply *reply,int timeOut)
{
Q_ASSERT(reply);
if(timeOut <=0){qDebug() << "设置超时失败 ,timeOut:" <isRunning()){
QTimer *timer=new QTimer(reply);//对象树关联释放,也可以在finish进行释放
timer->setSingleShot(true);
//超时就结束,abort后状态码为0,错误信息为"Operation canceled"
connect(timer,&QTimer::timeout,reply,&QNetworkReply::abort);
//结束就关定时器
connect(reply,&QNetworkReply::finished,timer,&QTimer::stop);
//定时
timer->start(timeOut);
}
}
-
reply
void CHttp::replyFinished(QNetworkReply *reply)
{
if(reply->error()!=QNetworkReply::NoError){
//处理中的错误信息
qDebug()<<"reply error:"<errorString();
return;
}
// 访问有些网页会返回301/302状态码,需要重新请求重定向的地址。
#if 0
auto status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
if (status_code == 301 || status_code == 302){
// Or the target URL if it was a redirect:
QVariant redirectionTargetUrl =reply->attribute(QNetworkRequest::RedirectionTargetAttribute);
//qDebug() << "redirection Url is " << redirectionTargetUrl.toString();
QUrl url(redirectionTargetUrl.toString());
manager.get(QNetworkRequest(url));
}
#endif
//获取响应信息
const QByteArray reply_data=reply->readAll();
qDebug() << reply_data;
reply->deleteLater();
}
QObject
QObject快速入门
// QObject对象(或子类)的名称
objectName();
// QObject对象(或子类)的类型名称
metaObject()->className();
connect
@example
- // 旧版本
connect(m_pBtn,SIGNAL(sigClicked()),this,SLOT(onClicked()));
connect(m_pBtn,SIGNAL(sigClicked(bool)),this,SLOT(onClicked(bool)));
- // QT5.0后推出
connect(m_pBtn,&MyButton::sigClicked,this,&Widget::onClicked);
- // 有问题待验证
connect(m_pBtn,QOverload::of(&MyButton::sigClicked),this,&Widget::onClicked);
- // lambda 表达式法 `C++11特性`
connect(m_pBtn, QOverload::of(&MyButton::sigClicked),
[=](bool check){
});
connect(m_pBtn, static_cast(&MyButton::sigClicked), this, [=](bool check){
//do something
});
-
disconnect
// 身份证识别完成信号"反"绑定
disconnect(CIC::Instance(),&CIC::ICNumberSignals,this,&LoginWindow::ICNumberSlots);
-
信号与槽
qt中信号槽断开连接
在qt中使用信号槽时,有时会想中途断开信号槽的连接,接下来将呈现四种连接断开方法:
one:断开明确指定接受对象信号槽,如果连接断开成功返回true,否则返回false
bool QObject::disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
two:断开所有连接到对象的信号
disconnect(myObject, 0, 0, 0);
three:断开所有连接到特定信号
disconnect(myObject, SIGNAL(mySignal()), 0, 0);
four:断开特定接收器
disconnect(myObject, 0, myReceiver, 0);
QProcess的介绍
只运行一个进程
QSharedMemory mem("untitled");//以系统exe名称为参数,定义共享内存mem
if(!mem.create(1))//创建共享内存mem,如果该共享内存已存在,则弹出提示对话框,并退出
{
QMessageBox::information(0,QObject::tr("Warning"),QObject::tr("An instance is running"));
return 0;
}
进程开启和关闭
{// 开启进程
static QProcess newProg;
newProg.start(
R"(D:UserswydfiScanTest.exe)", // 绝对路径
QStringList()<<"command");
}
{// 关闭进程
QProcess taskkill;
taskkill.execute("taskkill"
, QStringList()
<<"-im"
<
QPushButton的介绍
常用api
//设置选中
setChecked(true);
QRect
setFixedSize(500,500); // 控件固定大小
QSharedMemory 共享内存
QSharedMemory快速入门
-
只运行一个软件
#example:
#include
#include
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// CommonHelper::setStyle(":/qss/white.qss");//默认一个主题风格
//QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
// QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
QSharedMemory mem("untitled");//以系统exe名称为参数,定义共享内存mem
if(!mem.create(1))//创建共享内存mem,如果该共享内存已存在,则弹出提示对话框,并退出
{
QMessageBox::information(0,QObject::tr("Warning"),QObject::tr("An instance is running"));
return 0;
}
MainWindow w;
w.show();
return a.exec();
}
QString介绍
快速入门
// 宽字符转QString
fromUtf16()
// 返回从索引开始的n个字符串
mid()
// 替换所有的指定字符串
replace()
// 去除所有的空白字符串
simplified()
// 切割字符串
split()
// 转换成整数
toint()
// 将小写字母转换成大写字母
toUpper()
// 去除开头结尾的空白字符
trimmed()
详细入门
-
number()
QString::number((long long)QThread::currentThreadId(),16)
arg()
@example:
- param:数值,2位,16进制,0补全
arg(1,2,16,QLatin1Char('0'))
QString("%1").arg(1,4,10,QLatin1Char('0'));
fromUtf16()
@example:
LPCWSTR title = L"MFCApplication_MyTool";
QString strQ = "";
strQ.fromUtf16(reinterpret_cast(title));
mid()
- brief:`返回一个字符串,该字符串包含该字符串的n个字符,从指定的位置索引开始。`
- params:int position, int n = -1
- retVal:`QString`
replace(QString("a") ,QString("b") ) -> QString
- brief:`返回QString,将"a"替换为"b",
- param1: 替换的字符串
- param2: 被替换的字符串
- retVal:`QString`
simplified()
- brief: 返回字符串开头和结尾除去空白的字符串,并且内部的空白字符也去掉,比如't','n','v','f','r'和' ';
split()
- brief: 切割字符串
- param1: 按照该字符串切割
- retVal:QStringList
toint()
- brief:`返回使用base base转换为int的字符串,该值默认为10,必须在2到36或0之间。如果转换失败,返回O。`
- param:`bool *ok=nullptr,
- param: int base=10` `按照10进制处理数据`
- retVal:`int`
例子"1a" 返回:1
QString dataStrQ = "1a";
int dataInt = dataStrQ.toint(nullptr,10)// dataInt = 1
, dataInt_16 = dataStrQ.toint(nullptr,16)// dataInt = 26
;
toUpper()
- brief:`将小写字母转换为大写字母`
- retVal:QString
trimmed() const
- brief 返回值为去除了开头和结尾的空白字符串,这里的空白指QChar::isSpace()返回值为true,比如't','n','v','f','r'和' ';
QTcp相关介绍
-
QTcpServer-博客链接
QTextCodec
QTextCodec::setCodecForLocale()
//设置程序编码格式为utf-8
// QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
编码问题
// 3、源文件中指定编码(比较麻烦)
// 每个源文件开始位置 添加 (头文件有中文,同源文件一样处理)
// 指定utf-8编码
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
-
未测试接口
// CommonHelper::setStyle(":/qss/white.qss");//默认一个主题风格
//QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
// QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
//QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GB2312"));
QThread 介绍
QThread快速入门
// 获取线程id
currentThreadId(); ->Static Func
// 声明变量类型
qRegisterMetaType("ST_PARAMINFO");
example 普通线程,可能不能给槽函数反应时间
class CThread:public QThread
{
Q_OBJECT
public:
CThread(){}
void SetThread(){this->start();}
protected:
virtual void run(){
while(1){
}
quit();
}
};
example QObject::moveToThread(QThread *)
@brief QObject::moveToThread(QThread *)的应用
解决"普通线程无法等待槽函数问题"
class IEventThread:public QObject
{
Q_OBJECT
public:
IEventThread(){
moveToThread(&_thread);
_thread.start();
}
virtual ~IEventThread(){
_thread.quit();
_thread.wait();
qDebug() << __FUNCTION__;
}
void connect(){
QObject::connect(this,SIGNAL(sigObject()),this,SLOT(slot()));
}
void emitsig(){
emit sigObject();
}
signals:
// 测试的信号
void sigObject();
public slots:
// 测试的槽函数
void slot(){
qDebug()<<"thread id :"<
QThread::currentThreadId() -> Qt::HANDLE
@brief: 返回线程id
QThread::euit()
@brief: 安全退出函数,正确使用才安全
QTime
@exmample:
//获取时间秒数
qint64 startSec = QDateTime::currentDateTime().toTime_t();
LogNStr(获取时间秒数,startSec);
QDateTime current_date_time = QDateTime::currentDateTime();
//获取当前时间
QString current_time = current_date_time.toString("hh:mm:ss.zzz");
LogNStr(获取当前时间,current_time);
//int QTime::msec () const
//Returns the millisecond part (0 to 999) of the time.
// LogNStr(获取当前时间,QTime::msec());
//获取时间毫秒值
//方法1
QTime t;
t.start();
int msec = t.msec();
LogNStr(获取当前时间毫秒值,msec);
//方法2
qint64 timestamp = QDateTime::currentDateTime().toMSecsSinceEpoch(); //毫秒级
LogNStr(获取总时间毫秒值,timestamp);
QTimer
-
QTimer-blog两种使用方法
QObject::moveToThread(QThread *)
@brief:QObject的成员函数,该函数的槽函数,由子线程调用
QThread::quit()
@brief: 安全退出函数,正确使用才安全
QVector
-
增删改(没查)
//删除元素
QVector> data;
1. 从vector中移除i对应的元素
data.erase(data.begin() + i);
2. 从vector中移除从 i开始的n个元素
data.remove(data.begin() + i, n);
3. 删除vector中最后一个元素
data.pop_back()
4. 删除vector中第一个元素
data.pop_front()
//插入元素
void insert(int i, const T &value) //将元素插入到i位置,i从0开始计算
void append(const T &value) //将元素插入到vector的末尾
void prepend(const T &value) //将元素插入到vector的开始
//改变元素的值
void replace(int i, const T &value) //改变i位置元素的值
QWidget的介绍
QWidget快速入门
// QObject对象(或子类)的名称
objectName();
// QObject对象(或子类)的类型名称
metaObject()->className();
// 事件循环函数`虚函数`
nativeEvent()
// 设置窗口置顶
setWindowFlags(Qt::WindowStaysOnTopHint);
setWindowTitle("文本浏览器");
//屏幕的大小:主窗口的this,
screen()->availableGeometry();
// 是否在继承中,
inherits(const char *):
窗口置顶
-
setWindowFlags()
@example
setWindowFlags(Qt::WindowStaysOnTopHint);
活跃窗口
QApplication::activeWindow();
窗口透明
事件循环
-
nativeEvent(const QByteArray &eventType, void *message, long *result) -bool
bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
MSG* msg = (MSG*)message;
switch(msg->message)
{
case WM_COPYDATA:
{
// 解析COPYDATASTRUCT
COPYDATASTRUCT *pCDS = reinterpret_cast(msg->lParam);
// const wchar_t* pWch = reinterpret_cast(pCDS->lpData);
// const unsigned long &wch_size = pCDS->cbData
// , dwData = pCDS->dwData;
// GetProcessId
DWORD dwPid = 0;
GetWindowThreadProcessId((HWND)msg->wParam,&dwPid);
QString text = QString("PID=[%1]的进程发来的消息为:%2").arg((int)dwPid)
.arg(QString::fromUtf16(reinterpret_cast(pCDS->lpData)));
qDebug() << text.toStdString().c_str();
}
break;
}
//其他交给qt处理
return false;
} 


