2017-03-13 4 views
1

J'ai besoin de convertir le code ancien Qt de 4.7 à 5.8, j'ai une erreur de compilation dans Qt Creator 4.2.1 Clang 7.0 (Apple) 64bit. J'utilise le dernier Qwt 6.1.3Aucun membre nommé 'setMargin' dans 'QwtPlotLayout' - Convertir Qt4.7 à Qt5.8

Recherche dans le fichier .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)); 

2 erreurs dans Cpp

../src/ui/frmMainChart_UI.cpp:18 : 26: erreur: aucun membre nommé 'setMargin' dans 'QwtPlotLayout' chart-> plotLayout() -> setMargin (20); // Broke convertir Qt4 à QT5

../src/ui/frmMainChart_UI.cpp:19:23: erreur: aucun constructeur correspondant pour l'initialisation de la toile 'mpiPlotZoomer' chartZoomer = new mpiPlotZoomer (chart-> ()); // Broke convertir Qt4 à QT5

  ^

5 avertissements et 2 erreurs générées make: *** [frmMainChart_UI.o] Erreur 1 06:58:25: Le processus «/usr/bin/make "sorti avec le code 2. Erreur lors de la construction/du déploiement du projet mypersonalindex (kit: Desktop Qt 5.8.0 clang 64bit) Lors de l'exécution de l'étape" Make " 06:58:25: Temps écoulé: 00:01.

Le Qwt 6.1.3 Docs a la fonction de membre http://qwt.sourceforge.net/class_qwt_plot_layout.html

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

Mais aucune fonction de membre utilisés

setMargin 

Mon C++ compétences est assez limitée, ne vous voyez des modifications mineures qui pourrait convertir cela de Qt4 à Qt5. ... alors quel est le remplacement?

En regardant mpiChart.h concerne probablement la toile() erreur

#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 

Et regardant dans mpiPlotZoomer.h se rapporte à une erreur de toile()

#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 
+0

Quelle version de Qwt utilisiez-vous avec Qt 4.7? – jpo38

+0

Etrange, Qwt avec Qt 4.7 semble être Qwt 5.5.5 à partir de 2011, (mais la dernière Qwt a cette version 1.6.3 qui est maintenant installée avec Qt5.8) – bullflag

+0

La dernière version de qwt est 6.1.3, pas 1.6.3: http://qwt.sourceforge.net/index.html – jpo38

Répondre

2

Comme la fonction setMargin a été supprimée entre Qwt version que vous utilisiez pour Qt 4.7 et Qwt 1.6.3 que vous utilisez avec 5.8, vous n'avez pas d'autre choix que:

  • Remplacer setMargin appels par setCanvasMargin si cela correspond à vos besoins
  • Ou, supprimer setMargin appels

Essayez les deux, et de voir que l'on regarde les meilleurs lors de l'affichage de l'interface graphique. Pour l'erreur canvas(), il est difficile de dire sans voir la déclaration mpiChart et mpiPlotZoomer.Cependant, je vais essayer:

canvas() utilisé pour retourner un QwtPlotCanvas* dans le passé. Pour les versions récentes de Qwt, il renvoie un QWidget*. Donc, si votre constructeur mpiPlotZoomer attend un QwtPlotCanvas* en tant que paramètre, vous devrez:

  • Remplacer les paramètres de type de mpiPlotZoomerQwtPlotCanvas* par QWidget*. Peut fonctionner si le type qui a écrit la classe mpiPlotZoomer n'utilise pas réellement et QwtPlotCanvas membres/attributs (il peut seulement l'utiliser à des fins parentales)
  • Ou remplacer mpiPlotZoomer(chart->canvas()); par mpiPlotZoomer(qobject_cast<QwtPlotCanvas*>(chart->canvas())); qui fonctionnera très bien.