淄博临淄网站建设,网站建设工作流程html,直播是网站怎么做,wordpress mysql配置1.原理
要想实现开机自启动#xff0c;首先#xff0c;QT是没有这种实现的#xff0c;最好是靠电脑开机的启动目录启动软件#xff0c;下面这个目录
/etc/xdg/autostart
这是操作系统中用于配置启动项的目录#xff0c;该目录下存放着开机自启动的启动器(.desktop)文件…1.原理
要想实现开机自启动首先QT是没有这种实现的最好是靠电脑开机的启动目录启动软件下面这个目录
/etc/xdg/autostart
这是操作系统中用于配置启动项的目录该目录下存放着开机自启动的启动器(.desktop)文件要想软件开机自启动大都是通过配置一个启动器文件来实现可以看一下这个目录 里面存放着很多开机要启动的配置
所以我们写的QT 程序要想实现自启动为这个程序写一个启动器(.desktop)文件放在这个目录下即可
2.实现
那么怎么实现呢
其实不难就几行代码如下所示
[Desktop Entry]
Exec/home/yicaobao/qtProjects/SelfStartDemo/bin/bin/SelfStartDemo
Icon/home/yicaobao/qtProjects/SelfStartDemo/bin/resource/start-logo.png
NameSelfStartDemo
Terminalfalse
TypeApplication
X-Deepin-Vendoruser-custom简单介绍一下主要的
1.Exec要运行的东西程序脚本等路径
2.Namedesktop文件的名字在/etc/xdg/autostart目录下显示的启动器名字
3.Type: 用于指定 desktop 文件的类型包括 3 种类型Application、Link、Directory)。
4.Icon: desktop 文件没有图标 Icon: 指定应用程序图标的完整路径(可以省略后缀名)。 图标支持 png 格式、svg 格式等图标的推荐尺寸为 128x128。
因此一个基本的 desktop 文件模板应该像下面这样
[Desktop Entry]
Name应用程序名
TypeApplication
Exec应用程序完整路径
Icon应用程序图标的完整路径
我从这里引用过来的https://www.ywnz.com/linuxjc/3603.html要了解跟多可以去看一下
所以我们只要写一个启动器丢到启动目录就行了
其实也不算麻烦但是并不是很方便但是想要智能一点在程序里写一个可选项勾选就可以实现开机自启动或者取消开机自启动就更好了像这样 3.QT代码实现
思路如下先写一个启动器然后在写开机自启动和取消开机自启动脚本程序脚本程序将启动器拷贝到linux启动目录就可以了
所以QT里就用到了文件写入执行脚本的模块
解释一下核心代码
1.获取当前程序的名字因为启动需要
AppName QCoreApplication::applicationName();
2.启动脚本目录 QDir dir(QCoreApplication::applicationDirPath());dir.cdUp();startFileDir dir.path();
3.生成启动器的代码
void Widget::generateStartFile(QString fileName)
{QString filePath startFileDir / fileName;QFile File(filePath);if(File.exists()) {//return;}QString startFilePath;QStringList list;list [Desktop Entry] QString(Exec%1/bin/%2).arg(startFileDir).arg(AppName) QString(Icon%1/resource/start-logo.png).arg(startFileDir) QString(Name%1).arg(AppName) Terminalfalse TypeApplication X-Deepin-Vendoruser-custom;//写入到文件中writeStartFile(filePath, list);
}
4.生成拷贝启动器文件到linux下启动目录的shell脚本
void Widget::copyToAutostartShell(QString desktopName)
{QStringList arguments;arguments #!/bin/sh QString(#设置开机自动启动) QString(echo \%1\ | sudo -S cp %2 /etc/xdg/autostart).arg(userPwd).arg(startFileDir/desktopName) QString(notify-send \程序已设置开机自启动\);//写入到文件中writeStartFile(startFileDir/AotuStart.sh, arguments);
}
5.生成移除启动器文件的脚本也就是取消开机启动
void Widget::removeAutostartFile(QString desktopName)
{QStringList arguments;arguments #!/bin/sh QString(echo \%1\ | sudo -S rm /etc/xdg/autostart/%2).arg(userPwd).arg(desktopName) QString(notify-send \程序开机自启动已取消\);writeStartFile(startFileDir/unAotuStart.sh, arguments);
}
6.执行脚本的代码
void Widget::executeLinuxCmd(QString path, QString fileName)
{QProcess *backupProcess new QProcess;backupProcess-setWorkingDirectory(path);backupProcess-start(/bin/sh,QStringList()fileName);bool isfinished backupProcess-waitForFinished();QString strResult backupProcess-readAllStandardOutput();QString strErrResult backupProcess-readAllStandardError();//QStringList strList strResult.split(\n);if(!strErrResult.isEmpty()) {QMessageBox::information(this, 提示, strResult);}else {QMessageBox::information(this, 提示, strResult);}if(isfinished){backupProcess-close();delete backupProcess;backupProcess nullptr;}
}点击选中开机自启动或者取消开机自启动的代码
void Widget::on_selfStart_stateChanged(int state)
{Q_UNUSED(state)UserPwdDialog dialog(this);if (QDialog::Accepted ! dialog.exec())return;userPwd dialog.getPWD();if(ui-selfStart-isChecked()) {generateStartFile(QString(%1.desktop).arg(AppName));copyToAutostartShell(QString(%1.desktop).arg(AppName));executeLinuxCmd(startFileDir, AotuStart.sh);}else {removeAutostartFile(QString(%1.desktop).arg(AppName));executeLinuxCmd(startFileDir, unAotuStart.sh);}
} 4. 效果 设置开机自启动后效果如下重启电脑就会发现程序会开机启动了 设置取消开机自启动后效果如下把启动器文件删除了就不会开机启动了 我只是举一个简单的例子可以根据这个例子理解了做成一个接口到时就可以给想要做开机自启动的程序用了
我给一下这个例子的源代码
链接: https://pan.baidu.com/s/1Yn_N87IKgjKUerVhb5GtUQ 提取码: 8888
linux下的QT程序开机自启动用代码实现智能化开启或取消找了很久在网上都没有找到一个૮₍ ◞‸◟₎ა 后面就自己找了个时间了解这个原理后弄了一个例子出来对你有帮助的记得点个赞让我看看是不是有很多人想要这种功能性的代码
或者你们有什么更好的方案或者其他问题的评论取留言探讨一下੭ ᐕ)੭