Seite 1 von 1

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

Verfasst: 4. Februar 2013 19:15
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

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

Verfasst: 4. Februar 2013 21:50
von DBGTMaster
Du könntest ein eigenes Widget erstellen, indem du das QWidget ableitest, und auf diesem deine Elemente plazierst.

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

Verfasst: 4. Februar 2013 22:37
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

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

Verfasst: 4. Februar 2013 23:08
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.

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

Verfasst: 4. Februar 2013 23:09
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

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

Verfasst: 4. Februar 2013 23:14
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

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

Verfasst: 5. Februar 2013 08:57
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);
   }

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

Verfasst: 5. Februar 2013 20:18
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

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

Verfasst: 5. Februar 2013 20:35
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