【Qt 学习之路】Qt让桌面图标跑起来

24 篇文章 1 订阅
21 篇文章 0 订阅

目录

先看一下效果图

这里写图片描述

#实现要关注以下几点

  • WindowsAPI——如何获取桌面图标个数
  • WindowsAPI——如何获取桌面分辨率
  • WindowsAPI——如何设置每个图标的位置
  • WindowsAPI——如何更新所有图标的信息
  • Qt——定时器如何使用
  • Qt——容器如何使用
  • 算法——如何控制图标跑起来

WindowsAPI——如何获取桌面图标个数

注意:这里要引用的文件有:

#include "Windows.h"
#include "CommCtrl.h" // ListView_GetItemCount
#pragma comment(lib, "User32.lib")

代码如下:

    HWND m_hDestTop;
    m_hDestTop = ::FindWindow(L"progman", NULL);
    m_hDestTop = ::FindWindowEx(m_hDestTop, 0, L"shelldll_defview", NULL);
    m_hDestTop = ::FindWindowEx(m_hDestTop, 0, L"syslistview32", NULL);
    int Nm=(int)::SendMessage( m_hDestTop, LVM_GETITEMCOUNT, 0, 0);
    return Nm;

WindowsAPI——如何获取桌面分辨率*

代码如下:

    int width = GetSystemMetrics ( SM_CXSCREEN );
    int height= GetSystemMetrics ( SM_CYSCREEN );

WindowsAPI——如何设置每个图标的位置

::SendMessage( m_hDestTop,   LVM_SETITEMPOSITION, index,   MAKELPARAM( x, y ));

WindowsAPI——如何更新所有图标的信息

    ListView_RedrawItems(m_hDestTop, 0, LVM_GETITEMCOUNT- 1);
    ::UpdateWindow(m_hDestTop);

Qt——定时器如何使用

先引用头文件

#include <QTimer>

如何使用定时器:

    QTimer *m_timer = Q_NULLPTR;
    m_timer = new QTimer(this);
    
    //在槽里面控制移动
    connect(m_timer, &QTimer::timeout, this, &MainWindow::onDoRunning);


	//控制定时器的开关,注意start里面是指定定时器的时间间隔
    if(m_timer->isActive()) { 
        m_timer->stop();
    } else {
        m_timer->start(100);
    }

Qt——容器如何使用

如何使用List容器:

    QList <QPoint> m_list;
    
    //用QList来装每个图标的点信息        
    m_list << QPoint(x, y);
    
	//打印容器内某个图标的点信息
    qDebug() << m_list.at(i);

	//删除最后一个图标点信息
    m_list.removeLast();

	//插入一个坐标到第一个点
    m_list.insert(0, QPoint(x, y));
C++——如何控制坐标到指定位置转弯

算法——如何控制图标跑起来

1、初始化各个图标位置
2、让各个图标按照我们想要的顺序排列
3、把各个图标位置装到QList容器中
4、调用WinAPI把图标移动到指定位置
5、每次跑动时,删除QList最后一项,然后在QList首项前插入我们算好的预跑坐标
6、按照QList中的数据更新所有图标位置。

#仍然存在的问题
系统不会按照预期的图标位置移动图标。比如说:(10,10),系统并不会移动图标到这个位置,而是移动图标到最近的网格布局的位置中。

~~ 如有更好的办法,欢迎提出来,大家一起讨论 ~~


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沙振宇

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值