「QtQuickアプリケーション開発」のサンプルプログラムで困った話


「QtQuickアプリケーション開発」のサンプルプログラム

QtQuickアプリケーション開発の7章のサンプルプログラムを私の環境で実行したところエラーにより実行できませんでした。そこで、使用しているバージョンのQtCreatorが生成する雛形にサンプルプログラムを書き写していたところエラーでハマったのでメモ。

まだまだQt初心者ですが、誰かの役に立てばと思います。

環境

  • Qt : 5.12.6
  • QtCreator : 4.10.2

発生したエラーと解決方法

エラーその1 「QAudioDeviceInfoがインポートできない」

QAudioDeviceInfoがImportできず、「’QAudioDeviceInfo’ file is not found」というエラーメッセージが表示される。

エラーその1の解決方法

修正前

#include <QAudioDeviceInfo>

修正後

#include <QtMultimedia/QAudioInput>

QAudioInputの前にQtMultimediaをつけることでエラーが出なくなりました。
しかし、エラーその2の解決方法を実施することで、そもそも修正前のコードでも問題なくなるようです。

エラーその2「Undefined refernce to …」

サンプルプログラムを一通り書き写した時点でビルドしたところ大量の「Undefined refernce to …」というエラーが発生しました。

エラーその2の解決方法

リファレンスを確認していたところ、下記の説明が。

To link against the C++ libraries, add the following to your qmake project file:

QT += multimedia

ということでプロジェクトファイルに上記のコードを追加したことでエラーが解決しました。また、エラーその1も発生しなくなることを確認しました。

エラーその3「QQmlApplicationEngine failed to load component / LevelMeter is not a type」

LevelMeterはサンプルプログラム内で作成しているカスタムQMLタイプです。

エラーその3の解決方法

ファイル「LevelMeter.qml」のプロジェクト上の配置に問題がありました。
下記のプロジェクトビューワーが修正前。

修正後

ファイルを追加する際に「section7」というプロジェクトの直下を右クリックして追加すると修正前のようにQMLの下にLevelMeter.qmlが入ってしまいます。

「qml.qrc」を右クリックしてファイルを追加すると修正後のようにファイルが追加されます。
これでエラーが解決しました。

勉強不足のため、.qrcファイルがどんな役割をしているのかわかりません。ご存じの方いらっしゃったらぜひ教えてください。

参考文献

QtQuickアプリケーション開発 工学社
QtQuickアプリケーション開発 工学社 (サンプルプログラム)
Qt Multimedia Module C++ Classes