[gelöst] connect auf dynamisch erzeugten QToolButton

Alles rund um die Programmierung mit Qt
Antworten
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

[gelöst] connect auf dynamisch erzeugten QToolButton

Beitrag von Linuxguru »

Wie gesagt, möchte ich auf einen dynamisch erzeugten QToolButton mit connect zugreifen können. Der ToolButton wird aber in einer while Schleife erstellt, sodass ich ausserhalb der Schleife keinerlei Zugriff auf den Button habe.


hier mal ein Stück Code

Code: Alles auswählen

	QFile file( "/proc/mounts" );

	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
		return;

	QTextStream ts( &file );
	QString str;

	do
	{
		str = ts.readLine();
		QStringList list = str.split( " " );
		QString device = list[0];
		if( device.contains("/dev/", Qt::CaseInsensitive) )
		{
			QToolButton *button = new QToolButton;
			button->setText( device );
		}
	}
	while (!str.isNull());
ich möchte praktisch beim Klicken des Buttons auf eine Funktion zugreifen, die den Pfad weiter verarbeitet.

Danke schonmal
Zuletzt geändert von Linuxguru am 8. April 2008 23:05, insgesamt 1-mal geändert.
C167
Beiträge: 105
Registriert: 9. Februar 2008 20:30

Beitrag von C167 »

fuege die Buttons in eine QButtonGroup ein. Verbinde dann eines ihrer Signale mit einem SLOT. die ButtonGroup gibt dabei als Parameter dem Signal einen Zeiger auf den Button mit, dder gedrueckt wurde
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Zugriff mit connect auf dynamisch erzeugten QToolButton

Beitrag von macman »

Linuxguru hat geschrieben:Der ToolButton wird aber in einer while Schleife erstellt, sodass ich ausserhalb der Schleife keinerlei Zugriff auf den Button habe.
Dann muss der connect auch in die Schleife, aber so oder so solltest Du dir die Pointer auf die Buttons merken, damit Du sie im Destruktor zerstören kannst, wenn Du ihnen schon keinen Parent mit gibst.
QList<QPushButton*> und alle Pointer da rein. Wenn Du den Buttons dann noch einen eindeutigen Namen gibst, kommst Du jederzeit wieder ran.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Linuxguru
Beiträge: 96
Registriert: 14. Januar 2007 02:09

Beitrag von Linuxguru »

super.. danke..

ich lass die devices in eine liste einlesen und die buttons erzeugen.

danach hab ich folgenden code gebaut

Code: Alles auswählen

	QList<QToolButton*>leftButtons = leftMountBar->findChildren<QToolButton*>();
	for( int i = 0; i<leftButtons.size(); i++ )
	{
		QToolButton *button = (QToolButton*)leftButtons.at(i);
		button->setObjectName( button->text() );
		connect( button, SIGNAL(clicked()), this, SLOT(clickLeftMountPoint()) );
	}
mit dem objectnamen kann ich dann wiederum per sender auf die objekte zugreifen :-).. funktioniert bestens!!!
Antworten