folgendes:
Ich habe einen UndoSteck da schreib ich immer was rein wenn ich einen Butten drücke. Einen Text der zur funktion passt plus dazugehörige Nummer, die die Widgets darstellen. (Hab 4).
So also Undo und Redo funktioniern soweit bis auf eine Sache. Und zwar:
Wenn ich jetzt in mehreren verschiedenen Widgets was mache dann merkt er sich nur vom letzten den ersten Zustand. Also kann ich quasi nur beim ersten bis auf die Ursprungsform zurückspringen.
Aber eigentlich müsste ich das ja bei allen können. Jetzt hab ich mir überlegt ob ich nicht einfach wenn ich den Button das erste mal benutze noch den Ursprung in den Stack schreibe. Was ich aber nicht so gut finde.
Besser fände ich eine Abfrage, so in der Art, wenn im stack davor nichts mehr von diesem Widget steht dann geh bei undo auf Ursprung. Irgendwie sowas. Nur bin ich mir jetzt nicht so klar wie ichs umsetzen soll.
Hier mein Code:
Code: Alles auswählen
void
MainWindow::slotUndo(void)
{
undoStack->undo();
if(undoStack->undoText() == NULL)
{
m_pComparisonToolWidget->slotSetSegmentModel17();
}
if(undoStack->undoText() == "17SegmentModel 1")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot1;
m_pComparisonToolWidget->slotSetSegmentModel17();
}
else if(undoStack->undoText() == "17SegmentModel 2")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot2;
m_pComparisonToolWidget->slotSetSegmentModel17();
}
else if(undoStack->undoText() == "17SegmentModel 3")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot3;
m_pComparisonToolWidget->slotSetSegmentModel17();
}
else if(undoStack->undoText() == "17SegmentModel 4")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot4;
m_pComparisonToolWidget->slotSetSegmentModel17();
}
if(undoStack->undoText() == "VesselsSegmentModel 1")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot1;
m_pComparisonToolWidget->slotSetSegmentModelVessels();
}
else if(undoStack->undoText() == "VesselsSegmentModel 2")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot2;
m_pComparisonToolWidget->slotSetSegmentModelVessels();
}
else if(undoStack->undoText() == "VesselsSegmentModel 3")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot3;
m_pComparisonToolWidget->slotSetSegmentModelVessels();
}
else if(undoStack->undoText() == "VesselsSegmentModel 4")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot4;
m_pComparisonToolWidget->slotSetSegmentModelVessels();
}
if(undoStack->undoText() == "16SegmentModel 1")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot1;
m_pComparisonToolWidget->slotSetSegmentModel16();
}
else if(undoStack->undoText() == "16SegmentModel 2")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot2;
m_pComparisonToolWidget->slotSetSegmentModel16();
}
else if(undoStack->undoText() == "16SegmentModel 3")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot3;
m_pComparisonToolWidget->slotSetSegmentModel16();
}
else if(undoStack->undoText() == "16SegmentModel 4")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot4;
m_pComparisonToolWidget->slotSetSegmentModel16();
}
}
void
MainWindow::slotRedo(void)
{
undoStack->redo();
if(undoStack->undoText() == NULL)
{
m_pComparisonToolWidget->slotSetSegmentModel17();
}
if(undoStack->undoText() == "17SegmentModel 1")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot1;
m_pComparisonToolWidget->slotSetSegmentModel17();
}
else if(undoStack->undoText() == "17SegmentModel 2")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot2;
m_pComparisonToolWidget->slotSetSegmentModel17();
}
else if(undoStack->undoText() == "17SegmentModel 3")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot3;
m_pComparisonToolWidget->slotSetSegmentModel17();
}
else if(undoStack->undoText() == "17SegmentModel 4")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot4;
m_pComparisonToolWidget->slotSetSegmentModel17();
}
if(undoStack->undoText() == "VesselsSegmentModel 1")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot1;
m_pComparisonToolWidget->slotSetSegmentModelVessels();
}
else if(undoStack->undoText() == "VesselsSegmentModel 2")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot2;
m_pComparisonToolWidget->slotSetSegmentModelVessels();
}
else if(undoStack->undoText() == "VesselsSegmentModel 3")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot3;
m_pComparisonToolWidget->slotSetSegmentModelVessels();
}
else if(undoStack->undoText() == "VesselsSegmentModel 4")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot4;
m_pComparisonToolWidget->slotSetSegmentModelVessels();
}
if(undoStack->undoText() == "16SegmentModel 1")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot1;
m_pComparisonToolWidget->slotSetSegmentModel16();
}
else if(undoStack->undoText() == "16SegmentModel 2")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot2;
m_pComparisonToolWidget->slotSetSegmentModel16();
}
else if(undoStack->undoText() == "16SegmentModel 3")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot3;
m_pComparisonToolWidget->slotSetSegmentModel16();
}
else if(undoStack->undoText() == "16SegmentModel 4")
{
m_pComparisonToolWidget->m_pActivePlot = m_pComparisonToolWidget->m_pPlot4;
m_pComparisonToolWidget->slotSetSegmentModel16();
}
}
Qt-nator