[gelöst] Widget in MainWindow einbinden

Alles rund um die Programmierung mit Qt
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Ziemlich chaotischer Thread.... also wenn ich dich richtig verstanden habe, hast du z.Z. ein MainWindow mit Tabs und darauf befindlichen Widgets im Designer zusammengeklickt. Da hast du z.B. eine QDoubleSpinBox raufgepeppt und dieser Instanz einen sinnvollen Namen (Property "objectName") gegeben.

Danach hast du doch gar nichts mehr mit den Tabs am Hut..:

Code: Alles auswählen

void MainWindow::irgendEinSlotOderSonstigeMethode()
{
  QDoubleSpinBox *box = findChild<QDoubleSpinBox*>("spinBoxName");
  Q_ASSERT(box);
  box->setValue(42);
}
oder....?
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

Nur weil ihr das alles gut drauf habt, müsst ihr noch lange nicht so unfreundlich und so unbehilflich sein, ihr müsst ja nicht antworten, es zwingt euch keiner. Wozu ist das Forum dann eigentlich da? Um andere zur Sau zu machen??

das ist mir schon klar dass es mit drag&drop gemacht wird. Dann ist zB ein LineEdit in einem Tab, und damit was anzufangen ist mein Problem. Oder wie ich einzelne Widgets verbinde usw. Naja egal, ich mit den tutorials fast durch, und mache jedes Beispiel mit und erweiter sie auch manchmal. Trotzdem danke für eure Antworten.

lg

nici
Hmm mir fällt nichts ein ^^
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Erstens war ich (fuer meine Verhaeltnisse) recht freundlich und zweitens:
Dann ist zB ein LineEdit in einem Tab, und damit was anzufangen ist mein Problem.
habe ich doch genau das beantwortet.. oder? Falls nicht wollen wir alle hier wissen, was _nicht_ klar ist...
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

dich meinte ich doch auch gar nicht damit solarix.
Mir ist nur unklar wie ich die Komponenten auf dem einem Tab mit den Komponenten auf dem anderen Tab verbinde.
In meinem Fall ist es ja so, dass ich separate Widgets in die Tabs einfügen möchte.

lg

nici
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ich möchte doch nur wissen mit welchem Befehl ich ein Widget in ein Tab einfüge, das ist alles. Ich hab mir jetzt das QT4 Buch von Jürgen Wolf bestellt. Vlt hilft mir das weiter.

Trotzdem danke an euch, auch wenn ich "etwas bescheuerte Fragen" gestellt habe, habt ihr trotzdem was geschrieben.

lg

nici
Hmm mir fällt nichts ein ^^
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Ich habe dir doch ein Code-Beispiel gegeben, das genau das macht.

Und dann wunderst du dich, wenn man unfreundlich wird, wenn du genau das selbe nochmal fragst...
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

nici hat geschrieben:ich möchte doch nur wissen mit welchem Befehl ich ein Widget in ein Tab einfüge, das ist alles.
Also den Code dazu hab ich dir auch schon mindestens einmal hingeschrieben ;)
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

Dannkkee, ich hab eure Beispiele ja auch angewendet und den Code wie ich es hatte gepostet und gefragt ob es so richtig sei, aber es kam keine Antwort darauf.

Das Beispiel von Upsala ist in der main() und weiss nicht wie ich es zB in meinem TabEins.cpp anwenden soll?? Ich werd jetzt mal einiges rumprobieren, danke. Wisst ihr ich muss das Projekt bis ende Januar fertig haben und bin noch ziemlich am Anfang, weil ich auf dem Gebiet völlig neu bin.

lg

nici
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

Also mit dem Code von Upsala kann ich leider nichts anfangen, weil ich meine TabWidgets ja im Designer in das MainWindow geschoben habe.
Ja ich weiss diese Frage nervt, aber ich habe ja noch immer keine Antwort bekommen.

Wie greife ich auf die Tabs zu, um z.B dem Button was daruf ist zu sagen, dass er eine Datei laden soll?

lg

nici
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ich hab euch mal an Bild angehängt, vlt versteht ihr dann was ich meine, thhhxxxx.

lg

nici
Dateianhänge
qtBild.jpg.tar.gz
(163.8 KiB) 130-mal heruntergeladen
Hmm mir fällt nichts ein ^^
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

warum packst denn die sachen in komplett neue dateien (ui´s) und nicht direkt in die tabs?
P.S.: Schau dir nochmal Layouts an... du solltest ggf ein Layout für die Widgets machen.

Auf die Tab- Elemente greifst dann einfach über

Code: Alles auswählen

ui.pbXYZ->wasAuchImmer() 
zu.


Andernfalls..... deine Widgets sind doch von QWidget abgeleitet. Du hast Klassen von dienen Widgets...

Code: Alles auswählen

class DUMMY : public QWidget
{
.
.
.
};//endclass

