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

网站广告位代码手机开发软件app的工具

网站广告位代码,手机开发软件app的工具,网站排名张家港,福建网站建设哪家专业问题背景 问题环境 操作系统: 银河麒麟V10SP1qt版本 : 5.12.12 碰见了一个问题应用最小化,然后激活程序窗口无法弹出 这里描述一下代码的逻辑,使用QLocalServer实现一个单例进程,具体的功能就是在已存在一个程序A进程时,再启动这个程序A,新的程序A进程会被杀死,然后激活已存…问题背景 问题环境 操作系统: 银河麒麟V10SP1qt版本 : 5.12.12 碰见了一个问题应用最小化,然后激活程序窗口无法弹出 这里描述一下代码的逻辑,使用QLocalServer实现一个单例进程,具体的功能就是在已存在一个程序A进程时,再启动这个程序A,新的程序A进程会被杀死,然后激活已存在的进程,使窗口弹出 跟踪代码发现走到了激活函数(如下所示) this-raise();this-activateWindow(); 问题现象如下,确实是有激活效果,图标闪烁了,但是窗口在最小化的情况不会弹 排查过程 首先,我想写个简易的demo来复现这个问题,但是下面所示的代码并不能复现出上面提到的问题,最小化窗口可以被激活弹出,所以我还是得用原来的代码进行排查 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ui-setupUi(this);//使用定时器触发执行槽函数QObject::connect(m_timer, QTimer::timeout, this,MainWindow::slottimer);}MainWindow::~MainWindow(){delete ui;}//3秒钟执行一次void MainWindow::on_pushButton_clicked(){m_timer.start(3000);}//激活窗口void MainWindow::slottimer(){this-raise();this-activateWindow();} 为了排除操作系统的影响,我选择用同一份代码在不同系统上测试一下,看看效果 这里我测试了kylin、ubuntu都有这种问题,说明大概率和操作系统无关,uos因为操作系统镜像不好下载我就没测 和系统没关系,执行的时候也走了对应的函数,那么现在只能跟踪qt代码看看为什么没有弹出了,跟踪后有如下发现 最后进入了QXcbWindow::requestActivateWindow()函数执行xcb_send_event(xcb_connection(), 0, xcbScreen()-root(),XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT,(const char *)event); 可以看到激活窗口实际是调用xcb模块的功能 xcb介绍,XCB是X协议的一个C语言绑定,它提供了一种更现代、更高效的方式来与X Window System进行交互。xcb官网 https://xcb.freedesktop.org/ 我分别在使用wayland和X协议的系统上进行测试,最后代码都走到了xcb_send_event方法 接下来我就开始尝试对xcb_send_event的传参进行修改,重点是修改第二和第四个传参,其实这一步修改就是瞎改,也没有什么修改逻辑,我做的尝试如下: 0 - 1XCB_EVENT_MASK_STRUCTURE_NOTIFY | XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT 在此基础上增加或者减少事件掩码 在修改测试过程中,发现偶尔能弹出来,但概率很低,然后我再把参数都恢复,发现也能偶尔弹出来,此刻我感觉和修改xcb_send_event参数没有什么关系了 再结合前面我自己写的demo可以正常弹出的情况,我觉得代码中使用QLocalServer实现单例进程并且杀死新进程的方法可能会造成激活窗口操作失效(纯猜测,但改变了我的解决思路) 所以还是要从应用调用代码的角度去解决 解决方案 如上所述,激活窗口一次没有没有生效,是不是多执行几次激活是不是就可以了? 所以我修改激活窗口的方式,在原先激活窗口的位置开启定时器(定时器触发时间间隔500Ms~2s即可),在槽函数中执行激活窗口操作,当窗口激活成功就停止定时器 在测试中发现,定时器第一次触发激活窗口的现象只是任务栏的图标闪烁,但窗口不弹出,而在第二次触发时窗口从任务栏中弹出,一般情况下第二次触发就能弹出了 后记 为什么第一次触发激活窗口没有成功?目前还没有找到根源,我猜测可能是因为起第二进程再杀死导致了一些时序错误或者影响了堆栈,后续还要验证 如果单纯从解决窗口不弹出的角度来说还有一个方法就是调用命令wmctrl,但也可能存在失效的问题 QProcess myProcess;QString program wmctrl;QStringList arguments;arguments -a w-windowTitle();myProcess.start(program,arguments);myProcess.waitForFinished();
http://www.hkea.cn/news/14396691/

相关文章:

  • 建网站合同王磊网络网站建设
  • 新城镇建设官方网站英文网站 正文字体大小
  • 营销型网站费用网上有做logo的网站吗
  • 贵州省住房和建设厅网网站成都洛可可设计有限公司
  • 网站主机和空间wordpress single 主题
  • 腾讯风铃网站建设最专业的营销网站建设价格
  • 汕头网站设计哪家好北京++网站建设咨询顾问公司
  • 合肥建设网站的公司开发网站流程
  • 有什么专业做蛋糕的网站吗wordpress实例网址
  • 招聘网站简历数据分析怎么做台州网红打卡地
  • 叶涛网站推广优化wordpress 卸载plugin
  • seoxseo优化服务公司
  • c#做交易网站杭州建设局网站首页
  • 网站收录查询临沂seo上海网站设计kinglink
  • wordpress 网站建设中做电子元器件的网站
  • 建筑网站夜里几点维护湖南建设职称报考在哪个网站
  • 做网站一天赚多少钱python基础代码
  • 网站建设授权书洛阳建站推广公司
  • dede 添加演示网站网站续费服务商
  • 网上做网站赚钱劳务派遣好还是外包好
  • 猪八戒网站做推广怎么样建立的英语
  • 圣矢网络重庆网站建设优化推广公司车险网站模版
  • 湛江企业建站系统大航母网站建设案例
  • 周口市规划建设局网站2022最新的旅游资讯
  • wordpress自动取分类做菜单外贸网站建设和优化
  • 辽阳网站开发网站建设策划书格式
  • 南宁做网站哪家公司好广州外发加工网
  • 深圳牌申请网站空间搞钱最快的路子
  • html网站首页wordpress 调用菜单
  • 制作网站首页psd品牌宣传推广文案