Dock mit einer Action im Menü verheiraten
Verfasst: 16. Juni 2009 12:34
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
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
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;
}
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