also ich habe zwei bildschirme (mit QDesktopWidget, kein Xinerama). mein problem ist, dass ein QGraphicItem, das auf dem zweiten bildschirm gezeigt wird, menüs immer auf dem ersten bildschirm erzeugt.
wie kann ich rausfinden, auf welchem bildschirm geklickt wurde und das menü dort entsprechend anzeigen?
beispiel-code gibts hier und im anhang:
main.cpp
Code: Alles auswählen
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QGraphicsScene *scene = new QGraphicsScene();
MyGraphicsItem *rect = new MyGraphicsItem(0,0,50,50, "Test-Item");
scene->addItem(rect);
QDesktopWidget *desktop = new QDesktopWidget();
// create window on every available screen
for (int i = 0; i < desktop->numScreens(); i++)
{
QGraphicsView *screen = new QGraphicsView(scene, desktop->screen(i)); //forward 'screen(i)' as parent to see output on screen i
screen->show();
}
return app.exec();
}Code: Alles auswählen
MyGraphicsItem::MyGraphicsItem(float x, float y, float w, float h, QString label)
: QGraphicsRectItem(x, y, w, h)
{
this->label = label;
}
void MyGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
Q_UNUSED(event);
QDesktopWidget *desk = new QDesktopWidget();
QMenu *menu = new QMenu();
menu->addAction("My Graphics Item Menu for " + label);
menu->addAction("you clicked on screen " + QString::number(desk->screenNumber(QCursor::pos()))); // <-- das war mein versuch, der geht aber nich...
menu->exec(QCursor::pos());
}