Seite 1 von 1

[gelöst] separater im context von Hand setzen und löschen

Verfasst: 29. März 2010 11:16
von 24dan
hi habe mir auf mein QTreeView ein Kontextmenü erstellt das Zellenabhängig reagieren soll.

1.

Code: Alles auswählen

 connect(ui->treeView, SIGNAL(clicked(QModelIndex)), this, SLOT(contextTreeView(QModelIndex)));
2.

Code: Alles auswählen

void MainWindow::contextTreeView(QModelIndex index)
{
    ui->treeView->setContextMenuPolicy(Qt::NoContextMenu);
    switch(index.column()){
    case 4:
    case 5:
    case 6:
    case 7:
        // Bedingung für das ContextMenu Teilung:
        // 1. Teiler sind in den Spalten: 4,5,6,7 vorhanden
        // 2. die Teilung ist noch nicht gerechnet (?)
        if(model->data(index,Qt::DisplayRole).toString().contains(QRegExp("[0-9]"))){
            if(model->data(model->index(index.row(),
                                        index.column()+4,
                                        index.parent()),
                           Qt::DisplayRole).toString().contains(QRegExp("[?]")))
            {
                this->index = index;
                ui->treeView->addAction(ui->action_Teilung);
                ui->treeView->setContextMenuPolicy(Qt::ActionsContextMenu);
            }
        }
        break;
    default:
        break;
    }
}
Frage:

Wie kann ich jetzt für den nächsten Menüpunkt einen Separater einfügen und eventuell auch wieder löschen wenn die Zelle keine zwei Einträge im Kontextmenü haben soll? :?

Verfasst: 29. März 2010 12:16
von archer
Ich nehme für solche Fälle immer das event für das Kontextmenü und baue mir dieses selber zusammen.
Den angeklickten Index hole ich mir über das Sekection-Modell.
Das macht das Handling für mich einfacher und ich kann frei entscheiden was angezeigt werden soll.

Ansonsten gibt es ja auch noch das removeAction() um Actions wieder herauszunehmen.

Verfasst: 29. März 2010 14:40
von 24dan
Frage:

Wie kann ich jetzt für den nächsten Menüpunkt einen Separater einfügen und eventuell auch wieder löschen wenn die Zelle keine zwei Einträge im Kontextmenü haben soll? Confused

Verfasst: 29. März 2010 15:44
von archer
Mann könnte zum Beispiel eine Action erzeugen und ihr sagen, du bist ein Seprator:

Code: Alles auswählen

QAction* myAction = new QAction(this);
myAction->setSeparator(true);
Den Zeiger wirst du dir dann wohl merken müssen damit du ihn später wieder herausnehmen kannst.

Verfasst: 3. April 2010 19:22
von 24dan
Funktioniert super. Danke.