[erledigt] Rechtsklick auf Item
[erledigt] Rechtsklick auf Item
Weiss jemand von euch wie man ein eigenes ContextMenu definiert, dass erscheint, wenn man auf ein Item rechts klickt?
ich habe ein treeWidget erstellt und ich möchte, dass sich bei einem Rechtsklick auf ein Item ein Menü öffnet, wo man dann verschiedene QActions anklicken kann.
ich habe ein treeWidget erstellt und ich möchte, dass sich bei einem Rechtsklick auf ein Item ein Menü öffnet, wo man dann verschiedene QActions anklicken kann.
Zuletzt geändert von Malriks am 28. Juli 2007 00:26, insgesamt 2-mal geändert.
-
- Beiträge: 605
- Registriert: 28. Juni 2007 15:01
- Kontaktdaten:
-
- Beiträge: 300
- Registriert: 3. November 2004 16:15
- Wohnort: Berlin
ich habe ein solches Signal des Views auch schon vermisst.
Allerdings muss man nicht notwendig eine Klasse von TreeView ableiten wenn man das nicht will (z.B. weil man den Dialog im Designer erstellt hat), sondern kann auch einen eventFilter installieren.
Gruß Arne
PS: wichtig ist, dass Du den Viewport und nicht das TreeView überwachst.
Allerdings muss man nicht notwendig eine Klasse von TreeView ableiten wenn man das nicht will (z.B. weil man den Dialog im Designer erstellt hat), sondern kann auch einen eventFilter installieren.
Gruß Arne
PS: wichtig ist, dass Du den Viewport und nicht das TreeView überwachst.
Ich habe mit Views noch nicht gearbeitet, aber es sollte mich sehr wundern, wenn es da nicht auch ein contextMenuEvent gibt.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
-
- Beiträge: 300
- Registriert: 3. November 2004 16:15
- Wohnort: Berlin
Es wurde auch nicht nach einem Signal gefragt. Der Ursprungsposter geht sogar von einem TreeWidget aus und da ist gar kein Problem mit dem ContextMenu. Im contextMenuEvent holt man sich das entsprechende Item mit itemAt(QPos), erstellt ein entsprechendes Menü und zeigt es an.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
und wie geht das? also ich habe das mit dem Rechtsklick noch nicht hinbekommen.ArneStocker hat geschrieben:Allerdings muss man nicht notwendig eine Klasse von TreeView ableiten wenn man das nicht will (z.B. weil man den Dialog im Designer erstellt hat), sondern kann auch einen eventFilter installieren.
-
- Beiträge: 300
- Registriert: 3. November 2004 16:15
- Wohnort: Berlin
hi
Zum Installieren des Eventfilters
und zum Reagieren auf die Events
Gruß Arne
Zum Installieren des Eventfilters
Code: Alles auswählen
View.installEventFilter(this);
Code: Alles auswählen
public boolean eventFilter(QObject watched, QEvent event) {
if (watched == null) return false;
// Ereignisse für den Viewport
if (watched == this.m_view.viewport()) {
// MousePress: rechte Maustaste beachten
if (event.type() == QEvent.Type.MouseButtonPress) {
QMouseEvent mouseevent = (QMouseEvent) event;
if (mouseevent.button() == Qt.MouseButton.RightButton) {
// aktuelles Item auswählen
QPoint screen_pos = QCursor.pos();
QPoint local_pos = this.m_view.viewport().mapFromGlobal(screen_pos);
QModelIndex new_index = this.m_view.indexAt(local_pos);
if (new_index != null) {
QObjectInfo new_select = GetObjectInfo(new_index.row());
if (new_select != this.GetSelectedObject()) {
this.SelectObject(new_select);
}
}
// Nachricht aussenden
this.m_rightClickEvent.emit(this.m_view);
return true;
}
}
}
// sonst weiterleiten des Events
return super.eventFilter(watched, event);
}
Auch wenn ich jetzt nicht der Verfasser vom Thread bin, ich klink mich mal ein
Ohman, du glaubst garnicht wie dankbar ich bin für den Code
Dankeschön
Oh sollte man vieleicht erwähnen
View = QTreeWidget.viewport()
Hab mir nen Wolf gesucht
gruss henug
ArneStocker hat geschrieben:hi
Zum Installieren des Eventfilters
... noch ne Menge mehr ...Code: Alles auswählen
View.installEventFilter(this);
Gruß Arne
Ohman, du glaubst garnicht wie dankbar ich bin für den Code
Dankeschön
Oh sollte man vieleicht erwähnen
View = QTreeWidget.viewport()
Hab mir nen Wolf gesucht
gruss henug
-
- Beiträge: 300
- Registriert: 3. November 2004 16:15
- Wohnort: Berlin
Servus zusammen,
bisschen spät für meine Antwort.
Ich hatte auch das Problem mit dem Kontextmenu. Ich habe es so gelöst, ohne den installEventFilter(...);
Natürlich kann man es noch verfeinern, wie abfragen ob man auf einem QTreeWidgetItem oder sonstwas ist.
bisschen spät für meine Antwort.
Ich hatte auch das Problem mit dem Kontextmenu. Ich habe es so gelöst, ohne den installEventFilter(...);
Natürlich kann man es noch verfeinern, wie abfragen ob man auf einem QTreeWidgetItem oder sonstwas ist.
Code: Alles auswählen
treeWidgetRegistry.customContextMenuRequested.connect( this, "contextRequested( QPoint )" );
treeWidgetRegistryEntry.customContextMenuRequested.connect( this, "contextRequested( QPoint )" );
treeWidgetPackages.customContextMenuRequested.connect( this, "contextRequested( QPoint )" );
/**
* Requested from {@link QTreeWidget}
*/
private void contextRequested( QPoint pos )
{
try
{
if( QPoint.signalSender() instanceof QTreeWidget )
{
QTreeWidget treeWidget = (QTreeWidget)QPoint.signalSender();
if( treeWidget != null )
{
if( treeWidget.objectName().equalsIgnoreCase( "treeWidgetRegistry" ) )
{
cntxRegistryMenu.exec( treeWidget.mapFrom( treeWidget, QCursor.pos() ) );
}
if( treeWidget.objectName().equalsIgnoreCase( "treeWidgetRegistryEntry" ) )
{
cntxRegValueMenu.exec( treeWidget.mapFrom( treeWidget, QCursor.pos() ) );
}
if( treeWidget.objectName().equalsIgnoreCase( "treeWidgetPackages" ) )
{
cntxPackagesMenu.exec( treeWidget.mapFrom( treeWidget, QCursor.pos() ) );
}
}
}
}
catch( Exception ex )
{
ex.printStackTrace();
}
}