Ich schreibe eine Qt-Desktop-Anwendung in C++ mit Qt Creator.Hinzufügen eines Rechtsklick-Menüs für bestimmte Elemente in QTreeView
Ich erklärte in meinem Hauptfenster ein TreeView und ein kompatibles Modell.
Jetzt möchte ich ein Rechtsklick-Menü für die Baumstruktur haben. Nicht für alle Elemente, sondern für einen Teil von ihnen, zum Beispiel: für die Baumelemente mit einem geraden Index.
ich mit dem folgenden Code ein einfaches Kontextmenü versuchte, fügte hinzu:
in der H-Datei:
QStandardItemModel* model;
QMenu* contextMenu;
QAction* uninstallAction;
private slots:
void uninstallAppletClickedSlot();
und in der CPP-Datei:
in der Erbauer:
ui->treeView->setModel(model);
contextMenu = new QMenu(ui->treeView);
ui->treeView->setContextMenuPolicy(Qt::ActionsContextMenu);
uninstallAction = new QAction("Uninstall TA",contextMenu);
ui->treeView->addAction(uninstallAction);
connect(uninstallAction, SIGNAL(triggered()), this, SLOT(uninstallAppletClickedSlot()));
und ein Schlitz:
void MainWindow::uninstallAppletClickedSlot()
{
}
dieser Code gibt mir ein Kontextmenü mit der gewünschten Aktion, aber Sie haben keine Ahnung, wie kann ich diese Aktion nur für den QStandardItem
s mit dem geraden Indizes hinzufügen ??
BTW, ich bin das Hinzufügen von Elementen zu dem TreeView durch die folgende Weise:
void MainWindow::AddItem(QString name)
{
QStandardItem *parentItem = model->invisibleRootItem();
QStandardItem *app = new QStandardItem(name);
parentItem->appendRow(app);
}
gegoogelt ich viel, aber nichts gefunden :(
Dank im Voraus
Dank, @vahancho, ich Ihre Anweisungen befolgt, aber das Ergebnis ist: wenn ich auf einer Zeile mit einem geraden Index drücken - ich kann ein wenig Punkt sehen erscheint in der Form, und sobald ich auf eine Zeile mit ungeraden Index drücken - nichts erscheint. Das ist gut, aber das Menü erscheint überhaupt nicht! die exec() -Funktion führt die gewünschte Aktion nicht durch. Hast du noch eine Idee? Danke vielmals! – user1835297
@ user1835297, eigentlich musst du dein Menü vorher aufbauen. Ich habe diesen Code nicht in meine Antwort aufgenommen. Sie müssen nur: 'contextMenu-> addAction (" Deinstallieren TA ", dieses, SLOT (uninstallAppletClickedSlot());' oder so. – vahancho
Verwenden Sie 'ui-> treeview-> viewport() -> mapToGlobal (Punkt)' stattdessen, wenn Sie einen merkwürdigen Offset des Menüs erfahren. –