[Anfänger] 6x ein identisches Tab in QTabWidget erstellen

Alles rund um die Programmierung mit Qt
Antworten
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

[Anfänger] 6x ein identisches Tab in QTabWidget erstellen

Beitrag von Bang-Johansen »

Hallo,

folgendes Problem:

Ich benötige in 6 Tab Fenstern ein jeweils völlig gleiches Layout bestehend aus Checkboxen, Buttons , Comboboxen u.s.w.
Ich könnte naturlich für jedes Tab Fenster alles immer wieder neu erstellen, aber gibt es eine Möglichkeit, so ein Layout 1 mal zu erstellen
und dann auf 6 Tab Fenster zu übertragen?
Natürlich sollen die einzelnen Objekte in den TAB Fenster unabhängig sein.
Hintergrund ist, ich habe diverse Geräte an einer RS485 hängen, diese sind bis auf die Adresse alle gleich.

Wie kann ich so etwas am vernünftigsten und am einfachsten (Anfänger) erstellen?

Geht das mit einer Klasse und wie ?

Danke an alle

Bang-Johansen
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: [Anfänger] 6x ein identisches Tab in QTabWidget erstelle

Beitrag von DBGTMaster »

Du könntest ein eigenes Widget erstellen, indem du das QWidget ableitest, und auf diesem deine Elemente plazierst.
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

Re: [Anfänger] 6x ein identisches Tab in QTabWidget erstelle

Beitrag von Bang-Johansen »

Hallo,

Danke für den Tipp.
Das klingt logisch.

Allerdings habe ich soetwas noch nie gemacht.
Daher hätte ich ein paar Fragen:

- muß ich die Event Handler für Maus und Tastatu reimplementieren und wenn warum ?
( so steht es in meinem alten QT3 Buch)

Um die Buttons reinzubekommen, muß ich dann eine Methode erstellen, wo diese erzeugt werden und dann
diese Methode im Konstruktor aufrufen ??

Bang-Johansen
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: [Anfänger] 6x ein identisches Tab in QTabWidget erstelle

Beitrag von DBGTMaster »

Nein, du musst nun nicht irgendwie selber die Handlers schreiben..

Hab gerade kein Beispielcode, aber an einem Beispiel von 2 Eingabefelder, welche nebeneinander stehen sollen:

1.) Ich erstelle eine Widget, welche von QWidget abgeleitet wird.
2.) Ich erstelle private member _inputA, inputB
3.) Im Konstruktor plaziere ich die Elemente auf das QWidget (-> this), oder setze ein Layout auf das QWidget.
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

Re: [Anfänger] 6x ein identisches Tab in QTabWidget erstelle

Beitrag von Bang-Johansen »

Hallo, ich habe mal zum Testen was geschrieben:


test.h

Code: Alles auswählen

class AxisWidget : public QWidget
		{
		public:
			// Konstruktor
			AxisWidget ();
			// Destruktor
			~AxisWidget ();
			
			void NewWidget ();
		
		private:
			QPushButton	*Button;
			QGridLayout	*TestLayout;
			QWidget		*TestWidget;
		};
test.cpp

Code: Alles auswählen

AxisWidget::AxisWidget ()
	{
	NewWidget ();
	}
	
AxisWidget::~AxisWidget ()

	{
	}

void AxisWidget::NewWidget ()

	{
	Button = new QPushButton("Test");
	TestLayout = new QGridLayout ();
	TestLayout->addWidget(Button,0, 0);	
	TestWidget = new QWidget ();
	TestWidget->setLayout (TestLayout);
	TestWidget-> show();
	}
Benutzen tue ich die Klasse dann so:

Code: Alles auswählen

AxisXDeviceWidget   = new AxisWidget ();
Dieses Widget wird dann mit addTab in das Tab Fenster eingefügt.

Allerdings erscheint ein kleines zusätzliches extra Fenster, wo der Button drin ist.
Ich denke mal, ich darf das Layout nicht in ein neues QWidget (TestWidget) packen, sondern direkt in das AxisWidget.

