QT学习之阻拦退出程序函数以及事件过滤器的使用,以及文件的操作。
2017-10-21 09:04
1116 查看
http://blog.csdn.net/qq_28174951/article/details/78302690
注意: QTextstream out(&file)的作用是创建一个QTextstream 流对象,并且用取址的方式将
输入流与文件进行绑定。
1.功能描述:界面上有两个按钮,当按下按钮A时,就显示提示窗口,我是按钮a,当按下按钮b时,就显示我是按钮b
这样完成a事件和b事件的一个过滤过程,我们还可以改变QEvent也就是事件的类型,对事件实现进一步的过 滤。
2、定制某个控件的事件处理:
(1)确定需要对哪些控件的哪些事件, 通常的 close以及 key 和 keyboard 事件;
(2)重写该对象的 event() 函数;
3、事件过滤流程:
(1)确定自己需要过滤处理哪些对象的那些事件;
(2)构造自己的事件过滤类: 重写该类的 eventFilter 函数;
(3)在主程序中实例化一个过滤类对象;
(4)调用该过滤类对象的 installEventFilter( receiver, QEvent *event),
以在目标对象上安装该过滤器。
在 Qt 中, event 被建模成派生自abstract QEvent 类的对象, 用来表示在应用程序中发生的事件,或是应用程序需要处理的外部活动产生的事件.
Events 可以被任一 QObject 派生的子类实例对象接收和处理, 但他们是关联到特定控件的. 本文档描述 event 在典型应用程序中是如何发送及处理的.
什么叫做重写??什么叫做重载??
函数重载的条件是什么?函数重写的条件是什么??
重载(overload):是函数名相同,参数列表不同,重载只是在类的内部存在。但是不能靠返回类型来判断。
重写(override):叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实例不同,主要在继承关系中实现。
重写需要注意:
1.被重写的函数不能是static的。必须是virtual的。
2.重写函数必须有相同的类型。
3.重写函数的访问修饰符可以不同。尽管virtual 是private的,,派生类中可以重写为public,protected也可以的。
重定义:
子类重新定义父类中有相同名称的非虚函数(参数列表可以不同)
如果一个类。存在和父类相同的方法,除非你在调用的时候,强制转化为父类类型,否则试图对子类和父类做类似重载的调用是不能成功的。
中是通过closeEvent函数来实现的;
我们直言将
Qt中的文件操作部分:
#include <QtCore/QCoreApplication> #include <QFile> #include <QtDebug> #include <QTextStream> #include <iostream> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QFile file("./test.txt"); //---参数:QFile::Truncate表示的是 将原文件内容清空, //--以WriteOnly方式打开文件,如果在工程文件下没有该txt文件,那么程序将创建该文件,若存在,则将原文件内容清空, if (file.open(QFile::WriteOnly | QFile :: Truncate)) { //---创建 QTextStream流操作对象, 使与QFile对象file绑定。 QTextStream out(&file); //----设置输出格式为: 居中,这里格式还可以设置为:right/left。 占10个字符; out << "socre:" << qSetFieldWidth(10) <<center<< 9023234134<<right<<"12412341234123412343"<<endl; //-----输出提示信息 qDebug() << "\1 writing data succesful \1" << endl; } else { qDebug() << "open file failed"; } file.close(); //---关闭文件~~~~~~ QFile file_in("test.txt"); if(!file_in.open(QIODevice::ReadOnly)) { std::cerr<<"can not open test.txt:"<<file.errorString().toStdString()<<endl; } QTextStream in(&file_in); QString str1; str1 = in.readAll(); qDebug()<<str1<<endl; return a.exec(); }
注意: QTextstream out(&file)的作用是创建一个QTextstream 流对象,并且用取址的方式将
输入流与文件进行绑定。
时间过滤器,可以区分事件,可以区分动作
具体的案例:1.功能描述:界面上有两个按钮,当按下按钮A时,就显示提示窗口,我是按钮a,当按下按钮b时,就显示我是按钮b
这样完成a事件和b事件的一个过滤过程,我们还可以改变QEvent也就是事件的类型,对事件实现进一步的过 滤。
2、定制某个控件的事件处理:
(1)确定需要对哪些控件的哪些事件, 通常的 close以及 key 和 keyboard 事件;
(2)重写该对象的 event() 函数;
3、事件过滤流程:
(1)确定自己需要过滤处理哪些对象的那些事件;
(2)构造自己的事件过滤类: 重写该类的 eventFilter 函数;
(3)在主程序中实例化一个过滤类对象;
(4)调用该过滤类对象的 installEventFilter( receiver, QEvent *event),
以在目标对象上安装该过滤器。
在 Qt 中, event 被建模成派生自abstract QEvent 类的对象, 用来表示在应用程序中发生的事件,或是应用程序需要处理的外部活动产生的事件.
Events 可以被任一 QObject 派生的子类实例对象接收和处理, 但他们是关联到特定控件的. 本文档描述 event 在典型应用程序中是如何发送及处理的.
什么叫做重写??什么叫做重载??
函数重载的条件是什么?函数重写的条件是什么??
重载(overload):是函数名相同,参数列表不同,重载只是在类的内部存在。但是不能靠返回类型来判断。
重写(override):叫做覆盖。子类重新定义父类中有相同名称和参数的虚函数。函数特征相同。但是具体实例不同,主要在继承关系中实现。
重写需要注意:
1.被重写的函数不能是static的。必须是virtual的。
2.重写函数必须有相同的类型。
3.重写函数的访问修饰符可以不同。尽管virtual 是private的,,派生类中可以重写为public,protected也可以的。
重定义:
子类重新定义父类中有相同名称的非虚函数(参数列表可以不同)
如果一个类。存在和父类相同的方法,除非你在调用的时候,强制转化为父类类型,否则试图对子类和父类做类似重载的调用是不能成功的。
#include "widget.h" #include "ui_widget.h" #include <QMessageBox> Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); //为按钮控件(button_a,button_b)注册事件 //使用的是installEventFilter(this);函数 ui->button_a->installEventFilter(this); ui->button_b->installEventFilter(this); } Widget::~Widget() { delete ui; } bool Widget::eventFilter(QObject *target,QEvent *event) { if(target == ui->button_a) { if(event->type() == QEvent::MouseButtonDblClick) QMessageBox::about(this,"note!!!","I am ButtonA"); } if(target ==ui->button_b) { if(event->type() == QEvent::MouseButtonDblClick) QMessageBox::about(this,"note!!!","i am ButtonB"); } //最后一句返回出eventFiler函数 return QWidget::eventFilter(target,event); }
退出处理事件
QcloseEvent();
当我们关闭一个程序时,会弹出一个是否确定关闭程序的一个选框,在Qt中是通过closeEvent函数来实现的;
我们直言将
void Widget::closeEvent(QCloseEvent *event) { int ret = QMessageBox::warning(0,tr("QWidget"),tr("are you sure to quit!!!"),QMessageBox::Yes |QMessageBox::No); if(ret == QMessageBox::Yes) { //说accept表示该事件不再继续往上传递 //ignore表示尝试把该事件往上传递 event->accept(); } else { event->ignore(); } }
相关文章推荐
- 一个非常非常非常基础的程序,写的不好,但是一般的文件读写操作及字符处理函数都涉及到了..新手学习用的
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)
- QT中QJson库的使用以及json文件的操作
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)
- 在Windows上使用终端模拟程序连接操作Linux以及上传下载文件
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)
- Qt 的线程与事件循环——可打印threadid进行观察槽函数到底是在哪个线程里执行,学习moveToThread的使用)
- (转载)Qt 的线程与事件循环——可打印threadid进行观察槽函数到底是在哪个线程里执行,学习moveToThread的使用)
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)
- QT中QJson库的使用以及json文件的操作
- 一个WinForm记事本程序(包含主/下拉/弹出菜单/打开文件/保存文件/打印/页面设置/字体/颜色对话框/剪切版操作等等控件用法以及记事本菜单事件/按键事件的具体代码)
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- Windows API 函数学习(7)---文件操作示例
- 操作 Wave 文件(11): 使用 waveIn...函数录制 wav 文件
- MATLAB 支持的文件格式 以及简单的操作函数
- Windows API 函数学习(6)---文件操作
- 使用Windows的SHFileOperation外壳函数实现文件操作
- 封装的文件操作函数接口(目前使用在WINCE上)
- PostQuitMessage(0)要慎用,经常会造成MFC程序退出时内存泄露,还是尽量使用MFC基类的退出函数比较好。
- c#写的五子棋程序,供学习WinForms的鼠标事件和使用GDI+