QAudioOutput 无法播放声音的问题

在 Windows 上使用 MSVC 编译的 Qt 程序,无法播放声音,QAudioDeviceInfo::availableDevices 返回空列表。

这是因为没能正确加载 Qt 插件。需要将 Qt\msvc2017_64\plugins 目录下的 audio 目录复制到可执行文件所在目录。

使用 windeployqt 部署后即可正确运行。

插件加载正确后,仍然发生无声音的问题,且 Qt 无任何报错。通过 QAudioDeviceInfo 查看支持的音频格式为:

QCustomPlot 启用 OpenGL

编译时添加预编译宏 QCUSTOMPLOT_USE_OPENGL,用绘图的 QCustomPlot 子类调用 setOpenGl(true),并链接 OpenGL32

在 Windows 上使用 OpenGL32 存在很严重的性能问题,可以改为使用 freeglut

图像错乱问题

修改 QCPPaintBufferGlFbo::draw,添加上下文切换的代码。

QObject 与 dllimport 的相关问题

Qt 的元对象编译(MOC)系统会根据标记了 Q_OBJECT 的类生成代码。由于类通常在头文件中,因此通常需要将头文件加入编译。

1add_library(lib SHARED lib.h lib.cpp)

在 Windows 上引用 lib 时,可能会遇到 staticMetaObject 符号未定义的错误。

Qt 布局不更新的问题

修改 QWidget

在 QWidget 已经加入布局之后,修改其大小,布局不会自动更新。需要调用 QWidget::updateGeometry 方法。

类似的,修改子布局时需要调用 QLayout::updateGeometry 方法。

修改 QSpacerItem

Qt 日志模块

旧的方式:

1#include <QDebug>
2
3qDebug() << "hello world"

现在默认所有日志都不打印,因此这种方式看不到打印

Qt 资源文件打开失败的问题

首先,Qt 的资源文件需要使用 Q_INIT_RESOURCE 宏进行初始化,参数为 qrc 文件的文件名,例如:

1Q_INIT_RESOURCE(theme);   // 初始化 theme.qrc
2Q_INIT_RESOURCE(icon);    // 初始化 icon.qrc

并且,这个宏必须在全局命名空间下调用,例如:

Ubuntu 上配置 QtQuick/QML 开发环境

安装以下包:

1sudo apt install qtbase5-dev              # Qt5 基础开发包
2sudo apt install qtquickcontrols2-5-dev   # QtQuick 基础开发包
3sudo apt install qtdeclarative5-dev       # Qt5 的 CMake 模块
4
5sudo apt install qtcreator                # Qt Creator
6sudo apt install qttools5-dev             # Qt5 工具,包含 Qt5Designer、Qt5LinguistTools 等

编译 Qt 源码,没有生成 libqxcb.so 的问题

Qt 通过不同的插件,在不同的平台上进行显示,例如:

  • libqlinuxfb.so 用于 Frame Buffer
  • libqxcb.so 用于 X11
  • libqwayland-generic.so 用于 Wayland

构建 X11 插件需要依赖许多 xcb 的开发包,可以通过下面的命令安装:

Qt 5.15.2:

让 QMediaPlayer 使用代理

QMediaPlayer 使用简介

使用 QMediaPlayer::setSource 设置媒体源,即可进行播放:

1player = new QMediaPlayer;
2audioOutput = new QAudioOutput;
3player->setAudioOutput(audioOutput);