Wie mache ich dass ???

(Bitte nicht lachen, mache sowas zum ersten mal ;-) )

Danke

Bang Johansen
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

Re: [Anfänger] 6x ein identisches Tab in QTabWidget erstelle

Beitrag von Bang-Johansen »

Hallo,
da haben wir wohl zur gleichen Zeit geschrieben.
"DBGTMaster"]Nein, du musst nun nicht irgendwie selber die Handlers schreiben..
3.) Im Konstruktor plaziere ich die Elemente auf das QWidget (-> this), oder setze ein Layout auf das QWidget.
Das mit dem this Operator habe ich mir schon gedacht, ich weiß nur nicht, wo und wie ich den einbauen soll.

Bang Johansen
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: [Anfänger] 6x ein identisches Tab in QTabWidget erstelle

Beitrag von DBGTMaster »

Hallo,

1.) Du must kein eigenes Widget erstellen (TestWidget), du hast bereits ein Widget erstellt (AxisWidget).
2.) setLayout musst du auf dein AxisWidget setzen.

Ohne getestet zu haben:

Code: Alles auswählen

AxisWidget::AxisWidget ()
   {
   Button = new QPushButton("Test");
   TestLayout = new QGridLayout ();
   TestLayout->addWidget(Button,0, 0);   
    setLayout (TestLayout);
   }
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

Re: [Anfänger] 6x ein identisches Tab in QTabWidget erstelle

Beitrag von Bang-Johansen »

Hallo,

Danke für Deinen Hinweis.

ich habe es erst mal so gemacht und es funktioniert soweit.

2 Fragen hätte ich allerdings noch:

1. Wenn ich das Programm per Konsole starte, kommt in der selben folgende Meldung:

QWidget::setLayout: Attempting to set QLayout "" on QWidget "", which already has a layout

Ist das nur ein Hinweis oder soll dies eine Fehlermeldung sein ?
Wie würde man das wegbekommen ?
Ich habe mal im Internet gesucht, die dortigen Probleme beziehen sich auf ein Layout in QMainwindow; für diesem Fall
mit QWidget habe ich nichts gefunden, da sich dies bei QMainwindow laut diesen Foren um einen Sonderfall handelt

2. setLayout (TestLayout);

ist mir nicht ganz klar.
Bedeutet dies, daß mit setLayout ein neues Layout direkt der neuen abgeleiteteten Klasse zugeordnet ist ?
Es wird ja so kein Objekt direkt angegeben.
Ist dies so was ähnliches wie der ->this Operator ?

mit freundlichen Grüßen

Bang Johansen
Bang-Johansen
Beiträge: 43
Registriert: 11. Juli 2011 22:51

Re: [Anfänger] 6x ein identisches Tab in QTabWidget erstelle

Beitrag von Bang-Johansen »

Hallo,

Frage Nr. 1 hat sich erledigt.

Die Ursache war, daß ich noch im alten Testcode noch ein Layout drin hatte, was
dort nichts mehr zu suchen sollte.

Allerdings habe ich eine weitere Frage:

Was muß ich jetzt bei connect ("Sender".... eintragen ?

Im Moment ist es so:

###
neue abgeleitete Klassem mit dem QPushbutton "Button" mit der Bezeichnung "test"
Den Button habe ich mal public gemacht.
Tabfenster = new test ();
##

Ich habe jetzt insgesamt in 6 Fenstern den QPushbutton Button.
Was trage ich jetzt bei "Sender" ein, damit ich auf diesem Tabreiter den zugehörigen Slot auslöse ?

Ein Tabfenster->Button funktioniert nicht, obwohl mir make den -> Operator vorgeschlagen hat.
Fehlermeldung:

deviceconfig.cpp:79:30: error: 'class QWidget' has no member named 'Button'

Suche im netz hat mich bisher noch nicht weitergebracht.

mit freundlichen Grüßen

Bang Johansen
Antworten