在QT5中的QwtPlotZoomer上崩溃



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

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创建者默认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一起安装的软件包。我以前在 Qt4(使用 Qt4 版本的 QWT(中以这种方式使用过QwtPlotZoomers,据我从文档中可以看出,它应该在这里仍然有效。

您需要先将QwtPlotCanvas分配给QwtPlot,然后再要求QwtPlotZoomer对其进行处理。请注意,QwtPlot::setCanvas(( 拥有所有权,因此不要对画布使用成员变量。

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

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

相关内容

  • 没有找到相关文章

最新更新