Qt Gui 第七章
1、processEvents
该函数用来处理窗口的各种事件,重绘和event
for (int row = ; row < RowCount; ++row) {
for (int column = ; column < ColumnCount; ++column) {
QString str = formula(row, column);
if (!str.isEmpty())
out << quint16(row) << quint16(column) << str;
}
QThread::sleep();
qApp->processEvents(/*QEventLoop::ExcludeUserInputEvents*/);
}
如上,当执行到那个函数的时候,程序会去调用等待执行的窗口事件;但是如果此时咱们再点击保存等按钮的时候程序依旧会被相应,再次调用该函数,重复执行;所以我们添加该参数
QEventLoop::ExcludeUserInputEvents禁止用户的各种输入,包括按键和鼠标;
qApp是QApplication类型的全局变量;
#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))
2、QProgressDialog
Qt自带的进度条;
QProgressDialog progress(this);
progress.setLabelText(tr("Saving %1").arg(fileName));
progress.setRange(, RowCount);
progress.setModal(true);
for (int row = ; row < RowCount; ++row) {
progress.setValue(row);
qApp->processEvents();
if (progress.wasCanceled()) {
file.remove();
return false;
}
for (int column = ; column < ColumnCount; ++column) {
QString str = formula(row, column);
if (!str.isEmpty())
out << quint16(row) << quint16(column) << str; }
QThread::sleep();
}
3、事件过滤器
当不想子类化窗口部件,又要处理该窗口的事件的时候可以通过事件过滤器来执行;
textEdit = new QTextEdit;
textEdit->installEventFilter(this);
如上,将textEdit注册了事件过滤,则当textEdit收到消息的时候,会先到this这个窗口的
bool eventFilter(QObject *watched, QEvent *event);
中执行;如下示例所示:
bool MailClient::eventFilter(QObject *watched, QEvent *event)
{
if (watched == textEdit) {
if (event->type() == QEvent::KeyPress) {
QKeyEvent* keyevent = static_cast<QKeyEvent*>(event);
if (keyevent->key() == Qt::Key_Space) {
// do what you want
return true;
}
}
}
return QMainWindow::eventFilter(watched, event);
}
另外qApp也可以注册事件过滤器
qApp->installEventFilter(this);
则窗口所有的事件都会先经过this的eventFilter;可以用来调试等;也可以处理发送给失效窗口部件的鼠标事件;
Qt Gui 第七章的更多相关文章
- Qt Gui 第六章布局管理
1.QRadioButton之间如何互斥 其中一种方法是将各个QRadioButton控件放在同一个toolbarsLayout或者toolbarsGroupBox即可:如下所示 toolbarsGr ...
- Qt Gui 第五章绘图类
双缓冲 void Plotter::refreshPixmap() { pixmap = QPixmap(size()); pixmap.fill(, ); QPainter painter(& ...
- Qt Gui 第三章~第四章
一.图片资源的调用 如上图是我图片存放的位置跟qrc的命名: 如下则是qrc对应的编写格式: <RCC> <qresource> <file>images/icon ...
- 第七章 探秘Qt的核心机制-信号与槽
第七章 探秘Qt的核心机制-信号与槽 注:要想使用Qt的核心机制信号与槽,就必须在类的私有数据区声明Q_OBJECT宏,然后会有moc编译器负责读取这个宏进行代码转化,从而使Qt这个特有的机制得到使用 ...
- 保持Qt GUI响应的几种方法
最开始使用Qt时就遇到过QT Gui失去响应的问题,我是用多线程的方式解决的,然而通常来说,多线程是会降低程序的运行速度. 之后,在使用QSqlQuery::execBatch()函数时,Qt Gui ...
- 精通Web Analytics 2.0 (9) 第七章:失败更快:爆发测试与实验的能量
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第七章:失败更快:爆发测试与实验的能量 欢迎来到实验和测试这个棒极了的世界! 如果Web拥有一个超越所有其他渠道的巨大优势,它就 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (38) ------ 第七章 使用对象服务之动态创建连接字符串和从数据库读取模型
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第七章 使用对象服务 本章篇幅适中,对真实应用中的常见问题提供了切实可行的解决方案. ...
- 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7 标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...
- Java语言程序设计(基础篇) 第七章 一维数组
第七章 一维数组 7.2 数组的基础知识 1.一旦数组被创建,它的大小是固定的.使用一个数组引用变量,通过下标来访问数组中的元素. 2.数组是用来存储数据的集合,但是,通常我们会发现把数组看作一个存储 ...
随机推荐
- mysql 8.0.12版本 忘记密码
1.mysqld --console --skip-grant-tables --shared-memory 2.另一个控制台 mysq 3.use mysql; 4.select user,host ...
- [Linux-CentOS7]yum清华源CentOS7
shell直接运行 cat > 01.yumrepo.sh << 'EOF' # 创建备份路径 mkdir -p /etc/yum.repos.d/repo.bak/ # 备份源 m ...
- Apache安装使用笔记
下载 打开网页http://httpd.apache.org/,点击 在download页面点击 然后在新页面选择 在新窗口选择 选择32位或64位apache下载,此处下载64位的apache: h ...
- node准备
=== 原生的api === express express 中间件相关的. https://juejin.im/post/5aa345116fb9a028e52d7217 推荐几篇入门的优质博客: ...
- 处理jquery 中 给disabled属性不传值的问题
问题:审核页面加入不可编辑的判断后,点击[审核]按钮,报错,form表单的数据没有传递过去. 下面是js中加入的代码,用来判断是否是审核页面的,去掉此代码,点击[审核]按钮能正常传递数据,加入的话,无 ...
- 少量代码设计一个登录界面 - .NET CORE(C#) WPF开发
微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 少量代码设计一个登录界面 - .NET CORE(C#) WPF开发 阅读导航 本文背景 代码 ...
- JavaScript 基础学习(一)JavaScript 简介
定义 JavaScript是基于对象和事件驱动的语言,应用与客户端.其中: 基于对象:提供好了很多对象,可以直接拿过来使用 事件驱动:html做网站静态效果,javascript动态效果(网页能根据客 ...
- mysql简单备份与恢复
1.备份 mysqldump -u root -h 127.0.0.1 -p --set-gtid-purged=OFF abc > /data/mysqlBak/abc_20200206.s ...
- 原创:mysql5 还原至mysql 8.0.11数据库链接配置提示错误(修改内容有三处
原创:mysql5 还原至mysql 8.0.11数据库链接配置提示错误改有三: a) mysql 连接jar包版修改 b)类路径修改 c)配置连接池地址修改 因版本升级,首先要修改 1:mysql- ...
- python打包生成可执行文件教程
python打包生成可执行文件教程 安装环境: 1.打开命令行窗口,输入命令:pip install pyinstaller ,等待下载结束.示例: 2.下载结束后,测试是否成功安装,输入命令:pyi ...