Qt 调试系统输出报警声以及添加资源


前言

遇到一个需求,使用Qt输出报警声,于是试一试能调用的方法。

一、方法1 使用 Qsound

1.添加都文件 直接报错

#include
直接添加头文件
结果马上报错

在这里插入图片描述

2.解决这个错误 添加 QT += multimedia

QT += multimedia

问题解决

3. 加入代码又遇到新的错误

#include "widget.h"

#include <QApplication>
#include <QSound>
//#include <QCoreApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    // 播放系统默认的报警声音
//      QSound sound("alert"); // 系统默认警告声
//      sound.play();

      // 播放 Windows 的默认报警声音
      QSound sound("SystemExclamation"); // 系统警告声
      sound.play();
    w.show();


    return a.exec();
}

在这里插入图片描述

小结

竟然不能用,应该是找不到文件路径,之类的,时间比较赶,就先搞另外一种方法,有空再来测试

二、第二种方法

调用MP3,播放

1.引入库

代码如下(示例):

#include "widget.h"
#include <QApplication>
#include <QSound>
#include <QMediaPlayer>
#include <QAudioOutput>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    // 创建 QMediaPlayer 实例
       QMediaPlayer *player = new QMediaPlayer;
       // 设置要播放的 MP3 文件路径
       player->setMedia(QUrl::fromLocalFile("E:/QTcode/liugang/baojing/baojing/shengyin.mp3"));

       // 开始播放
       player->play();       
    w.show();
    return a.exec();
}

2.添加资源

2.1依次点击Qt—>Qt Resource File—>Choose

在这里插入图片描述

2.2给资源文件起个名字,如:res,在点击下一步

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.3 下次需要添加资源

在这里插入图片描述

3.添加资源无法播放问题

3.1遇到问题:用下面语句无论怎么更换地址都没法播放声音

player->setMedia(QUrl::fromLocalFile("qrc:/mp3/shengyin.mp3"));  //://shengyin.mp3

怀疑是资源添加有问题:有折腾了一下,先显示一张图片

在Qt中,您可以使用`QLabel`和`QPixmap`来读取并显示一张图片。以下是一个简单的例子,展示了如何使用这些类来显示一张图片:

1. **包含必要的头文件**:


```cpp
#include <QApplication>
#include <QLabel>
#include <QPixmap>
  1. 读取并显示图片
int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建一个QLabel对象
    QLabel *label = new QLabel;

    // 创建一个QPixmap对象并加载图片
    QPixmap pixmap("path/to/your/image.jpg");

    // 将图片设置为QLabel的背景
    label->setPixmap(pixmap);

    // 显示QLabel
    label->show();

    return app.exec();
}

结果显示图片没问题

3.2解决问题

将读取MP3文件的函数修改一下

将这句修改: player->setMedia(QUrl::fromLocalFile(“qrc:/mp3/shengyin.mp3”)); //😕/shengyin.mp3

修改成:player->setMedia(QUrl(“qrc:/mp3/shengyin.mp3”)); //😕/shengyin.mp3

#include "widget.h"
#include "ui_widget.h"
#include <QMediaPlayer>
#include <QLabel>
#include <QPixmap>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    // 创建 QMediaPlayer 实例
       QMediaPlayer *player = new QMediaPlayer;
       //player->setMedia(QUrl::fromLocalFile("D:/QTcode/gou/baojing/baojing/baojing/shengyin.mp3"));
       //player->setMedia(QUrl::fromLocalFile("qrc:/mp3/shengyin.mp3"));  //://shengyin.mp3
       player->setMedia(QUrl("qrc:/mp3/shengyin.mp3"));  //://shengyin.mp3
       // 开始播放
       player->play();

       // 创建一个QLabel对象
       QLabel *label = new QLabel;

       // 创建一个QPixmap对象并加载图片
       QPixmap pixmap(":/mp3/moban.jpg");  //://mp3/moban.jpg

       // 将图片设置为QLabel的背景
       label->setPixmap(pixmap);

       // 显示QLabel
       label->show();
}

Widget::~Widget()
{
    delete ui;
}


4.添加资源路径技巧

在这里插入图片描述

三、 QPixmap 没问题,opencv imread 读取有问题

// 创建一个QLabel对象
QLabel *label = new QLabel;

// 创建一个QPixmap对象并加载图片
QPixmap pixmap(":/moban/moban.jpg");  //://mp3/moban.jpg

// 将图片设置为QLabel的背景
label->setPixmap(pixmap);

// 显示QLabel
label->show();
//://moban/moban.jpg

templ = imread("D:/QTcode/gou/gouPiPeiMain/gouPiPeiMain/moban/moban.jpg");//模板

改成

templ = imread(":/moban/moban.jpg");//模板

在这里插入图片描述

1. opencv imread在Qt 读取图片问题

在Qt 中使用Imread读取图片,相对路径是行不通的,会报错,估计是编码的时候没法正确读取路径,试了很多都不行,
同样的路径用Qt自带的QPixmap pixmap(“:/moban/moban.jpg”);就没有问题imread

相对路径
相对路径的好处是,图片在项目目录下,拷贝的时候跟着拷贝。再次编译的时候不会丢失。
**最常用的方法是把图片拷贝到项目的根目录下面,和cpp文件放在同一个目录,**直接访问。

Image = imread("01.JPG");

或者在根目录下,新建一个文件夹,如:pictures。把图片拷贝到pictures文件夹下面。

Image = imread("pictures//01.JPG");//可以
Image = imread("pictures\\01.JPG");//可以
Image = imread("pictures/01.JPG");//可以

这三种方式,都是可以的。
而单右斜线形式是不可以的。

srcImage = imread("pictures\01.JPG");//不可以

绝对路径
也可以使用绝对路径,和相对路径类似的。

Image = imread("D://Project test//Project1//pictures//01.JPG");//可以
Image = imread("D:\\Project test\\Project1\\pictures\\01.JPG");//可以
Image = imread("D:/Project test/Project1/pictures/01.JPG");//可以

这三种方式,都是可以的。
而单右斜线形式是不可以的。

Image = imread("D:\Project test\Project1\pictures\01.JPG");//不可以

2.读取图片小结

  1. Qt自带的用相对路径,绝对路径都没问题
  2. Qt里面用Imread 只能读取绝对路径,或者先用Qt自带的读取成pixmap、Qimage格式在转换成Mat格式

总结

继续加油

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值