Frage

Ich brauche ein Kontextmenü anzuzeigen, wenn ein Reiter auf geklickt wird, und es muss auf diese spezielle Registerkarte reagieren. Gibt es eine Möglichkeit, dies zu tun, ohne es zu Subklassen?

War es hilfreich?

Lösung

Der einfache Weg, aber möglicherweise nicht genau, was Sie brauchen:

  1. Mit dem 'Current' Signal Ihres QTabWidget
  2. In der Schlitz, der mit dem Signal verbunden ist, eine QMenu erstellen und füllt es je nach Bedarf
  3. schließlich in dem Schlitz, der mit dem Signal verbunden ist, ruft QMenu :: exec (QCursor :: pos ())

Das wird eine Funktion aufgerufen, wenn die Registerkarte geändert wird (nicht unbedingt angeklickt) und laichen ein Menü an der aktuellen Mausposition.

komplizierte Weise, die genau das tut, was Sie beschreiben:

  1. Rufen Sie QObject :: installEventFilter auf Ihrem QTabWidget, so dass alle Ereignisse auf Ihrem QTabWidget zu Ihrem eigenen Objekt weitergeleitet werden.
  2. In Ihrem eigenen Objekt, reimplementieren QObject :: customEvent und behandeln alle QMouseEvent Ereignisse.
  3. Auffüllen eines QMenu je nach Bedarf und QMenu :: exec an der Position des QMouseEvent Sie Umgang nennen.

Andere Tipps

erstellen QMenu:

m_menu = new QMenu;

fügen Sie Ihre Aktionen zum Menü.

Erstellen Sie einen Slot aufgerufen werden, wenn Kontextmenü auf Tableiste angefordert:

connect(m_tabWidget->tabBar(), &QTabBar::tabBarClicked, this, &MyClass::on_contextMenuRequested);

In dem Schlitz ist, zeigen Sie das Menü. Definition von Slot:

void MyClass::on_contextMenuRequested(int tabIndex)
{
    m_menu->popup(QCursor::pos());
}

Wenn Sie Index der aktuellen Registerkarte in einer anderen Funktion benötigen, verwenden Sie Folgendes:

m_tabWidget->tabBar()->currentIndex()

Ich glaube, Sie müssen Ihre eigene Klasse erstellen, die von QTabWidget erbt und überschreiben die mouse (QMouseEvent) geschützte Funktion, in der Sie das Kontextmenü auf dem rechten Maustaste erstellen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top