Dock mit einer Action im Menü verheiraten

Alles rund um die Programmierung mit Qt
Antworten
thereapman
Beiträge: 36
Registriert: 6. Juni 2007 15:39

Dock mit einer Action im Menü verheiraten

Beitrag von thereapman »

Hi!

Hab ein QDockWidget was hinten aus einem Plugin rausfällt und erstelle für dieses eine QAction die ich in ein Menü packe. Nun ist diese Action checkable.

Das Problem macht mir das sich der checked-status der Action ja immer mit dem tatsächlichen Status des Docks decken soll.

Das geht auch schon ganz gut mit folgendem Code

Code: Alles auswählen

bool KBSTradeClient::loadPlugin(QString filename)
{
	QStringList pluginInfo;
	QPluginLoader loader(filename);
	QObject *instance = loader.instance();
	ClientPluginInterface *modif;

	if(instance)
	{
		if(loader.isLoaded())
			qDebug() << "Pluginloading OK";
		else
			qDebug() << loader.errorString();

		modif = qobject_cast<ClientPluginInterface *>(instance);
		if(modif)
			pluginInfo << modif->pluginInfo();
		else
		{
			qDebug() << "ERROR: Can't load Plugin";
			return false;
		}
	}
	else
	{
		qDebug() << "ERROR: Can't load Plugin: "<< loader.errorString();
		return false;
	}

	//Plugin sollte geladen sein also werf mal das Dock reus
	QDockWidget *dock = modif->createDock();
	addDockWidget(Qt::LeftDockWidgetArea,dock);

	//Dock in Ansichtsmenü registrieren
	QAction *newaction = ui.menuDocks->addAction(pluginInfo.at(2));
	newaction->setCheckable(true);

	connect(newaction,SIGNAL(toggled(bool)),dock,SLOT(setVisible(bool)));
	connect(dock,SIGNAL(visibilityChanged(bool)),newaction,SLOT(setChecked(bool)));

	//Gib dem Plugin deine mdiarea
	modif->setMdiArea(ui.mdiArea);
	return true;
}
Nun ist aber visibilityChanged() bissl zu restriktiv, da wenn das Dock hinter ein anderes getabbt wird löst der Slot aus und toggled die QAction.
Damit verschwindet das Dock (1. Connect) . Jetzt such ich ne elegante Lösung die funtkionalität von visibilityChanged zu bekommen aber trozdem das Dock tabben zu können.

Grüsse Markus
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

warum nutzt du nicht QAction * QDockWidget::toggleViewAction () const ?

Also nachdem das QDockView erstellt hast, einfach mit
ui.menuDocks->addAction(dock->toggleViewAction()); einfuegen.

Brauchst dann nichtmal mehr verbinden ....

Ciao ...
thereapman
Beiträge: 36
Registriert: 6. Juni 2007 15:39

Beitrag von thereapman »

na toll. wie war das mit dem Wald und den Bäumen?! Thanks a lot!
Antworten