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