当前位置: 首页 > news >正文

QT QDialog::exec()调用时清除部件所有焦点

最近在做项目时,遇到一个问题:在统信UOS系统编写的QT程序,其中进入某些页面时,或者显示模态窗时,按钮都会有一个焦点框,这个是不允许的,于是乎,开始了清理焦点的旅途。

一、清理QDialog::exec()调用时的所有焦点

可以看到,“确定”按钮确实有个黑色的方框,这个就是焦点框,即当前窗口的焦点落到了“确定”按钮上。(注意,这个是自定义类继承自QDialog,自己实现的模态)

如果需要解决此问题,可以使用 事件过滤器 ,当监听到窗口部件有焦点时,取消之。

注意,此方法必须自定义类继承自QDialog,否则无法实现。

第一步:继承自QDialog

class MyDialog : public QDialog {}

第二步:重新实现 事件过滤器

bool eventFilter(QObject *obj, QEvent *event) override {// 省略一万行代码...
}

第三步:为部件安装事件过滤器

widget->installEventFilter(this);

代码实现:

#include <QDialog>
#include <QEvent>
#include <QWidget>
#include <QApplication>class MyDialog : public QDialog {Q_OBJECTpublic:MyDialog(QWidget *parent = nullptr) : QDialog(parent) {/// 为对话框中的所有子部件安装事件过滤器foreach (QWidget *widget, this->findChildren<QWidget*>()) {widget->installEventFilter(this);}}protected:// 重载事件过滤器bool eventFilter(QObject *obj, QEvent *event) override {/// 当部件获得焦点时,清除焦点if (event->type() == QEvent::FocusIn) {QWidget *widget = qobject_cast<QWidget*>(obj);if (widget) {widget->clearFocus();  // 清除焦点}}/// 继续处理其他事件return QDialog::eventFilter(obj, event);}
};// 主函数
int main(int argc, char *argv[]) {QApplication app(argc, argv);MyDialog dialog;dialog.exec();  // 执行对话框return app.exec();
}

到此,问题已解决!

二、清除所有部件及子部件的焦点

问题也是与第一点一致,按钮上有焦点时会显示一个黑色的焦点框。

解决代码:

// 清除部件即所有子部件的焦点
void clearFocusForAllChildren(QWidget *widget)
{if (nullptr == widget) {return;}// 获得当前部件的所有子部件QList<QWidget*> children = widget->findChildren<QWidget*>();for (QWidget* child : children) {if (child) {child->clearFocus();}clearFocusForAllChildren(child); // 递归调用}
}

完!

http://www.lryc.cn/news/473296.html

相关文章:

  • uni-app @click.stop @click.stop.native均不生效
  • 数据可视化工具深入学习:Seaborn 与 Plotly 的详细教程
  • camera和lidar外参标定
  • Redis慢查询分析优化
  • ETL处理全流程
  • 美畅物联丨掌握Wireshark:GB28181协议报文分析实战指南
  • 【python】OpenCV—WaterShed Algorithm
  • CSS flex布局- 最后一个元素占满剩余可用高度转载
  • Camp4-L1:XTuner 微调个人小助手认知
  • Qt:语言家视图
  • 【Paper Note】利用Boundary-aware Attention边界感知注意力机制增强部分伪造音频定位
  • 海外共享奶牛牧场投资源码-理财金融源码-基金源码-共享经济源码
  • iOS静态库(.a)及资源文件的生成与使用详解(OC版本)
  • Python自动化:关键词密度分析与搜索引擎优化
  • 苏州金龙新V系客车创新引领旅游出行未来
  • linux:DNS服务
  • 传奇架设好后创建不了行会,开区时点创建行会没反应的解决办法
  • 【小白学机器学习28】 统计学脉络+ 总体+ 随机抽样方法
  • 安全研究 | 不同编程语言中 IP 地址分类的不一致性
  • 小小的表盘还能玩出这么多花样?华为手表这次细节真的拉满
  • trueNas 24.10 docker配置文件daemon.json无法修改(重启被覆盖)解决方案
  • 数字孪生,概念、应用与未来展望
  • Chromium HTML Input 类型Text 对应c++
  • SpringMvc参数传递
  • 西安国际数字影像产业园:数字化建设赋能产业升级与拓展
  • linux线程池
  • PyTorch图像分类实战——基于ResNet18的RAF-DB情感识别(附完整代码和结果图)
  • 【OccNeRF: Advancing 3D Occupancy Prediction in LiDAR-Free Environments】阅读笔记
  • DDRPHY数字IC后端设计实现系列专题之后端设计导入,IO Ring设计
  • EDA --软件开发之路