2013-10-04 4 views
1

Je suis en train de compiler un programme (trouvé ici: http://sourceforge.net/projects/lisem/) en suivant les instructions dites par l'auteur. Cependant, lors de la compilation dans Qt Creator, il donne l'erreur:conversion invalide de 'QWidget *' à 'QwtPlotCanvas *' [-fpermissive]

invalid conversion from 'QWidget*' to 'QwtPlotCanvas*' [-fpermissive] 

pour cette ligne dans LisUImapplot.cpp

186 picker = new MyPicker(MPlot->canvas()); 

lien vers le fichier d'en-tête (LisUImapplot.h) se trouvent sur le même dossier comme le fichier cpp.

class MyPicker: public QwtPlotPicker 
{ 
public: 
    MyPicker(QwtPlotCanvas *canvas): 
     QwtPlotPicker(canvas) 
    { 
     setTrackerMode(AlwaysOn); 
    } 

    virtual QwtText trackerTextF(const QPointF &pos) const 
    { 
     QColor bg(Qt::white); 
     bg.setAlpha(100); 

     QwtPlotItemList list = plot()->itemList(QwtPlotItem::Rtti_PlotSpectrogram); 
     QwtPlotSpectrogram * sp = static_cast<QwtPlotSpectrogram *> (list.at(1)); 
     double z = sp->data()->value(pos.x(), pos.y()); 
     QString txt = ""; 
     if (z > -1e10) 
      txt.sprintf("%.3f", z); 
     QwtText text = QwtText(txt); 
     text.setColor(Qt::black); 
     text.setBackgroundBrush(QBrush(bg)); 
     return text; 
    } 
}; 

J'espère que vous pouvez m'aider à ce sujet. Je vous remercie!

J'utilise Qt 5.1.1 MinGW 32 bits et Qwt 6.1.0

+0

Quel est le type de retour de 'MPlot-> toile()'? Quel type a le pointeur 'picker'? –

Répondre

4

QwtPlot::canvas() retourne un QWidget. Votre constructeur MyPicker attend un paramètre de type QwtPlotCanvas.

Vous pouvez jeter un QwtPlotCanvas:

QwtPlotCanvas *canvas = qobject_cast<QwtPlotCanvas*>(MPlot->canvas()); 
if(canvas) 
{ 
    picker = new MyPicker(canvas); 
    ... 
} 
+0

Merci! Cela a vraiment aidé. – Mark

0

Pourquoi fais-tu constructeur?

MyPicker(QwtPlotCanvas *canvas): 
    QwtPlotPicker(canvas){} 

Dans l'ancienne version de Qwt était QwtPlotPicker :: QwtPlotPicker (toile de QwtPlotCanvas ); Dans le Qwt 6.1. est QwtPlotPicker :: QwtPlotPicker (parent QWidget *);

Vous devez faire

MyPicker(QWidget *canvas): 
    QwtPlotPicker(canvas){} 
Questions connexes