qt creator canvas和setlinewidth问题

时间:2016-09-06 06:21:57

标签: c++ qt canvas

我使用" canvas"使用" SetLineWidth"参数。

我想,这是由创建继承引起的,或者可能是由于库安装造成的。我已经安装了qwt库,并且没有问题。

我想,最好在这里写下代码以使其更加具体和有用:

#include <qwt/qwt_plot.h>
#include <qwt/qwt_plot_marker.h>
#include <qwt/qwt_plot_curve.h>
#include <qwt/qwt_legend.h>
#include <qwt/qwt_series_data.h>
#include <qwt/qwt_plot_canvas.h>
#include <qwt/qwt_plot_panner.h>
#include <qwt/qwt_plot_magnifier.h>
#include <qwt/qwt_text.h>
#include <qwt/qwt_math.h>
#include <qwt/qwt_plot_renderer.h>
#include <math.h>
#include <qprinter.h>
#include <qprintdialog.h>
#include <QMouseEvent>

#include "plot.h"

Plot::Plot(QWidget *parent, char *titel, int bufSize, bool fixedScaleX, bool fixedScaleY,
           double minX, double maxX, double minY, double maxY,
           bool displayScaleX, bool displayScaleY,
           char* textScaleX, char* textScaleY) : QwtPlot(parent) {

mY = (QwtPlotMarker*) 0;
setAutoFillBackground(true);
setPalette(QPalette(QColor(165, 193, 228)));

QwtText title(titel);
title.setFont(QFont("Arial", 11));
setTitle(title);

if(fixedScaleX) {
    setAxisScale(xBottom, minX, maxX);
}

if(fixedScaleY) {
    setAxisScale(yLeft, minY, maxY);
}

if(displayScaleX) {
    enableAxis(xBottom, true);
    if(textScaleX[0] != '\0') {
        QwtText xAxis(textScaleX);
        xAxis.setFont(QFont("Arial", 11));
        setAxisTitle(xBottom, xAxis);
    }
} else {
    enableAxis(xBottom, false);
}

if(displayScaleY) {
    enableAxis(yLeft, true);
    if(textScaleY[0] != '\0') {
        QwtText yAxis(textScaleY);
        yAxis.setFont(QFont("Arial", 11));
        setAxisTitle(yLeft, yAxis);
    }
} else {
    enableAxis(yLeft, false);
}

// canvas
canvas()->setLineWidth(3); // Problem is here
canvas()->setFrameStyle(QFrame::Box | QFrame::Plain);//Problem is here
canvas()->setBorderRadius(15);//Problem is here

QPalette canvasPalette(Qt::black);
canvasPalette.setColor(QPalette::Foreground, QColor(133, 190, 232));
canvas()->setPalette(canvasPalette);
}

错误是:

'class QWidget' has no member named 'setLineWidth'
'class QWidget' has no member named 'setFrameStyle'
'class QWidget' has no member named 'setBorderRadius'

代码正在进行,。我在上面提到了问题所在。我试图自己解决这个问题,但我无法弄清楚问题导致的原因。

如果有任何建议,我很高兴知道这一点。

提前致谢..

1 个答案:

答案 0 :(得分:0)

您的类是QwtPlot的子类,因此canvas()是QwtPlot :: canvas(),它返回指向成员画布的QWidget *。根据文档,默认画布是QwtPlotCanvas。

您可以从返回的QWidget *转换为QwtPlotCanvas,但是您应该检查类型是否正确:

QwtPlotCanvas * my_canvas = dynamic_cast<QwtPlotCanvas *>(canvas());
if(my_canvas)
{
  my_canvas->setLineWidth(3); 
  // etc
}