Qt C++编程实现Windows和Ubuntu桌面背景/壁纸的设置

摘要:本人对桌面背景的要求相对较高,而且希望能每天更换,但又觉得常规步骤太过麻烦(从网上找图片->下载至本地->打开本地路径->右键设为壁纸),所以想要写一个程序自动实现其全部过程。(从网上爬取图片的实现在其他文章另有介绍)(文末附完整源代码的链接)
为了能够通过程序实现后半部分功能,即设置本地目录下的图片为壁纸,特此查找到了windows系统下的相关API函数。另外由于本人还常使用Ubuntu系统,于是就将程序跨平台地扩展至了该系统,大体上的实现方法就是调用了一个SHELL文件。两系统的具体实现详见下文。

本人亲测平台: Win10,Ubuntu16.04LTS
运行环境:Qt5.7.0

Windows

调用API函数:SystemParametersInfo。该函数含有4个参数,只需更改第1项和第3项参数,分别为桌面壁纸标志SPI_SETDESKWALLPAPER和壁纸的本地存储路径filename。

#include 

void WallPaper::setWallPaper(QString filePath)
{
 const char *tmp = filePath.toStdString().c_str(); 
 std::wstringstream wss;
 wss << tmp;
 const wchar_t *filename = wss.str().c_str();
 if( !SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, (void*)filename, SPIF_UPDATEINIFILE) )//调用windows的API函数
 qDebug("设置桌面背景失败!");
}

注:本人测试win10可调用此函数实现其功能。但win7会将桌面背景变成纯黑色。若读者发现有win7的解决方法,望指点。

Ubuntu

鉴于Ubuntu的相关API函数使用难度较大,需要安装一些库,过程太过繁琐。这里介绍一种比较简单的实现方法,即Qt的C++与SHELL结合使用来实现此功能:

  1. 在本project的目录下,单独存了一个SHELL文件。该SHELL中主要包含了一个图片路径变量和设置Ubuntu桌面背景的相关指令。
  2. 使用QFile设置更改SHELL文件中当前的图片路径。
  3. 使用QProcess执行此SHELL文件,更换壁纸。注:该SHELL文件的右键属性权限中应设置为“允许作为程序执行文件”。

Qt程序

#include 
void WallPaper::setWallPaper(QString filePath)
{
//更改SHELL文件“setwallpaperforUbuntu”中的图片路径信息
 QFile file(qApp->applicationDirPath() + "/setwallpaperforUbuntu");
 file.open(QIODevice::ReadWrite);
 QTextStream textStream(&file);
 QString text = textStream.readAll();
 int start = text.indexOf("/home");
 textStream.seek(start);
 textStream << filePath << "' ";//这么多空格是因为每次路径字符串长度不等,保证能够覆盖。SHELL文件相应位置也有空格(empty spaces)
 file.close();

//调用执行该SHELL文件
 QProcess *setWallPaperSHELL = new QProcess;
 QString command = qApp->applicationDirPath() + "/setwallpaperforUbuntu";
 setWallPaperSHELL->start(command);

}

SHELL文件“setwallpaperforUbuntu”

#!/bin/bash

 # Set picture options
 # Valid options are: none,wallpaper,centered,scaled,stretched,zoom,span ned
 picOpts="zoom"

 # File Path, the location where the Bing pics are stored, NOTICE: there are many empty spaces after the ".jpg'", which is very necessary!
 filePath='/home/yinhe/Pictures/WaldkauzDE_ZH-CN10024135858_1920x1080.jpg'                                                                                                                                                             

 # Set the GNOME3 wallpaper
 DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-uri '"file://'$filePath'"'

 # Set the GNOME 3 wallpaper picture options
 DISPLAY=:0 GSETTINGS_BACKEND=dconf gsettings set org.gnome.desktop.background picture-options $picOpts

 # Exit the script
 exit

Github源代码
一款简约的壁纸设置程序 https://github.com/polarbear0330/DeskWallPaper


本人联系方式:[email protected][email protected]

你可能感兴趣的:(Qt C++编程实现Windows和Ubuntu桌面背景/壁纸的设置)