Seite 1 von 1

Subwidget auf einem Hauptwidget anzeigen

Verfasst: 17. November 2011 22:47
von zinaspi
Hallo Qt-User

vorweg ich habe früher mal ein wenig mit Qt3 programmiert.
und jetzt wollte ich mal ein wenig in Qt4 reinschnuppern.

Nur habe ich jetzt schon das erste Problem.
Früher habe ich (wenn es sich anbot) meine Projekte gerne
in Module aufgeteilt.

Sprich ein QWidget als Hauptwidget erstellt
und Klassen von Qt-Elementen abgeleitet (falls notwendig)
und die dann in das Hauptwidget reingehangen.

Nun ist das Ergebniss nicht das was ich erwartet habe.
es wird ohne Fehlermeldungen und Warnugen kompiliert und auch
ausgeführt.

Ich sehe auch mein grünes Hauptwidget
und der Exit-Button funktioniert auch
soweit so gut.

Aber wo ist das blaue Subwidget (Klasse zweitWidget)
was auf dem grünen Hauptwidget liegen sollte

Hier mal mein main.cpp

Code: Alles auswählen

#include <QApplication>
#include "hauptWidget.h"

int main(int argc, char** argv){
    QApplication *app = new QApplication(argc, argv);
    hauptWidget *haupt = new hauptWidget();
    haupt->show();
    return app->exec();
}
die Headerdatei vom Hauptwidget

Code: Alles auswählen

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include "zweitWidget.h"

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

protected slots:
	void ok();

private:
	zweitWidget *neueWidget;
};
die cpp-Datei vom Hauptwidget

Code: Alles auswählen

#include "hauptWidget.h"

hauptWidget::hauptWidget(QWidget *parent):QWidget(parent){
	// Größe und Position für HauptWidget angeben
	this->setGeometry(30,30,400,400);
	
	// HauptWidget grün einfärben
	this->setPalette(QPalette(QColor(50,200,50)));
	
	int x = 2;
	// Subwidget anlegen
	neueWidget = new zweitWidget(x,this);
	
	// QButton anlegen und einrichten
	QPushButton *knopf = new QPushButton("Exit", this);
	knopf->setGeometry(20,300,50,20);
	connect (knopf, SIGNAL(clicked()),SLOT(ok()));
}

void hauptWidget::ok(){ qApp->quit(); }
die Headerdatei vom Subwidget (zweitWidget)

Code: Alles auswählen

#include <QWidget>

class zweitWidget:public QWidget{
	Q_OBJECT
public:
	zweitWidget(int zahl, QWidget *parent=0);

private:
	int _zahl;

};
die cpp-Datei vom Subwidget (zweitWidget)

Code: Alles auswählen

#include "zweitWidget.h"

zweitWidget::zweitWidget(int zahl, QWidget *parent):QWidget(parent){
	_zahl = zahl;
	
	// Größe und Position für SubWidget angeben
	// Bezugsystem ist das Hauptwidget
	this->setGeometry(50,50,50,50);

	// SubWidget blau einfärben
	this->setPalette(QPalette(QColor(50,50,200)));
}
Warum wird das blaue subwidget nicht angezeigt ?

Besten Dank im vorraus

gruss zinaspi

Re: Subwidget auf einem Hauptwidget anzeigen

Verfasst: 18. November 2011 08:30
von solarix

Code: Alles auswählen

zweitWidget::zweitWidget(int zahl, QWidget *parent):QWidget(parent){
   _zahl = zahl;
   ..
   this->setGeometry(50,50,50,50);
..
   this->setPalette(QPalette(QColor(50,50,200)));

  this->setAutoFillBackground(true);
}
Bei deiner Erfahrung ist es ein ganz guter Weg, mal mit dem Designer herumzuspielen und die Dinge vorher dort auzuprobieren. Wenn du im Designer ein QWidget in einem anderen platzierst, wirst du zweifellos erkennen, dass es transparent ist. Wenn du dann die Properties des Childs durchgehst, wird dir dann schnell auffallen, dass "autoFillBackground" auf "false" steht.. und damit ist dann klar, was du im Code schreiben musst (ohne auch nur einen Blick in die Doku geworfen zu haben).

Kleiner Hinweis noch.. mich stört irgendwie immer, wenn jemand unnötigerweise Pointer verwendet:

Code: Alles auswählen

int main(int argc, char** argv)
{
    QApplication  app(argc, argv);
    hauptWidget  haupt;
    haupt.show();
    return app.exec();
}
ist doch hübscher, oder? :wink:

hth..

Re: Subwidget auf einem Hauptwidget anzeigen

Verfasst: 18. November 2011 16:13
von zinaspi
Hallo solaris

Erst mal vielen vielen Dank.
So funktioniert es mit

Code: Alles auswählen

this->setAutoFillBackground(true)
bin irgendwie erleichtert
Danke

Beim Stichwort Qt-Designer hmmmmm....
Ich bin nicht ganz so der Freund von dem Teil

hab den Qt-Designer sogar schon installiert.
aber ich hab es noch nicht mal geschaft damit
das basisWidget grün einzufärben.

mal schauen vielleicht finde ich ein paar nette
Howto's

und Ohne die Zeigerei im main
sieht's auch gut

Nochmals vielen Dank
gruss zinaspi