Probleme mit Signal & Slots



  • Hallo zusammen!

    ich habe folgende Klasse:

    class MyZoomer: public QwtPlotZoomer, public QObject
    {	
    	Q_OBJECT
    	public:
        MyZoomer(QwtPlotCanvas* canvas):
    			QwtPlotZoomer(canvas)
    			{
    				setTrackerMode(QwtPicker::AlwaysOn);
    
    #if QT_VERSION < 0x040000
    	setMousePattern(QwtEventPattern::MouseSelect1,
    													Qt::RightButton, Qt::ControlButton);
    #else
    	setMousePattern(QwtEventPattern::MouseSelect2,
    													Qt::RightButton, Qt::ControlModifier);
    #endif
    	setMousePattern(QwtEventPattern::MouseSelect3,
    													Qt::RightButton);
    			}
    
    	protected:
    		virtual QwtText trackerText( const QwtDoublePoint& p ) const 
    		{
    			QwtText t( QwtPlotPicker::trackerText( p ));
    
    #if QT_VERSION >= 0x040300
    			QColor c(Qt::black);
    			c.setAlpha(180);
    			t.setBackgroundBrush( QBrush(c) );
    #endif
    			return t;
    		}
    	private slots:
    		void setZoomModeEnabled();
    };
    

    ich will der Klasse einen neuen Slot hinzufügen. Dazu benötige ich den Macro Q_OBJECT und die Klasse muss von QObject abgeleitet sein. Mache ich dass,(siehe oben) bekomme ich folgende Fehlermeldung:

    MyZoomer.h:25: Warnung: direkte Basis »QObject« ist in »MyZoomer« durch Mehrdeutigkeit unzugänglich
    

    ich kann mit der Fehlermeldung nichts anfangen, kann mir bitte jemand sagen, was das heißt, bzw. was ich ändern muss, damit ich meiner Klasse eigene Slots hinzufügen kann?



  • du kannst keine mehrfachvererbung mit qobjects durchführen. du kannst von maximal einem qobject ableite und dieses muss in der vererbungsliste ganz vorne stehen.

    wie das bei qwt organisiert ist, weiß ich nicht. wenn qwtplotzoomer von qobject abgeleitet ist, brauchst du keine weitere ableitung von qobject. wenn es das nicht ist, reicht es aus, wenn du qobject vor qwtplotzoomer in der vererbungsliste stellst.



  • danke erstmals für die schnelle antwort

    QwtPlotZoomer ist nicht von QObject abgeleitet.

    Wenn ich die Vererbungsliste vertausche hat dies keinerlei Auswirkungen. immer noch der gleiche fehler



  • class QWT_EXPORT QwtPlotZoomer: public QwtPlotPicker
    ist ein
    class QWT_EXPORT QwtPlotPicker: public QwtPicker
    und über
    class QWT_EXPORT QwtPicker: public QObject, public QwtEventPattern
    ein QObject

    Aber über
    class QWT_EXPORT QwtPlotZoomer: public QwtPlotPicker
    {
    Q_OBJECT
    ...

    kann man auch bereits sehen, dass QwtPlotZoomer ein QObject sein muss wegen dem Q_OBJECT

    => einfach das QObject weglassen, aber Q_OBJECT selbstverständlich schreiben, sonst werden vom MOC ja keine Funktionen erzeugt. Und sicherstellen dass eben der MOC-Schritt auch im Build-Prozess drinnen ist.

    Viel Erfolg


Anmelden zum Antworten