![](/img/trans.png)
[英]GStreamer encountered a general stream error in Qt5 raspberry pi
[英]Strange error while trying to deploy qt5 app on raspberry pi
我有一個在Ubuntu 14.04 LTS上完成的項目,但是隨后,我想測試Raspberry Pi是否能夠運行我的這個小程序。 然后,我按照此鏈接上的說明在Pi上本地編譯和構建qt5。
我已經成功安裝了qt5,甚至可以編譯並運行位於qt示例上的“多維數據集”程序。
之后,我編譯並安裝了我的項目所需的qtmultimedia子模塊。
好的,情況看起來不錯。 然后我在Pi上克隆了我的項目,運行qmake,然后運行了make。 直到...我收到此錯誤消息:
In file included from ../mainWindow.h:14:0,
from ../main.cpp:3:
../core/core.h: In constructor ‘bumbatv::core::Core::Core()’:
../core/core.h:37:36: error: conversion from ‘int’ to ‘QString’ is ambiguous
../core/core.h:37:36: note: candidates are:
/usr/local/qt5/include/QtCore/qstring.h:649:31: note: QString::QString(const char*)
/usr/local/qt5/include/QtCore/qstring.h:214:14: note: QString::QString(const QChar*, int)
Makefile:2564: recipe for target 'main.o' failed
make: *** [main.o] Error 1
事情是...在代碼的這一特定區域,我沒有從int到QString的轉換!
class Core : public QObject
{
Q_OBJECT
private:
static Core *instance_;
QHash <int, Channel*> channels_;
int currentChannelId_;
QString computerName_;
QString projectDirectory_;
Definitions::kPlayerStatus player_;
QHash<int, Media*> medias_;
QString userEmail_;
QString userPassword_;
QString userPasswordEncrypted_;
bool logged_;
Core(){
Channel *channel = new Channel; // This is the error line.
channels_.insert(channel->getId(),channel);
currentChannelId_ = channel->getId();
player_ = Definitions::kStopped;
logged_ = false;
}
Core(const Core&);
Core& operator=(const Core&);
/* Protect destructor.
* Deletes all elements allocated in the Document.
*/
~Core()
{
// Delete channels
foreach (Channel *c, channels_)
delete c;
}
(...)
}
這是Channel構造函數:
class Channel : public QObject
{
Q_OBJECT
private:
static int countChannel_;
int idChannel_;
QString label_;
int currentMediaId_;
int totalTime_;
int order_;
QHash<int, Media*> medias_;
signals:
(...)
public:
Channel(int id = -1, int order = -1, int totalTime = -1, QString label = NULL) {
if(id==-1){
idChannel_ = countChannel_++;
}else{
idChannel_ = id;
countChannel_ = countChannel_ <= id ? id+1 : countChannel_;
}
order_ = order == -1 ? idChannel_ : order;
totalTime_ = totalTime == -1 ? 0 : totalTime;
label_ = label == NULL ? QString("Channel %1").arg(idChannel_+1) : label;
}
/* Protect destructor.
* Deletes all elements allocated in the Channel.
*/
~Channel()
{
// Delete medias
foreach (Media *m, medias_)
delete m;
}
(...)
}
這是make調用的命令:
/usr/bin/g++ -c -pipe -marm -mfpu=vfp -mtune=arm1176jzf-s -march=armv6zk -mabi=aapcs-linux -mfloat-abi=hard -O2 -std=c++0x -Wall -W -D_REENTRANT -fPIE -DQT_NO_SSL -DQT_NO_DEBUG -DQT_MULTIMEDIAWIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_XML_LIB -DQT_CORE_LIB -I../../vodas_desktop -I. -I/usr/local/qt5/include -I/usr/local/qt5/include/QtMultimediaWidgets -I/usr/local/qt5/include/QtMultimedia -I/usr/local/qt5/include/QtWidgets -I/usr/local/qt5/include/QtGui -I/usr/local/qt5/include/QtNetwork -I/usr/local/qt5/include/QtXml -I/usr/local/qt5/include/QtCore -I. -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -I/opt/vc/include/interface/vmcs_host/linux -I/usr/local/qt5/mkspecs/devices/linux-rasp-pi-g++ -o main.o ../main.cpp
所以...有什么想法嗎? 我不知道怎么了。 我的代碼在ubuntu和Windows上編譯,沒有此錯誤消息。
QString
默認參數無效:
QString label = NULL
NULL
只是0的宏,因此您實際上是說QString label = 0
。 QString
沒有定義從int
創建QString
的方法,這就是導致錯誤的原因-在大多數平台上,我猜想QString(const char *)
構造函數將通過從0
到const char *
的隱式轉換來調用const char *
。
您的pi似乎很難弄清楚如何隱式轉換0
。 將其更改為QString label = ""
, QString label = QString()
或類似的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.