Hi,
ich erstelle wie folgt mein Kontextmenu in meiner Tabelle:
QTableWidget::verticalHeader()->setContextMenuPolicy(Qt::ActionsContextMenu);
QTableWidget::verticalHeader()->addAction(m_pInsertRowOnTop);
QTableWidget::verticalHeader()->addAction(m_pInsertRowOnBottom);
QTableWidget::verticalHeader()->addAction(m_pDeleteRow);
Dieses Kontextmenu soll nur angezeigt werden, wenn eine Zeile selektiert ist. Leider wird es aber auch angezeigt, wenn keine Zeile selektiert ist. Gibt es eine Möglichkeit dies zu verhindern?
Ich habe auch schon die Policy CustomContextMenu ausprobiert, nur leider funktionieren dabei die Shortcuts nicht mehr.
Kontextmenü nur bei selektierter Tabellenzeile
-
spacer2004
- Beiträge: 9
- Registriert: 16. März 2007 13:55
-
spacer2004
- Beiträge: 9
- Registriert: 16. März 2007 13:55
Ich würde da eher einen eventFilter für schreiben.
Den eventfilter installieren, z.B. im Konstruktor
So oder so ähnlich... ist nicht getestet... mal probieren...
Code: Alles auswählen
// MyWindow ist das Qidget in dem das Tablewidget steckt.
bool MyWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == myTable->verticalHeader())
{
if (event->type() == QEvent::ContextMenu)
{
if (myTable->selectionModel()->selectedRows(0) > 0)
return false; // Event wird an das headerview weitergwleitet
else
return true; // Event wird nichts gemacht
}
else
{
return true;
}
}
else
{
// pass the event on to the parent class
return MyWindow::eventFilter(obj, event);
}
}
Code: Alles auswählen
myTable->verticalHeader()>installEventFilter(this);
-
spacer2004
- Beiträge: 9
- Registriert: 16. März 2007 13:55
War ein Versuch, kann sein das das so nur mit dem defaultcontextmenü funktioniert.
Dann halt die Policy CustomContextMenu verwenden und das Menü selber zusammenbauen und aufrufen.
So in der Art mache ich das immer, alledings benutze ich ein View.
Dann halt die Policy CustomContextMenu verwenden und das Menü selber zusammenbauen und aufrufen.
So in der Art mache ich das immer, alledings benutze ich ein View.
Code: Alles auswählen
// MyWindow ist das Qidget in dem das Tablewidget steckt.
bool MyWindow::eventFilter(QObject *obj, QEvent *event)
{
if (obj == myTable)
{
if (event->type() == QEvent::ContextMenu)
{
QContextMenuEvent* pEvent = reinterpret_cast<QContextMenuEvent*>(event);
pEvent->accept();
if (myTable->selectionModel()->selectedRows(0) > 0)
{
if (myTable->verticalHeader()->rect().contains(pEvent->pos()) == true)
{
QMenu menu("MyMenü");
menu.addAction(m_pInsertRowOnTop);
menu.addAction(m_pInsertRowOnBottom);
menu.addAction(m_pDeleteRow);
menu.exec(pEvent->globalPos());
return true;
}
}
}
return false;
}
else
{
// pass the event on to the parent class
return MyWindow::eventFilter(obj, event);
}
}
Code: Alles auswählen
myTable->installEventFilter(this);
-
spacer2004
- Beiträge: 9
- Registriert: 16. März 2007 13:55