Seite 1 von 1

QTableWidget und QContextMenuEvent

Verfasst: 13. März 2010 13:50
von Erni35
Hallo Liste,

ich bin gerade an einem QTableWidget und versuche ihm ein KontxtMenu einzuimpfen. Mit QSignalMapper reagiere ich auf jedes Ereignis und rufe einen Slot mit einem Parameter auf.
Leider reagiert das Programm nicht auf die rechte Maustaste in der letzten Zeile. KEine Ahnung warum. Die Kontext-Taste auf der Tastatur funktioniert slebst in der letzten Zeile und des Slot wird richtig aufgerufen.

Könnt ihr mir helfen?
void startreihenfolge::contextMenuEvent(QContextMenuEvent *event)
{
int lo_item = ui->tableWidget_2->rowAt(event->pos().y() - ui->tabWidget->pos().y() - ui->tableWidget_2->pos().y() - 30);
if (lo_item)
{
if (lo_item > -1)
{
QMenu menu(this);
foreach (QString aktion, aktionen)
{
QStringList eintrag = aktion.split("::");
QAction *submenu = new QAction(eintrag[0], this);
connect(submenu, SIGNAL(triggered()), menuMapper, SLOT(map()));
menuMapper->setMapping(submenu,eintrag[1]);
menu.addAction(submenu);
}
menu.exec(event->globalPos());
}


Erni35

Verfasst: 13. März 2010 22:02
von 24dan
Hi habe das mit dem Kontextmenü bei mir anders gelöst:

Code: Alles auswählen

    QTableWidget test;
    // Action erstellen
    QAction *submenu = new QAction(eintrag[0], this); 
    // Action verbinden
    test.addAction(submenu);
    // Kontextmenü starten
    test.setContextMenuPolicy(Qt::ActionsContextMenu);
    connect(submenu, SIGNAL(triggered()), this, SLOT(Reaktion_auf_Kontext()));
    test.show();

Verfasst: 15. März 2010 05:18
von Erni35
Der Punkt geht an dich, ich erstelle jetzt das KontextMenu allgemein und rufe es nur noch auf. Allerdings bleibt, in der letzten Zeile des QTabletWidget kommt die Mausaktion nicht im Slot an und das KontextMenu wird nicht aufgerufen.

Erni35

Re: QTableWidget und QContextMenuEvent

Verfasst: 19. Juni 2012 16:12
von Nukleus
Ich habe eben ein ähnliches Problem gehabt.

Sachverhalt: QTableView, ich will per rechter Maustaste ein Context-Menu aufrufen, weil ich ggf. mit der Zeile, in der der Curser bei Click steht, was ändern will.
Realisiert habe ich es über das Signal customContextMenuRequested.
Dieses liefert bei Click die Maus Koordinaten (lt. Doku im Koordinatensystem des Viewports). Ich übersetze die Koordinaten daher zuerst ins Koordinatensystem des viewport-Parents. Dieses ist die Tableview selbst.
Mit der Funktion rowAt() und columnAt() hole ich mir daraus Zeile und Spalte, in die rechts geklickt wurde.
Merkwürdigerweise erhalte ich row=1, wenn ich in die oberste row Klicke und col = 0, wenn ich in die Spalte ganz links klicke. Ich hätte auch row = 0 erwartet.

Keine Ahnung warum das so ist. Deshalb funktionierte die letzte Zeile bei mir auch nicht. Die Wahrheit ist: Die 1. Zeile funktioniert nicht.
Korrigiere ich die Zeilen-Nr um 1 nach unten, dann funkionieren alle Zeilen!