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

Alles rund um die Programmierung mit Qt
Antworten
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

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

Beitrag 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? :?
Zuletzt geändert von 24dan am 3. April 2010 22:29, insgesamt 1-mal geändert.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag 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.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag 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
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
archer
Beiträge: 306
Registriert: 2. Februar 2006 09:56

Beitrag 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.
24dan
Beiträge: 274
Registriert: 26. Juni 2006 14:15
Wohnort: Hamburg

Beitrag von 24dan »

Funktioniert super. Danke.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Antworten