QTableWidget und QContextMenuEvent

Alles rund um die Programmierung mit Qt
Antworten
Erni35
Beiträge: 15
Registriert: 21. Juli 2009 21:49

QTableWidget und QContextMenuEvent

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

Beitrag 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();
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Erni35
Beiträge: 15
Registriert: 21. Juli 2009 21:49

Beitrag 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
Nukleus
Beiträge: 44
Registriert: 16. April 2010 13:32

Re: QTableWidget und QContextMenuEvent

Beitrag 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!
Antworten