我正在尝试在 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