【发布时间】:2020-02-18 16:31:54
【问题描述】:
我尝试在 QT5 中使用 QwtPlotZoomer,但在其构造函数运行时出现段错误。
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 安装的包。我以前在 Qt4 中以这种方式使用过QwtPlotZoomers(使用 QWT 的 Qt4 版本),据我从文档中可以看出,它应该仍然可以在这里工作。
【问题讨论】:
-
canvas 是一个局部变量,会在会产生问题的对象完成后被移除,因此一个可能的解决方案是为该类制作一个 canvas 属性。
-
@eyllanesc 我最初将它作为成员变量,它会导致同样的崩溃。如果这有助于澄清崩溃的来源,我可以将其更改回来。
-
我没有说那是解决方案,但如果是另一个问题的原因