Qt Gui 第七章
1、processEvents
该函数用来处理窗口的各种事件,重绘和event
for (int row = 0; row < RowCount; ++row) { for (int column = 0; column < ColumnCount; ++column) { QString str = formula(row, column); if (!str.isEmpty()) out << quint16(row) << quint16(column) << str; } QThread::sleep(1); 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(0, RowCount); progress.setModal(true); for (int row = 0; row < RowCount; ++row) { progress.setValue(row); qApp->processEvents(); if (progress.wasCanceled()) { file.remove(); return false; } for (int column = 0; column < ColumnCount; ++column) { QString str = formula(row, column); if (!str.isEmpty()) out << quint16(row) << quint16(column) << str; } QThread::sleep(1); }
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基础
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!