2013-10-04 107 views
1

我試圖編譯一個程序(在這裏找到:http://sourceforge.net/projects/lisem/)按照作者說的說明。然而,在Qt Creator中編譯時,它給人的錯誤:從'QWidget *'到'QwtPlotCanvas *'的無效轉換[-fpermissive]

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

此行LisUImapplot.cpp

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

鏈接到它的頭文件(LisUImapplot.h)可以在同一文件夾中找到作爲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; 
    } 
}; 

我希望你能幫助我解決這個問題。謝謝!

我使用Qt 5.1.1 MinGW的32位和QWT 6.1.0

+0

什麼是返回類型'MPlot->畫布()'的?什麼類型有'picker'指針? –

回答

4

QwtPlot::canvas()返回QWidget。您的MyPicker構造函數期望QwtPlotCanvas類型參數。

你可以將它轉換爲一個QwtPlotCanvas

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

謝謝!這真的有幫助。 – Mark

0

你爲什麼這樣做的構造函數?

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

在舊版本的QWT是QwtPlotPicker :: QwtPlotPicker(QwtPlotCanvas 帆布); 在Qwt 6.1中。是QwtPlotPicker :: QwtPlotPicker(QWidget * parent);

你要做

MyPicker(QWidget *canvas): 
    QwtPlotPicker(canvas){} 
相關問題