Qt 鼠标右键菜单显示不超出屏幕底部

#include <QDesktopWidget>

void MainWindow::tableWidget_test_showMenu(const QPoint pos)
{
	tableWidget_test_menu->move(cursor().pos());
    tableWidget_test_menu->show();
    int x = pos.x();
    int y = pos.y();

    QDesktopWidget* desktopWidget =QApplication::desktop();
    QRect desktopRect =desktopWidget->screenGeometry(); // 获取屏幕信息
    qDebug() << "desktopRect: " << desktopRect;

    QPoint global = tableWidget_test_menu->mapToGlobal(QPoint(0, tableWidget_test_menu->height()));  // 得到右键菜单左下角的坐标
    if (global.y() > desktopRect.height()) {   // 超过屏幕底部
    	// 向上移动到刚好和屏幕底部齐平
        global.setY(desktopRect.height() - tableWidget_test_menu->height());
    } else {
    	// 恢复原来位置,不移动
        global.setY(global.y() - tableWidget_test_menu->height());
    }
    tableWidget_test_menu->move(global);
    tableWidget_test_menu->show();
}

当菜单会超出屏幕底部时,会向上移动:

当菜单不超出屏幕底部时,就正常显示:
在这里插入图片描述

posted @ 2023-09-18 23:54  duapple  阅读(16)  评论(0编辑  收藏  举报  来源