QuickPanel开发总结(附源码)


最近突然觉得桌面图表过多特别心烦,所以就上网找了找快速启动的软件,最后是找到一个叫音速启动的软件,开始用着还行,但是发现用火狐浏览器时,鼠标中键是关闭标签,而鼠标中键也是音速启动显示面板的快捷键,所以就会冲突,其实这也没什么,无非就是进设置里把快捷键关了呗,但是当我点音速启动的“设置“选项时,竟然没有反映,是的,没有反应(事后有人跟我说在他的电脑上不会出现这种情况,我也没再次验证),于是乎就萌发了自己写一个快捷方式面板的软件(QuickPanel)

现在,程序已经算是开发完了(已经在用,时不时的添加些小功能),美工是本人,且本人是菜鸟,所以功能实现了以后也就没有纠结于界面。

在这里总结一下开发过程中遇到的问题。

首先,虽说用的是Qt但是还是使用了windows api所以跨平台什么的就灰飞烟灭了。

    1.一开始是打算只弄快捷方式,后来想想,还是弄个所有文件以默认方式打开为好,所以就用到了shellexecute这个api

        使用windows api要包含头文件#include <Windows.h>  #include <shellapi.h>并且#pragma comment(lib,"shell32.lib")来链接库,其实这一个函数就是整个程序的核心功能实现了

    2.程序使用QList来存储栏目标签和每个栏目里的图标的,但是如果QList<myButton> buttonList这种调用的话,是不行的,会报错如下图,以为没有重载复制函数,所以我的解决方式是QList<myButton*> buttonList使用指针的List。 

    3.关于信号与槽的连接问题,之前一直以为只要connect就好了,从未考虑过disconnect的问题,以至于一直想不通为什么会点一次快捷方式弹出n多窗口,这次终于明白connect几次就会有几次槽响应,所以一定要记得disconnect后再connect

    4.还有一个小技巧就是防止双击事件影响单击事件的代码其实很容易,只要一个定时器

timer=newQTimer(this);

timer->setSingleShot(true);
connect(timer,SIGNAL(timeout()),this,SLOT(isSingleClick()));

 

voidWidget::iconActived(QSystemTrayIcon::ActivationReasonr)

{
switch(r){
caseQSystemTrayIcon::Trigger:
       timer->start(qApp->doubleClickInterval());
       trayCurPos=cursor().pos();
        break;
caseQSystemTrayIcon::DoubleClick:
       timer->stop();
        your code to do

                break;

 

voidWidget::isSingleClick()

{
       initTrayIconMenu();
       if(menu->isHidden())
          menu->exec(trayCurPos);
       else
          menu->hide();
}
    5.再有就是再编译是总有莫名奇妙的错误,其实有可能是修改了资源文件或者其他文件忘记保存,或者保存但是qrc还没编译,
所以遇到此类不明所以的问题可以先试试qmake一下,看看还有没有错误,也许揪心的错误就这么解决了
    6.要记得,以管理员权限运行的程序是无法拖拽进图标的
    7.其实一开始模仿qq的自动停靠隐藏还是费了不小的力气的,但是现在看起来很简单,
也就是判断坐标然后一点点的移动(弹出或者缩进去隐藏),代码很容易懂。就不多说了。
    8.到现在也没弄懂如何获取lnk文件的参数(使用Qt),希望以后能解决。

自己做的东西肯定不及网上已有的软件好,但是已经能满足我自己日常的使用了,而且也没有乱七八糟的东西影响,自己写的还是很纯净的程序。
最后附上源码及exe(点击打开链接),源码比较烂,注释不太多,还希望与大家交流一下,很期待有人批评指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值