[gelöst] Verwendung mouse und Qpainter

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

[gelöst] Verwendung mouse und Qpainter

Beitrag von qtNiko »

hi,

ich steh leider schon wieder mal auf dem Schlauch mit folgenden Fehlermeldungen.

Ich hab ein QMainWindow, SimDesign, und ein Child-Widget vom Typ QDialog, ImgView.
Im QMainWindow gibt es u.a. ein QLabel für Grafikausgaben, in dem mit der Mouse Markierungen erfolgen sollen, was ich mit einem Eventfilter mache.
Im Child-Widget gibt es auch ein QLabel für andere Art von Grafikausgaben, wo auch mit der Mouse markiert werden soll, was ich durch ein mousePressEvent() im Child-Widget mache.
Die Codestruktur auf das Wesentliche reduziert ist - jetzt mit den relevanten includes:
Header-File von QMainWindow, ipcsimu.h:

Code: Alles auswählen

#include <QFile>
#include <stdio.h>
#include "ui_ipcsimu.h"  // fuer Mainwindow
...
#include "imgview.h"  // fuer Child-Widget

class SimDesign : public QMainWindow, private Ui::Simu_Qt4
{
	Q_OBJECT
	...
protected:
	bool eventFilter(QObject *obj, QEvent *ev);
...
private:
      ImgView *controlImages;
...
}
cpp-File von QMainWindow:

Code: Alles auswählen

#include <QtGui>
#include <QtCore> 
...
#include "ipcsimu.h"

SimDesign::SimDesign(QMainWindow *parent) : QMainWindow(parent)
{
	setupUi(this);
	...
controlImages = new ImgView(this);   // das ist das Child-Widget
...
}
...
// das Child-Widget soll durch einen Klick auf eine checkbox sichtbar werden:
void SimDesign::on_checkB_objSegm_stateChanged(void) {
	if (checkB_objSegm->isChecked()) {
		controlImages->show();	// sichtbar machen
		controlImages->raise();	// in den Vordergrund holen
		controlImages->activateWindow();	// hat den Fokus
	}
	else controlImages->hide();
}
...
// Eventfilter soll Mouse nur innerhalb graphView_scene verarbeiten:
bool SimDesign::eventFilter(QObject *obj, QEvent *event) {
  ...
    if (obj == graphView_scene) { 
// Behandlung der Mouse
...
}
else {
         // pass the event on to the parent class
         return QMainWindow::eventFilter(obj, event);
}
Child-Widget, Header-File imgview.h:

Code: Alles auswählen

#include <QtGui/QDialog>
#include "ui_imgview.h"

class ImgView : public QDialog, private Ui::ImgViewClass
{
    Q_OBJECT
...
private slots:
	...
private:
	void mousePressEvent(QMouseEvent *event);
...
QPixmap cbild;
}
Child-Widget, cpp-File imgview.cpp:

Code: Alles auswählen

#include "imgview.h"
void ImgView::mousePressEvent(QMouseEvent *event) {
	int x,y, val;
	x = event->x()-2;	// hier wird der erste Fehler gemeldet: Zeile 425	
...
}

void ImgView::overlay_edges(void) {
	...
	QPainter painter(&cbild);  // hier wird ein zweiter Fehler gemeldet: Zeile 280
...
}
Der erste Fehler, den mein Eclipse meldet ist:
  • /usr/local/Trolltech/Qt-4.3.2/include/QtGui/qwidget.h forward declaration of ‘struct QMouseEvent’ line 70
    invalid use of incomplete type ‘struct QMouseEvent’ line 425
Mit der Meldung "forward declaration ... line 70" kann ich gar nichts anfangen, da ein Header-File in der Qt-Bibliothek angegeben wird und als Ort des Fehlers der Programmname genannt wird, für den es keinen Quellcode gibt - das ist wohl Eclipse-spezifisch.
In der zweiten Zeile der Fehlermeldung verstehe ich nicht, was da "invalid" und "incomplete type" sein soll. Genau so eine Zeile habe ich auch in anderen cpp-Files, und dort ist sie ok.

Die zweite Fehlermeldung lautet:
  • variable ‘QPainter painter’ has initializer but incomplete type, line 280
Das QPixmap cbild ist im Header-File definiert. Was stimmt da nicht?

Früher hatte ich das, was jetzt ein Child-Widget ist, als QMainWindow. Die Zeilen, an denen jetzt Fehler gemeldet werden, sind identisch geblieben. Es muss etwas mit der Beziehung Parent- und Child-Widget zu tun haben, bloß was?

Wenn jemand Tipps hat, damit ich von meinem Schlauch runterkomme, sehr willkommen :?
Zuletzt geändert von qtNiko am 14. Februar 2010 00:33, insgesamt 2-mal geändert.
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ist es so schwer? Wenn man eine Klasse benutzen möchte sollte man dessen Header auch inkludieren, oder?
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Beitrag von qtNiko »

Ich hatte vor lauter Verkürzen die includes vorher nur nicht angegeben. Sie sind natürlich da, und ich habe sie in meinem ersten Posting jetzt auch ergänzt.

Es tut mir leid, ich sehe einfach den Knoten nicht :cry:
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich sehe immer noch keine includes von QPainter und QMouseEvent...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
qtNiko
Beiträge: 216
Registriert: 6. April 2007 21:26
Wohnort: München

Beitrag von qtNiko »

jetzt hat es geklickt! include <QtGui> hat gefehlt.

Vielen Dank :D
Gruß von qtNiko

Core i5 760, GT 240, Suse Linux11.3, Eclipse-CDT-Helios, QT4.4, QT-Integration
Antworten