zugriff auf ererbte Slots eines designer-Formulars

Alles rund um die Programmierung mit Qt
Antworten
markusk21
Beiträge: 9
Registriert: 17. August 2006 02:50

zugriff auf ererbte Slots eines designer-Formulars

Beitrag von markusk21 »

Hallo.
Ich habe ein Formular, das mir einfache Adressdaten darstellt. Ich möchte nun, dass der Vorwärts-Button(QPuschButton) auf disabled gesetzt wird, wenn der letzte Datensatz erreicht wird. Außerdem soll (wenn das disable klappt) der Zurück-Button enabled werden.

Code: Alles auswählen

	if(index == 0)
		ui.zurueckButton.setDisabled(TRUE);
	if(index != adressenliste.count()-1)
		ui.vorwaertsButton.setEnabled(TRUE);
Leider meldet mir der Compiler:

Code: Alles auswählen

adressfenster.cpp: In member function `void AdressFenster::on_vorwaertsButton_clicked()':
adressfenster.cpp:101: Fehler: Abfrage des Elementes »setDisabled« in »((Ui_MainWindow*)(((Ui::MainWindow*)((AdressFenster*)this)) + 20u))->Ui_MainWindow::vorwaertsButton«, das vom Nicht-Klassentyp »QPushButton*« ist
adressfenster.cpp:103: Fehler: Abfrage des Elementes »setEnabled« in »((Ui_MainWindow*)(((Ui::MainWindow*)((AdressFenster*)this)) + 20u))->Ui_MainWindow::zurueckButton«, das vom Nicht-Klassentyp »QPushButton*« ist
adressfenster.cpp: In member function `void AdressFenster::on_zurueckButton_clicked()':
Wenn ich das richtig verstehe findet er die Methode nicht. Sie sollte aber von QWidget ererbt sein. Wird die nur eingebunden, wenn ein connect sie anspricht?
Muss ich ein SIGNAL programmieren, um das zu realisieren?

Hab ich auch versucht:

Code: Alles auswählen

	connect(this, SIGNAL(firstRecord( bool )), ui.zurueckButton.setDisabled(bool));
	connect(this, SIGNAL(lastRecord( bool )), ui.vorwaertsButton.setDisabled(bool));
	connect(this, SIGNAL(notFirstRecord( bool )), ui.zurueckButton.setEnabled(bool));
	connect(this, SIGNAL(notLastRecord( bool )), ui.vorwaertsButton.setEnabled(bool));
Auslöser:

Code: Alles auswählen

	if(index == adressenliste.count()-1)
		emit lastRecord( TRUE);
	if(index != 0)
		emit notFirstRecord( TRUE);
Jedenfalls haben sich die Fehler vermehrt:

Code: Alles auswählen

adressfenster.cpp: In constructor `AdressFenster::AdressFenster()':
adressfenster.cpp:33: Fehler: Abfrage des Elementes »setDisabled« in »((Ui_MainWindow*)(((Ui::MainWindow*)((AdressFenster*)this)) + 20u))->Ui_MainWindow::zurueckButton«, das vom Nicht-Klassentyp »QPushButton*« ist
adressfenster.cpp:33: Fehler: expected primary-expression vor "bool"
adressfenster.cpp:34: Fehler: Abfrage des Elementes »setDisabled« in »((Ui_MainWindow*)(((Ui::MainWindow*)((AdressFenster*)this)) + 20u))->Ui_MainWindow::vorwaertsButton«, das vom Nicht-Klassentyp »QPushButton*« ist
adressfenster.cpp:34: Fehler: expected primary-expression vor "bool"
adressfenster.cpp:35: Fehler: Abfrage des Elementes »setEnabled« in »((Ui_MainWindow*)(((Ui::MainWindow*)((AdressFenster*)this)) + 20u))->Ui_MainWindow::zurueckButton«, das vom Nicht-Klassentyp »QPushButton*« ist
adressfenster.cpp:35: Fehler: expected primary-expression vor "bool"
adressfenster.cpp:36: Fehler: Abfrage des Elementes »setEnabled« in »((Ui_MainWindow*)(((Ui::MainWindow*)((AdressFenster*)this)) + 20u))->Ui_MainWindow::vorwaertsButton«, das vom Nicht-Klassentyp »QPushButton*« ist
adressfenster.cpp:36: Fehler: expected primary-expression vor "
Wo liegt mein Denkfehler? Wird setDisabled(bool) gar nicht ererbt? Muss ich das "aktivieren"?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: zugriff auf ererbte Slots eines designer-Formulars

Beitrag von macman »

markusk21 hat geschrieben:

Code: Alles auswählen

»((Ui_MainWindow*)(((Ui::MainWindow*)((AdressFenster*)this)) + 20u))->Ui_MainWindow::vorwaertsButton«, das vom Nicht-Klassentyp »QPushButton*« ist
Was ist denn das für ne wilde Casterei? Ergebnis scheint zumindest kein QPushButton zu sein.
markusk21
Beiträge: 9
Registriert: 17. August 2006 02:50

Beitrag von markusk21 »

Also von mir ist das so nicht gedacht. Mein Befehl zum Aufruf ist nur

Code: Alles auswählen

		Ui::MainWindow ui;
Und mein Konstruktor sieht auch einfach aus:

Code: Alles auswählen

AdressFenster::AdressFenster()
{
	ui.setupUi(this);
	
	dateiOeffnen();
	
	setAdress(index);
	(void) new QShortcut(Qt::Key_PageUp, this, SLOT(on_zurueckButton_clicked()));
	(void) new QShortcut(Qt::Key_PageDown, this, SLOT(on_vorwaertsButton_clicked()));
/*	connect(this, SIGNAL(firstRecord( bool )), ui.zurueckButton.setDisabled(bool));
	connect(this, SIGNAL(lastRecord( bool )), ui.vorwaertsButton.setDisabled(bool));
	connect(this, SIGNAL(notFirstRecord( bool )), ui.zurueckButton.setEnabled(bool));
	connect(this, SIGNAL(notLastRecord( bool )), ui.vorwaertsButton.setEnabled(bool));
*/
}
Ui::MainWindow habe ich mit dem designer erstellt und wird durch make -> uic automatisch nach ui_mainwindow.h umgewandelt.

Und der QPushButton verhält sich im Programm eigentlich auch wie einer.
Allerdings ist mir schon aufgefallen, dass der designer nicht ganz ausgereift ist. Beim laden von Dateien schmeißt er gern Layout-vereinbarungen mit widgets durcheinander. Meist muss ich für kleine Änderungen die ganzen H-Layouts neu erstellen und unerwünschte widgets löschen.
Die Version ist 4.1.4 Open Source.
Ich würde lieber mit dem KDevDesigner arbeiten, aber der macht nur 3.* Formulare.
Alternativen? :wink:
markusk21
Beiträge: 9
Registriert: 17. August 2006 02:50

Beitrag von markusk21 »

Mal ganz platt gefragt: ist es im Moment vielleicht noch geschickter mit QT-3.* zu üben für einen Anfänger wie mich?
QT-4 scheint zwar stabil zu laufen, aber noch nicht wirklich weit verbreitet zu sein (KDevDesigner).
Antworten