[gelöst]Wieso wird "resizeEvent" nicht angesprunge
[gelöst]Wieso wird "resizeEvent" nicht angesprunge
Hi,
ich habe mal wieder ein Problem....!
Ich habe ein Widget, welches ich von QWidget geerbt habe.
Ich habe es per QTDesigner erstellt, besser gesagt habe ich die Vorlage von "upsala" (danke nochmal) an ein MainWindow geändert.
Ich habe es per QTDesigner so erstellt, dass wenn ich die größe des MainWindows ändere, sich die Elemente darin ändern, also verankert.
Jedoch wenn ich mal den Debugger "anhaue" dann wird da beim Größer, oder Kleiner Ziehen des Fensters nicht in die "resizeEvent" Methode gesprungen...!
Gibt es da etwas zu beachten?
Kann mir jemand helfen?
Bye ..-..
ich habe mal wieder ein Problem....!
Ich habe ein Widget, welches ich von QWidget geerbt habe.
Ich habe es per QTDesigner erstellt, besser gesagt habe ich die Vorlage von "upsala" (danke nochmal) an ein MainWindow geändert.
Ich habe es per QTDesigner so erstellt, dass wenn ich die größe des MainWindows ändere, sich die Elemente darin ändern, also verankert.
Jedoch wenn ich mal den Debugger "anhaue" dann wird da beim Größer, oder Kleiner Ziehen des Fensters nicht in die "resizeEvent" Methode gesprungen...!
Gibt es da etwas zu beachten?
Kann mir jemand helfen?
Bye ..-..
Zuletzt geändert von JoseMan am 11. Juni 2009 09:55, insgesamt 1-mal geändert.
So, vielleicht kann mir hiermit jemand einen Tipp geben:
Folgendes:
liefert etwas anderes als das hier:
Wie kann das sein?
Hab ich ein Brett vorm Kopf?

Folgendes:
Code: Alles auswählen
MyWidget::MyWidget(QWidget* parent)
: QWidget(parent)
{
int w(parent->width());
int h(parent->height());
}
Code: Alles auswählen
MyWidget::MyWidget(QWidget* parent)
: QWidget(parent)
{
int w(width());
int h(height());
}
Hab ich ein Brett vorm Kopf?
Zuletzt geändert von JoseMan am 8. Juni 2009 23:56, insgesamt 2-mal geändert.
Okay, hier mal der gesamte Code (vereinfacht):
"getRenderWidget()" liefert einen "QWidget" zurück, indem ich zeichnen möchte.
Hier die Headerdatei:
Hier die Cpp-datei:
"int test(1001)" habe ich zu debugg-Zwecken geschrieben.
Die Main.cpp datei:
Wenn ich nun ein Breakpoint in die "resizeEvent"-Methode setze, wird der nie angesprungen.
Was mache ich falsch??
Danke für jeden Tipp.
Code: Alles auswählen
class MainQTWindow : public QMainWindow,Ui::MainWindow
{
public:
MainQTWindow(QWidget* parent=0);
~MainQTWindow(void);
QWidget* getRenderWidget();
};
Hier die Headerdatei:
Code: Alles auswählen
class MyRenderWidget : public QWidget
{
public:
MyRenderWidget(QWidget* parent);
~MyRenderWidget(void);
void resizeEvent(QResizeEvent* e);
};Code: Alles auswählen
MyRenderWidget::MyRenderWidget(QWidget* parent)
: QWidget(parent)
{
}
MyRenderWidget::~MyRenderWidget(void)
{
}
void MyRenderWidget::resizeEvent(QResizeEvent* e)
{
int test(1001);
}Die Main.cpp datei:
Code: Alles auswählen
int _tmain(int argc, _TCHAR* argv[])
{
QApplication app(argc, argv);
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
MainQTWindow mainWindow;
MyRenderWidget widget(mainWindow.getRenderWidget());
mainWindow.show();
return app.exec();
}Was mache ich falsch??
Danke für jeden Tipp.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Aha, okay.... leider bin ich im Moment nicht dahaim um das zu testen,
aber:
?? 
aber:
Code: Alles auswählen
MainQTWindow mainWindow;
MyRenderWidget widget(mainWindow.getRenderWidget());
widget.show(); ///<---- !!!!
mainWindow.show();
das widget.show() steht in deinem oberen Beitrag nicht.
Und
Erstellt ein MyRenderWidget mit mainWindow.getRenderWidget() als parent!
Wenn dann das MyRenderWidget in keinem Layout liegt - weshalb sollte es bei einem resize des parent ein resizeEvent empfangen?
Und anstatt einer Zuweisung im resizeEvent (in test(1001)) wäre sicherlich zum schnellen sehen ein qDebug() << "MyRenderWidget::resizeEVent()"; nicht schlecht. Sieht man schneller als mit dem Debugger.
Und
Code: Alles auswählen
MyRenderWidget widget(mainWindow.getRenderWidget());Wenn dann das MyRenderWidget in keinem Layout liegt - weshalb sollte es bei einem resize des parent ein resizeEvent empfangen?
Und anstatt einer Zuweisung im resizeEvent (in test(1001)) wäre sicherlich zum schnellen sehen ein qDebug() << "MyRenderWidget::resizeEVent()"; nicht schlecht. Sieht man schneller als mit dem Debugger.
Nein, das
habe ich hinzugefügt. Es sollte eine Frage sein.
ok, was ich da mit "mainWindow.getRenderWidget()" zurück bekomme ist in einem Layout. Ich möchte eben für dieses QWidget (*::getRenderWidget()) die "resizeEvent()"-Methode überschrieben!
Code: Alles auswählen
widget.show();ok, was ich da mit "mainWindow.getRenderWidget()" zurück bekomme ist in einem Layout. Ich möchte eben für dieses QWidget (*::getRenderWidget()) die "resizeEvent()"-Methode überschrieben!
Du kannst dich in das resizeEvent einhängen (per eventFilter) aber nicht von außen überschreiben. Das machst du bitte in einer eigenen abgeleiteten Klasse.
Und auch wenn das parent in einem Layout hängt - dein MyRenderWidget-Objekt aus main() tut es nicht. Und genau darum geht es. Sende doch einfach deinem widget ein freundliches resize..
Dann hast du dein angesprungenes reizeEvent().
Oder setze endlich einen eventfilter auf das parentWidget() im Konstruktor und implementier eventFilter() in MyRenderWidget. Da kannst du dann resizen wie es dein parent vorgibt.
Grüße
Franz
Und auch wenn das parent in einem Layout hängt - dein MyRenderWidget-Objekt aus main() tut es nicht. Und genau darum geht es. Sende doch einfach deinem widget ein freundliches resize..
Code: Alles auswählen
widget.resize(100, 200);Oder setze endlich einen eventfilter auf das parentWidget() im Konstruktor und implementier eventFilter() in MyRenderWidget. Da kannst du dann resizen wie es dein parent vorgibt.
Grüße
Franz