当前位置: 首页 > news >正文

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

文章目录

  • 前言
  • 一、方法1 使用 Qsound
    • 1.添加都文件 直接报错
    • 2.解决这个错误 添加 QT += multimedia
    • 3. 加入代码又遇到新的错误
    • 小结
  • 二、第二种方法
    • 1.引入库
    • 2.添加资源
      • 2.1依次点击Qt--->Qt Resource File--->Choose
      • 2.2给资源文件起个名字,如:res,在点击下一步
      • 2.3 下次需要添加资源
    • 3.添加资源无法播放问题
      • 3.1遇到问题:用下面语句无论怎么更换地址都没法播放声音
      • 3.2解决问题
    • 4.添加资源路径技巧
  • 三、 QPixmap 没问题,opencv imread 读取有问题
    • 1. opencv imread在Qt 读取图片问题
    • 2.读取图片小结
  • 总结


前言

遇到一个需求,使用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);// 显示QLabellabel->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.mp3player->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);// 显示QLabellabel->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.jpgtempl = 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格式

总结

继续加油

http://www.lryc.cn/news/281598.html

相关文章:

  • Linux下文件的创建写入读取编程
  • python 解析
  • 谷歌aab包在Android 14闪退而apk没问题(targetsdk 34)
  • 34.在排序数组中查找元素的第一个和最后一个位置
  • js树过滤
  • Java多线程并发篇----第十六篇
  • 测评结果:免费的“文心一言3.5”香,但是付费的产品质量更高
  • Matlab GUI设计基础范例(可以一步一步跟着做)
  • @Transactional(rollbackFor = {Exception.class})与 @Transactional区别
  • 数据结构——二叉树(先序、中序、后序及层次四种遍历(C语言版))超详细~ (✧∇✧) Q_Q
  • 如何快速打造属于自己的接口自动化测试框架
  • 人工智能在数据安全中的应用场景
  • 2024.1.16每日一题
  • python入门,数据容器的通用操作(len,max,min,sorted)
  • 运筹说 第67期 | 动态规划模型的建立与求解
  • 大模型压缩与优化的技术原理与创新方法
  • ConcurrentSkipListMap 深度解析
  • Vue学习笔记6--配置代理
  • 嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第三天-C++类和对象高级应用(物联技术666)
  • SAP中采购文档价格条件可以删除吗?
  • Baumer工业相机堡盟工业相机如何通过NEOAPI SDK设置硬件触发模式(C++)
  • 嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第二天-tcp编程练习(物联技术666)
  • 【IC前端虚拟项目】MVU子模块DS文档编写与注意事项
  • Postgresql 12.2 + PostGIS 3.0.1 安装部署
  • MAC iterm 显示git分支名
  • 智慧公厕:利用物联网、云计算和人工智能实现智能化管理与控制
  • 【漏洞复现】Apache Tomcat AJP文件包含漏洞(CVE-2020-1938)
  • [渗透测试学习] Hospital - HackTheBox
  • C技能树-学习笔记(1-2)C语言概述和数据类型
  • 设计模式入门