Ich bin (sehr) neu zu Qt und ich versuche, ein einfaches Diagramm (ohne Einbeziehung externer Bibliotheken & co), die auch eine Box, Achsen und Rasterlinien, die ich will umschalten zu können.Qt QGraphicsScene Hinzufügen und Löschen von Zeilen
Ich habe die QGraphicsScene
als scene
definiert, wo ich scene->addLine(...)
verwenden kann, aber ich weiß nicht, wie ich diese Zeilen auf einem QCheckBox
basierend entfernen kann. Dies ist (kurz), was ich in der Funktion plotAxes()
gesetzt haben, die mit connect()
verwendet wird:
QGraphicsLineItem *xAxis {new QGraphicsScene::addLine(xMin, 0, xMax, 0, *dashedLine)};
if (boxToggle->isChecked())
{
scene->addItem(xAxis);
//scene->addLine(yCenter, yMin, yCenter, yMax, *dashedLine);
scene->update();
}
else
{
scene->removeItem(xAxis);
scene->update();
}
Der Code zeigt nur die erste Achse, wenn es für das funktioniert kann ich alles andere erweitern, aber es funktioniert nicht. Bei xAxis
habe ich versucht QGraphicsItem
, QGraphicsScene
, Kombinationen, aber das ist nicht, wie ich fortfahren möchte. Ich weiß nicht, wie man die Linie (Achse) als Variable oder Zeiger hinzufügt und diese dann zum Hinzufügen/Löschen zu/von der Szene verwendet. Kann mir bitte jemand sagen, wie es geht?
[Bearbeiten] Es tut mir leid, zu sagen, ich habe vergessen, sie in der Lage sein wollen, zu wechseln, ohne zu beeinflussen, was bereits ist aufgetragen.
Vielen Dank für die Antwort. Ich habe den Code kopiert, um ein Gefühl dafür zu bekommen, aber mit Qtcreator 4.0.3, Qt 5.7.0, arch x64, steht 'undefinierter Verweis auf 'vtable for Widget''. Ich habe zwar die Zeile 'C++ 11' hinzugefügt, aber es ist dasselbe. Ich musste die letzte '.moc' Zeile kommentieren,' keine solche Datei oder kein Verzeichnis'. Ist das der Grund? Stellen Sie sich auch ein Plot-Fenster vor, das XY-Achsen, eine konfigurierbare Anzahl von Rasterlinien und eine Box, ein Rechteck, für alle Elemente enthält. Diese möchte ich hinzufügen/löschen ohne die bereits geplotteten Zeilen zu berühren, damit sind sie fest in der Anzahl. Vielleicht hilft das? –
@aconcernedcitizen Führen Sie zuerst qmake aus, dann versuchen Sie es zu bauen. – thuga
Dann können Sie die meisten von ihnen nur als Mitgliedsvariablen speichern, und ein Signal an einen Slot anschließen und die in diesem Slot verstecken/anzeigen. Sie müssen also keinen 'QVector' verwenden, wie ich es im Beispiel getan habe. Sie können anstelle von Lambda-Ausdrücken auch Slots verwenden. Machen Sie einfach einen Platz für jedes Kontrollkästchen, das etwas zeigt/versteckt. – thuga