首页 > 解决方案 > QT5 中的 QwtPlotZoomer 崩溃

问题描述

我试图QwtPlotZoomer在 QT5 中使用 a ,但是当它的构造函数运行时出现段错误。

class Qwt_widget : public QwtPlot
{
  Q_OBJECT

public:
  Qwt_widget(QWidget* parent = 0) :
    QwtPlot(parent),
    m_canvas()
  {
    QwtPlotZoomer zoomer(&m_canvas); // Crashes here
  }

private:
  QwtPlotCanvas m_canvas;
};

上面的小部件被添加到一个简单的主窗口中,以便创建它(完整代码在https://github.com/chrisburnham/Qwt_qt5_crash)。这里还有我添加到 QT creators 默认 pro 文件中的 QWT 行:

INCLUDEPATH += /usr/include/qwt
LIBS += -lqwt-qt5

我在 Ubuntu 18.04 上运行并安装了带有libqt5-default(5.9.5) 的 Qt5 和带有libqwt-qt5-dev(6.1.3) 的 QWT。我已经用 LDD 检查了我所有的库并查看了我正在使用的头文件,它们都来自与libqwt-qt5-dev. 我以前QwtPlotZoomers在 Qt4 中使用过这种方式(使用 QWT 的 Qt4 版本),据我从文档中可以看出,它应该仍然可以在这里工作。

标签: qtqt5qwt

解决方案


在您要求处理它之前,您需要将其分配QwtPlotCanvas给。请注意,QwtPlot::setCanvas()具有所有权,因此不要为画布使用成员变量。QwtPlotQwtPlotZoomer

但是由于您使用的是默认值QwtPlotCanvas而不是某些派生类,因此您可能只使用QwtPlot附带的画布:

QwtPlotZoomer zoomer(this->canvas()); // Should not crash here

推荐阅读