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();
}

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值