前言
遇到一个需求,使用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>
- 读取并显示图片:
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");//可以
这三种方式,都是可以的。
而单右斜线形式是不可以的。文章来源:https://www.toymoban.com/news/detail-798806.html
Image = imread("D:\Project test\Project1\pictures\01.JPG");//不可以
2.读取图片小结
- Qt自带的用相对路径,绝对路径都没问题
- Qt里面用Imread 只能读取绝对路径,或者先用Qt自带的读取成pixmap、Qimage格式在转换成Mat格式
总结
继续加油文章来源地址https://www.toymoban.com/news/detail-798806.html
到了这里,关于Qt 调试系统输出报警声以及添加资源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!