c++ - 从 'QWidget*' 到 'QwtPlotCanvas*' [-fpermissive] 的无效转换

标签 c++ qt qwt

我正在尝试按照作者所说的说明编译程序(可在此处找到:http://sourceforge.net/projects/lisem/)。但是在Qt Creator中编译时,报错:

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

对于 LisUImapplot.cpp 中的这一行

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

可以在与 cpp 文件相同的文件夹中找到其头文件 (LisUImapplot.h) 的链接。

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

最佳答案

QwtPlot::canvas()返回一个 QWidget。您的 MyPicker 构造函数需要一个 QwtPlotCanvas 类型参数。

您可以将其转换为 QwtPlotCanvas:

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

关于c++ - 从 'QWidget*' 到 'QwtPlotCanvas*' [-fpermissive] 的无效转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19177394/

相关文章:

qt - 为什么QML TabButton的x位置是负数?

qt - 如何在 Windows 上构建 Qwt

qt - 无法在 Qt 中链接 qwt

c++ - Qt 5.3 信号和槽、简单函数和 Lambda 表达式

qt - 如何在 Qt 退出时进行清理

c++ - 在 Mac OS X 上使用 Qwt

c++ - 使用坐标空间和变换滚动和缩放增强型 Windows 图元文件

c++ - 一个类可以在同一个命名空间中拥有另一个同名的成员吗?

C++变量声明

c++ - clang 给我警告标志更改,但是代码仍然会产生正确的输出