1

著者の指示に従って、プログラムをコンパイルしようとしています (ここにあります: http://sourceforge.net/projects/lisem/ )。ただし、Qt Creator でコンパイルすると、次のエラーが発生します。

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 を使用しています

4

2 に答える 2

5

QwtPlot::canvas()は を返しますQWidget。コンストラクターは型パラメーターMyPickerを期待しています。QwtPlotCanvas

次のようにキャストできますQwtPlotCanvas

QwtPlotCanvas *canvas = qobject_cast<QwtPlotCanvas*>(MPlot->canvas());
if(canvas)
{
   picker = new MyPicker(canvas);
   ...
}
于 2013-10-04T09:40:45.100 に答える