Qt常见类(9)QDesktopServices、QSplashscreen、QSharememory

在这里插入图片描述

1.QDesktopServices调用桌面服务

QDesktopServices类提供了访问常见桌面服务的方法。许多桌面环境提供的服务可被应用程序用于执行常见任务,如打开网页,其方式既一致又考虑到用户的应用程序偏好。该类包含为这些服务提供简单接口的函数,这些接口指示服务是否成功。包括了打开本地文件(远程也可以)、获取桌面、我的文档、Home目录、打开网页等。
当做GUI应用时需要打开某个资源时常常用到这种方法,或者当生成某个文件后立即打开的操作也需要用到这个类。前面文章中提到,使用Qt Network模块的类包括QNetworkRequest、QNetworkReply和QNetworkAccessManager,使用通用的协议来执行网络操作,可以说也能打开一个网页,二者的区别是QDesktopServices调用的是系统提供的桌面服务,或者说系统的应用被调用了,而Network则是自己创建一个应用,这个应用可以发起http请求,看起来也是打开了一个网页。QProcess类也可以打开本地目录,在实现的方法上有些区别,代码中注释清楚,下面粘贴代码与效果,比较简单,实际应用中稍作适配即可使用。

1.1.h文件

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QDesktopServices>
#include <QUrl>
#include <QProcess>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
    Q_OBJECT
public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
private slots:
    void on_btn_openWeb_clicked();
    void on_btn_openFoder_clicked();
    void on_btn_openFoderByPro_clicked();
    void on_btn_openFile_clicked();
private:
    Ui::Widget *ui;
    QDesktopServices * myService;
};
#endif // WIDGET_H

1.2.cpp文件

#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    myService = new QDesktopServices();

}
Widget::~Widget()
{
    delete ui;
}
void Widget::on_btn_openWeb_clicked()
{
    //打开晓晓暮雨潇潇主页
    QUrl url(QString("https://blog.csdn.net/weixin_40615338?spm=1011.2124.3001.5343"));
    myService->openUrl(url);
}
void Widget::on_btn_openFoder_clicked()
{
    //打开本地系统目录
   QDesktopServices::openUrl(QUrl("C:/", QUrl::TolerantMode));
}

void Widget::on_btn_openFoderByPro_clicked()
{
    //使用QProcess打开资源管理器指定目录
    QString local_path = QString("E:\\新建文件夹");
    QProcess::startDetached("explorer " + local_path);
}

void Widget::on_btn_openFile_clicked()
{
        QString strUrl =QString::fromLocal8Bit("file:///E:\\Day26.txt");
        QUrl url(strUrl);
        myService->openUrl(url);
}

1.3效果

例如单击打开文件按钮时,效果如下
在这里插入图片描述

1.4QGroupBox样式表

这是我在网络上随便粘贴了一个样式表,你会发现,Qt可以做出很漂亮的界面,后续我会出专栏介绍样式表的强大和魅力。

 background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #E0E0E0, stop: 1 #FFFFFF);
 border: 4px solid gray;
 border-radius: 5px;
 margin-top: 24px; 

2.QSplashscreen制作程序启动画面

在大型程序启动之前,通常都有一个动画界面,之后才能进入软件界面。例如vivado、eclipse、Altium Designer等。在程序启动时,通常需要导入配置数据,读取用户文件,进行网络初始化等操作,为了避免用户因这个等待导致用户体验差,通常均用一小段动画,或者图片,进度条的形式显示。在Qt开发的应用程序中,使用QSplashscreen可以完成这一操作。
通常在main函数中的主界面显示之前完成这个操作,如果显示图片则使用QPixmap构造;如果显示动画gif则需要使用QMovie构造,并将gif放在以splashscreen为父对象的Qlabel上操作。下面示例中显示了图片效果,代码简单,使用时可直接黏贴。

2.1main代码

请关注注释

#include "widget.h"
#include <QApplication>
#include <QPixmap>
#include <QSplashScreen>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    QPixmap pix(":/screen.png");//应用程序加载图片
    QSplashScreen myScreen(pix);//构造显示屏幕
    myScreen.show();//启动动画显示
    for(int i = 0;i<800000000;i++);//停留 延时
    //在finish之前,你可以进行自定义应用中所需的操作,例如初始化,文件读取等操作
    myScreen.finish(&w);//结束
    w.show();
    return a.exec();
}

2.2效果

在这里插入图片描述

3.​QSharememory实现一个实例启动

在某些应用中,只希望在同一时刻只运行一个程序。实现这个实例依据的主要原理是进程间通信,即先启动的程序A与后启动的程序B二者之间通信。**共享内存便是进程之间通信的常用手段。**创建一个场景,如果attach返回true,则说明程序已经启动,共享内存已经创建,此时退出程序。若程序未启动,则创建共享内存启动程序。其主要代码是在main函数中,如下所示。

3.1main文件

#include "widget.h"
#include <QSharedMemory>
#include <QApplication>
#include <QMessageBox>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSharedMemory shared("a");
    if(shared.attach())//共享内存被占用则直接返回
    {
        QMessageBox::information(NULL,QStringLiteral("Tips"),QStringLiteral("App is running!"));
        qApp->quit();//退出当前程序
        return 0;
    }
    shared.create(1);//共享内存没有被占用则创建UI
    Widget w;
    w.show();
    return a.exec();
}

3.2效果

当前已经有一个程序启动的时候,再去启动第二个程序,则会提示用户并退出。
在这里插入图片描述

4.传送门

END

🎏文章原创,首发于CSDN论坛。
🎏欢迎点赞❤❤收藏⭐⭐打赏💴💴!
🎏欢迎评论区或私信指出错误❌,提出宝贵意见或疑问❓。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FPGA小油条

原创不易,请多支持

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

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

打赏作者

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

抵扣说明:

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

余额充值