Seite 1 von 1

[gelöst] connect auf dynamisch erzeugten QToolButton

Verfasst: 8. April 2008 00:00
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

Verfasst: 8. April 2008 00:39
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

Re: Zugriff mit connect auf dynamisch erzeugten QToolButton

Verfasst: 8. April 2008 07:30
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.

Verfasst: 8. April 2008 23:04
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!!!