Error compilation in migration from 5.15 to 6.7
-
I have the following class
.h file
#ifndef MULTIMEDIACONTROLLER_H #define MULTIMEDIACONTROLLER_H #include "MultimediaManager.h" #include <QtCore/QObject> class QQuickItem; class MediaListModel; class MultimediaController : public QObject { Q_OBJECT Q_PROPERTY(QQuickItem *videoOutput READ videoOutput WRITE setVideoOutput NOTIFY videoOutputChanged) Q_PROPERTY(MultimediaState multimediaState READ multimediaState NOTIFY multimediaStateChanged) Q_PROPERTY(PlayerState playerState READ playerState NOTIFY playerStateChanged) Q_PROPERTY(QString bluetoothSinkAddress READ bluetoothSinkAddress WRITE setBluetoothSinkAddress) Q_PROPERTY(QString mediaName READ mediaName NOTIFY mediaNameChanged) Q_PROPERTY(QString backgroundImage READ backgroundImage NOTIFY backgroundImageChanged) Q_PROPERTY(QString webUrl READ webUrl NOTIFY webUrlChanged) Q_PROPERTY(QString uri READ uri NOTIFY URIChanged) Q_PROPERTY(double rate READ rate WRITE setRate NOTIFY rateChanged) Q_PROPERTY(bool isDVBRadio READ isDVBRadio NOTIFY dvbRadioChanged) Q_PROPERTY(MediaListModel *webRadioChannelList READ webRadioChannelList NOTIFY webRadioChannelListChanged) Q_PROPERTY(MediaListModel *webLinkList READ webLinkList NOTIFY webLinkListChanged) public: ~MultimediaController(); MultimediaController(QObject *parent = nullptr); Q_INVOKABLE double getVolume() const; enum MultimediaState { NoMediaLoaded = NO_MEDIA_LOADED, StartupVideo = STARTUP_VIDEO, WorkoutCooldown = WORKOUT_COOLDOWN, YourViewBackgroundImage = YOURVIEW_BACKGROUND_IMAGE, YourViewBackgroundVideo = YOURVIEW_BACKGROUND_VIDEO, DigitalTV = DIGITAL_TV, DigitalTvRadio = DIGITAL_TV_RADIO, WebRadio = WEB_RADIO, YouTube = YOUTUBE, WebBrowser = WEB_BROWSER, LocalFileAudio = LOCAL_FILE_AUDIO, LocalFileVideo = LOCAL_FILE_VIDEO }; Q_ENUM(MultimediaState) enum PlayerState { Unknown = UNKNOWN_PLAYER_STATE, Stopped = PLAYER_STOPPED, Loading = PLAYER_LOADING, Playing = PLAYER_PLAYING }; Q_ENUM(PlayerState) QQuickItem *videoOutput() const; MultimediaState multimediaState() const; PlayerState playerState() const; QString bluetoothSinkAddress() const; QString backgroundImage() const; QString mediaName() const; QString webUrl() const; QString uri() const; double rate() const; bool isDVBRadio() const; MediaListModel *webRadioChannelList(); MediaListModel *webLinkList(); void setVideoOutput(QQuickItem *item); void setBluetoothSinkAddress(QString &address); Q_INVOKABLE void stop(); Q_INVOKABLE void setYourViewPicture(const QString &picturePath); Q_INVOKABLE void setYourViewVideo(const QString &videoPath); Q_INVOKABLE void tuneToTVChannel(const QString &channelName, const QString &channelUrl, const bool isRadio); Q_INVOKABLE void tuneToWebRadioChannel(const QString &channelName, const QString &channelUrl); Q_INVOKABLE void browseWebPage(const QString &webUrl, const QString &pageName); Q_INVOKABLE void playYouTubeVideo(const QString &videoUrl, const QString &audioUrl); Q_INVOKABLE void playLocalMedia(const QString &mediaName, const QString &mediaUrl, const QString &fileType); Q_INVOKABLE void playStatupVideo(); Q_INVOKABLE void goCooldown(); Q_INVOKABLE void setVolume(double volume); Q_INVOKABLE void setRate(double rate); Q_INVOKABLE void reset(); Q_INVOKABLE void reloadWebLists(); signals: void mediaNameChanged(); void webUrlChanged(); void rateChanged(); void videoOutputChanged(); void multimediaStateChanged(); void playerStateChanged(); void statupVideoFinished(); void backgroundImageChanged(); void error(); void playbackFinished(); void dvbRadioChanged(); void webRadioChannelListChanged(); void webLinkListChanged(); void URIChanged(); private: double _volume; }; #endif.cpp file
#include <QDebug> #include <QtMath> #include <QProcess> #include "MultimediaController.h" #include "MediaListModel.h" extern bool apolloIsRunning; MultimediaController::MultimediaController(QObject *parent) : QObject(parent) { qRegisterMetaType<MediaListModel *>(); MultimediaManager *mm = MultimediaManager::instance(); connect(mm, &MultimediaManager::videoOutputChanged, this, &MultimediaController::videoOutputChanged); connect(mm, &MultimediaManager::mediaNameChanged, this, &MultimediaController::mediaNameChanged); connect(mm, &MultimediaManager::webUrlChanged, this, &MultimediaController::webUrlChanged); connect(mm, &MultimediaManager::rateChanged, this, &MultimediaController::rateChanged); connect(mm, &MultimediaManager::multimediaStateChanged, this, &MultimediaController::multimediaStateChanged); connect(mm, &MultimediaManager::playerStateChanged, this, &MultimediaController::playerStateChanged); connect(mm, &MultimediaManager::statupVideoFinished, this, &MultimediaController::statupVideoFinished); connect(mm, &MultimediaManager::backgroundImageChanged, this, &MultimediaController::backgroundImageChanged); connect(mm, &MultimediaManager::dvbRadioChanged, this, &MultimediaController::dvbRadioChanged); connect(mm, &MultimediaManager::error, this, &MultimediaController::error); connect(mm, &MultimediaManager::playbackFinished, this, &MultimediaController::playbackFinished); connect(mm, &MultimediaManager::webRadioChannelListChanged, this, &MultimediaController::webRadioChannelListChanged); connect(mm, &MultimediaManager::webLinkListChanged, this, &MultimediaController::webLinkListChanged); connect(mm, &MultimediaManager::URIChanged, this, &MultimediaController::URIChanged); } MultimediaController::~MultimediaController() { } QQuickItem *MultimediaController::videoOutput() const { return MultimediaManager::instance()->videoOutput(); } MultimediaController::MultimediaState MultimediaController::multimediaState() const { return static_cast<MultimediaController::MultimediaState>(MultimediaManager::instance()->multimediaState()); } MultimediaController::PlayerState MultimediaController::playerState() const { return static_cast<MultimediaController::PlayerState>(MultimediaManager::instance()->playerState()); } double MultimediaController::rate() const { return MultimediaManager::instance()->rate(); } QString MultimediaController::bluetoothSinkAddress() const { return MultimediaManager::instance()->bluetoothSinkAddress(); } QString MultimediaController::mediaName() const { return MultimediaManager::instance()->mediaName(); } QString MultimediaController::webUrl() const { return MultimediaManager::instance()->webUrl(); } QString MultimediaController::uri() const { return MultimediaManager::instance()->uri(); } QString MultimediaController::backgroundImage() const { return MultimediaManager::instance()->backgroundImage(); } bool MultimediaController::isDVBRadio() const { return MultimediaManager::instance()->isDVBRadio(); } MediaListModel *MultimediaController::webRadioChannelList() { return MultimediaManager::instance()->webRadioChannelList(); } MediaListModel *MultimediaController::webLinkList() { return MultimediaManager::instance()->webLinkList(); } void MultimediaController::stop() { MultimediaManager::instance()->stop(); } void MultimediaController::setVolume(double volume) { if (apolloIsRunning) { qDebug() << "Impostazione volume" << volume; QString command = QString("/opt/apollo/bin/pulseaudio_manager.py --set %1").arg(qCeil(volume * 200.0)); qDebug() << command; system(qPrintable(command)); } _volume = volume; } double MultimediaController::getVolume() const { if (apolloIsRunning) { QProcess process; process.start("/bin/bash", QStringList() << "-c" << QStringLiteral("/opt/apollo/bin/pulseaudio_manager.py --get")); process.waitForFinished(); QString result = process.readAllStandardOutput(); process.close(); if (result.size() != 0) { return result.toDouble() / 200.0; } } return _volume; } void MultimediaController::setRate(double rate) { MultimediaManager::instance()->setRate(rate); } void MultimediaController::setVideoOutput(QQuickItem *item) { MultimediaManager::instance()->setVideoOutput(item); } void MultimediaController::setBluetoothSinkAddress(QString &address) { MultimediaManager::instance()->setBluetoothSinkAddress(address); } void MultimediaController::setYourViewPicture(const QString &picturePath) { MultimediaManager::instance()->setYourViewPicture(picturePath); } void MultimediaController::setYourViewVideo(const QString &videoPath) { MultimediaManager::instance()->setYourViewVideo(videoPath); } void MultimediaController::tuneToTVChannel(const QString &channelName, const QString &channelUrl, const bool isRadio) { MultimediaManager::instance()->tuneToTVChannel(channelName, channelUrl, isRadio); } void MultimediaController::tuneToWebRadioChannel(const QString &channelName, const QString &channelUrl) { MultimediaManager::instance()->tuneToWebRadioChannel(channelName, channelUrl); } void MultimediaController::browseWebPage(const QString &webUrl, const QString &pageName) { MultimediaManager::instance()->browseWebPage(webUrl, pageName); } void MultimediaController::playYouTubeVideo(const QString &videoUrl, const QString &audioUrl) { MultimediaManager::instance()->playYouTubeVideo(videoUrl, audioUrl); } void MultimediaController::playLocalMedia(const QString &mediaName, const QString &mediaUrl, const QString &fileType) { MultimediaManager::instance()->playLocalMedia(mediaName, mediaUrl, fileType); } void MultimediaController::playStatupVideo() { MultimediaManager::instance()->playStatupVideo(); } void MultimediaController::goCooldown() { MultimediaManager::instance()->goCooldown(); } void MultimediaController::reset() { MultimediaManager::instance()->reset(); } void MultimediaController::reloadWebLists() { MultimediaManager::instance()->reloadWebLists(); }In 5.15 the compilation is fine and all words, in 6.7 I have the following errors
/build/Desktop_Qt_6_7_1-Debug/moc_MultimediaController.cpp:242: required from ‘constexpr const QtPrivate::QMetaTypeInterface const qt_incomplete_metaTypeArray [60]<{anonymous}::qt_meta_stringdata_CLASSMultimediaControllerENDCLASS_t, QtPrivate::TypeAndForceComplete<QQuickItem*, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MultimediaController::MultimediaState, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MultimediaController::PlayerState, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<double, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<bool, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MediaListModel*, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MediaListModel*, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MultimediaController::MultimediaState, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MultimediaController::PlayerState, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MultimediaController, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<double, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const bool, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<double, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<double, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> > >’
/home/mirko/Qt/6.7.1/gcc_64/include/QtCore/qmetatype.h:2600:43: required from ‘constexpr const QtPrivate::QMetaTypeInterface* const qt_incomplete_metaTypeArray [60]<{anonymous}::qt_meta_stringdata_CLASSMultimediaControllerENDCLASS_t, QtPrivate::TypeAndForceComplete<QQuickItem*, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MultimediaController::MultimediaState, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MultimediaController::PlayerState, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<QString, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<double, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<bool, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MediaListModel*, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MediaListModel*, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MultimediaController::MultimediaState, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MultimediaController::PlayerState, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<MultimediaController, std::integral_constant<bool, true> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<double, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const bool, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<const QString&, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<double, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<double, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> >, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, false> > >’
moc_MultimediaController.cpp:242:5: required from here
/home/mirko/Qt/6.7.1/gcc_64/include/QtCore/qmetatype.h:2660:55: in ‘constexpr’ expansion of ‘QtPrivate::qTryMetaTypeInterfaceForType<{anonymous}::qt_meta_stringdata_CLASSMultimediaControllerENDCLASS_t, TypeAndForceComplete<MediaListModel*, std::integral_constant<bool, true> > >()’*Any ideas?????
Thanks for the help
-
In Qt 6, all
Q_PROPERTYtypes need to be fully defined (no forward-declaration). So just move required#includestatements from .cpp to .h and it should work.