//in main Widget(das mitn Tabs)
#include DUMMY.h
...
DUMMY *meinWidget;

//void eineFunktion(QWidget *w);
eineFunktion(meinWidget);

... dein Tab hat die Fkt addTab
das heisst du kannst dein DUMMY Object überall da rein geben wo ein Widget erwartet wird als Übergabepara. Deine Klasse wird dann quasi auf den Typ Widget gecastet
Zuletzt geändert von AuE am 21. November 2008 08:38, insgesamt 1-mal geändert.
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

ich danke dir für diese hilfreiche Antwort, endlich. Naja mein Betreuer hat gesagt, dass ich extra Widgets machen soll, die wir dann in die Tabs packen werden. Ich werd morgen auf der Arbeit ausprobieren.Danke.

lg

nici
Hmm mir fällt nichts ein ^^
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

Hab da mal eben nen Snippet kurz zusammengehackt...

also... includiere einfach im MainWidget die Header Dateien deiner Widgets.
Dann machste im Konstruktor(oder ner InitFunktion wenn du die hast ) Folgendes:

ui.deinTabWidget->addWidget (new XYZ()/*das ist deinWidget was rein soll*/, "HALLO" /*der String der auf dem Tab stehen soll*/);


das haben dir aber auch die anderen schon geschrieben.... kannst ruhig auf die Jungs hören-die verstehen ihr Handwerk ;-)
siehe Upsala´s Posting
QTabWidget *wdg=new QTabWidget();
wdg->addTab(new QWidget(), "Test 1");
wdg->addTab(new QWidget(), "Test 2");
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

hi,

Ja sry Jungs. Aber so wie ihr das geschrieben habt, habe ich es nicht verstanden. Ihr müsst aber zugeben, dass AuE es gut erklärt hat ^^.

also ich hab das ganze so wie du geschrieben hast gemacht.

Code: Alles auswählen

#include "MainWindow.h"
#include "TabEins.h"
#include "TabZwei.h"
#include "TabDrei.h"

 using namespace std;

//konstruktor 
MainWindow::MainWindow(QMainWindow *parent) 
		:QMainWindow(parent)
	{
		setupUi(this);
	erstelleConnects();	
	QTabWidget*ui=new QTabWidget();
	ui.TabEins->addWidget(new TabEins(), "TabEins");
	ui.TabDrei->addWidget(new BFK(), "BildFehlerKoeffizient");
	ui.TabZwei->addWidget(new PhysParam(), "PhysikalischeParameter");
		
};
es kommen Fehlermeldungen (die ich wieder einmal nicht verstehe :( )

MainWindow.cpp: In constructor 'MainWindow::MainWindow(QMainWindow*)':
MainWindow.cpp:18: error: request for member 'TabEins' in 'ui', which is of non-class type 'QTabWidget*'
MainWindow.cpp:19: error: request for member 'TabDrei' in 'ui', which is of non-class type 'QTabWidget*'
MainWindow.cpp:19: error: expected type-specifier before 'BFK'
MainWindow.cpp:19: error: expected `)' before 'BFK'
MainWindow.cpp:20: error: request for member 'TabZwei' in 'ui', which is of non-class type 'QTabWidget*'
MainWindow.cpp:20: error: expected type-specifier before 'PhysParam'
MainWindow.cpp:20: error: expected `)' before 'PhysParam'
make: *** [MainWindow.o] Fehler 1





lg

nici
Hmm mir fällt nichts ein ^^
nici
Beiträge: 246
Registriert: 29. Oktober 2008 12:50

Beitrag von nici »

so ich konnte einige Fehler beheben.

Code: Alles auswählen

#include "includes.h"
#include "MainWindow.h"
#include "TabEins.h"
#include "TabZwei.h"
#include "TabDrei.h"


//konstruktor 
MainWindow::MainWindow(QMainWindow *parent) 
		:QMainWindow(parent)
	{
		setupUi(this);

	QTabWidget *ui=new QTabWidget();
	ui.TabEins->addWidget(new TabEins(), "TabEins");
	ui.TabDrei->addWidget(new TabDrei(), "BildFehlerKoeffizient");
	ui.TabZwei->addWidget(new TabZwei(), "PhysikalischeParameter");
		
}
Jetzt kommen nur noch die Fehlermeldungen:

MainWindow.cpp: In constructor 'MainWindow::MainWindow(QMainWindow*)':
MainWindow.cpp:15: error: request for member 'TabEins' in 'ui', which is of non-class type 'QTabWidget*'
MainWindow.cpp:16: error: request for member 'TabDrei' in 'ui', which is of non-class type 'QTabWidget*'
MainWindow.cpp:17: error: request for member 'TabZwei' in 'ui', which is of non-class type 'QTabWidget*'
make: *** [MainWindow.o] Fehler 1
Hmm mir fällt nichts ein ^^
Antworten