Seite 1 von 1

[solved] Kompilierfehler bei QToolButton Vorwärtsdeklaration

Verfasst: 29. Dezember 2009 22:08
von RogerWilco
Hallo,
beim Versuch das Programmierbeispiel "Plotter" aus "C++ GUI Programmierung mit Qt 4" (Dt. Ausgabe ab S. 169) nachzuprogrammieren (im ersten Anlauf erstmal abzutippen) bekomme ich direkt am Anfang folgende Fehlermeldung:

Code: Alles auswählen

/media/disk/NvhTool/plotter.cpp:12: error: invalid use of incomplete type ‘struct QToolButton’

Code: Alles auswählen

#include "plotter.h"

Plotter::Plotter(QWidget *parent) :
    QWidget(parent)
{
    setBackgroundRole(QPalette::Dark);
    setAutoFillBackground(true);
    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    setFocusPolicy(Qt::StrongFocus);
    RubberBandIsShown = false;

    ZoomInButton = new QToolButton(this);        // hier stimmt was nicht!
    ZoomInButton->setIcon(QIcon(":/Button_zoom_in.png"));
    ZoomInButton->adjustSize();
    connect(ZoomInButton, SIGNAL(clicked()), this, SLOT(zoomIn()));

    ZoomOutButton = new QToolButton(this);
    ZoomOutButton->setIcon(QIcon(":/Button_zoom_in.png"));
    ZoomOutButton->adjustSize();
    connect(ZoomOutButton, SIGNAL(clicked()), this, SLOT(zoomOut()));

    setPlotSettings(cPlotSettings());

}
im Header:

Code: Alles auswählen

/media/disk/NvhTool/plotter.h:11: error: forward declaration of ‘struct QToolButton’

Code: Alles auswählen

#ifndef PLOTTER_H
#define PLOTTER_H

#include <QWidget>

#include <QMap>
#include <QPixmap>
#include <QVector>


class QToolButton;         // hier stimmt was nicht!!! Zeile 11
class PlotSettings;


class Plotter : public QWidget
{
Q_OBJECT
public:
    Plotter(QWidget *parent = 0);

    void setPlotSettings(const PlotSettings &settings);
    void setCurveData (int id, const QVector<QPointF> &data);
    void clearCurve(int Id);
    QSize minimumSizeHint() const;
    QSize sizeHint() const;



signals:

public slots:

    void zoomIn();
    void zoomOut();

protected:
    void paintEvent(QPaintEvent *event);
    void resizeEvent(QResizeEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
    void keyPressEvent(QKeyEvent *event);
    void wheelEvent(QWheelEvent *event);


private:
    void updateRubberBandRegion();
    void refreshPixmap();
    void drawGrid(QPainter *painter);
    void drawCurves(QPainter *painter);

    enum {Margin = 50};

    QToolButton *ZoomInButton;
    QToolButton *ZoomOutButton;
    QMap <int, QVector<QPointF> >CurveMap;
    QVector<PlotSettings> ZoomStack;
    int CurZoom;
    bool RubberBandIsShown;
    QRect RubberBandRect;
    QPixmap Pixmap;

};
Der Fehler wiederholt sich entsprechen auch weiter unten immer wieder, wenn auf den Button zugegriffen wird...
Ich halte das erstmal für Folgefehler...

Hat jemand eine Idee?
Liegt das an der Einbindung externer Resourcen?
Eigentlich müsste doch schon eine Klasse QToolButton existieren, oder?

Verfasst: 29. Dezember 2009 22:23
von upsala
Wie wärs mal mit einem

Code: Alles auswählen

#include <QToolButton>
?

Verfasst: 29. Dezember 2009 22:46
von RogerWilco
Mhh...
das scheint zu helfen. Danke.
Habe ich vorhin nicht getestet, weil der Autor (und der arbeitet wohl für Qt / Nokia) auch das include weggelassen hat und QToolButton doch von QWidget erbt, oder?
Und QWidget ist schon eingebunden...

Allerdings scheinen dort noch einige andere Haken zu kommen. Etwas enttäuschend für ein Lehrbuch. Vielleicht hat sich das aber auch mit der neuen Qt Version geändert...