没有名为' setMargin'在' QwtPlotLayout' - 将Qt4.7转换为Qt5.8

时间:2017-03-13 14:17:30

标签: c++ qt qwt

我需要将Qt遗留代码从4.7转换为5.8 ,我在Qt Creator 4.2.1 Clang 7.0(Apple)64bit中有编译错误。我使用最新的Qwt 6.1.3

查看.cpp文件

#include "frmMainChart_UI.h"
#include <QHeaderView>
#include <qwt_plot_layout.h>
#include <qwt_legend.h>
#include "mpiDateScale.h"
#include "mpiPercentScale.h"

void frmMainChart_UI::setupUI(QWidget *parent_)
{
    frmMainTableViewTree_UI::setupUI(QMap<int, QString>(), false, parent_);
    delete frmMainTableViewTree_UI::tableCopy;
    delete frmMainTableViewTree_UI::table;

    chart = new mpiChart(widget);
    chart->setAxisScaleDraw(QwtPlot::xBottom, new mpiDateScale());
    chart->setAxisScaleDraw(QwtPlot::yLeft, new mpiPercentScale());
    chart->plotLayout()->setCanvasMargin(20);
    chart->plotLayout()->setMargin(20);  // BROKE convert Qt4 to Qt5
    chartZoomer = new mpiPlotZoomer(chart->canvas()); // BROKE convert Qt4 to Qt5
    chartLegend = new QwtLegend(chart);
    chart->insertLegend(chartLegend, QwtPlot::RightLegend);

    QLinearGradient grad(0, 0, 1, 1);
    grad.setCoordinateMode(QGradient::StretchToDeviceMode);
    grad.setColorAt(0, Qt::white);
    grad.setColorAt(1, QColor(220, 220, 220));

.cpp中的2个错误

../ src / ui / frmMainChart_UI.cpp:18:26:错误:没有名为&#39; setMargin&#39;在&#39; QwtPlotLayout&#39;     chart-&GT; plotLayout() - &GT; setMargin(20); // BROKE将Qt4转换为Qt5

../ src / ui / frmMainChart_UI.cpp:19:23:错误:没有匹配的构造函数用于初始化&#39; mpiPlotZoomer&#39;     chartZoomer = new mpiPlotZoomer(chart-&gt; canvas()); // BROKE将Qt4转换为Qt5

           ^

发出5个警告和2个错误 make:*** [frmMainChart_UI.o]错误1 06:58:25:流程&#34; / usr / bin / make&#34;退出代码2。 构建/部署项目mypersonalindex时出错(工具包:Desktop Qt 5.8.0 clang 64bit) 执行步骤&#34; Make&#34; 06:58:25:经过的时间:00:01。

Qwt 6.1.3文档具有成员函数http://qwt.sourceforge.net/class_qwt_plot_layout.html

void    setCanvasMargin (int margin, int axis=-1)

但是没有使用会员功能

setMargin

我的C ++技能非常有限,您是否看到任何可以将其从Qt4转换为Qt5的小调整。 ......那么替代品是什么?

查看mpiChart.h可能与canvas()错误

有关
#ifndef MPICHART_H
#define MPICHART_H

#include "qwt_plot.h"

class mpiChart : public QwtPlot
{
    Q_OBJECT

public:
    mpiChart(QWidget *parent_ = 0):
        QwtPlot(parent_)
    {}

public slots:
    void exportChart();
};

#endif // MPICHART_H

在mpiPlotZoomer.h中查找与canvas()错误相关

#ifndef MPIPLOTZOOMER_H
#define MPIPLOTZOOMER_H

#include <qwt_plot_zoomer.h>
#include <qwt_plot_canvas.h>  // JDL convert Qt4 to Qt5
#include <qwt_compat.h>  // JDL convert Qt4 to Qt5

class mpiPlotZoomer: public QwtPlotZoomer
{
public:
    mpiPlotZoomer(QwtPlotCanvas *canvas_):
        QwtPlotZoomer(canvas_, false)
    {
        setTrackerMode(AlwaysOn);
    }

    virtual QwtText trackerText(const QwtDoublePoint &pos_) const;
};

#endif // MPIPLOTZOOMER_H

1 个答案:

答案 0 :(得分:2)

由于你使用的Qt 4.7和你使用的Qwt 1.6.3的Qwt版本之间的setMargin功能被删除了,你别无选择:

  • 如果符合您的需要,请setMargin替换setCanvasMargin次来电
  • 或者,移除setMargin来电

尝试两者,并在显示GUI时查看哪一个看起来最好。

对于canvas()错误,如果没有看到mpiChartmpiPlotZoomer声明,很难说清楚。但是,我试一试:

canvas()过去常常返回QwtPlotCanvas*。对于Qwt的最新版本,它返回QWidget*。因此,如果您的mpiPlotZoomer构造函数需要QwtPlotCanvas*作为参数,那么您必须:

  • mpiPlotZoomer参数类型从QwtPlotCanvas*替换为QWidget*。如果编写mpiPlotZoomer类的人实际上没有使用QwtPlotCanvas成员/属性(他可能只用于育儿目的),可能会有效。
  • 或者将mpiPlotZoomer(chart->canvas());替换为mpiPlotZoomer( qobject_cast<QwtPlotCanvas*>( chart->canvas() ) );,这样可以正常工作。