提取QMenu的宽度?奇怪的问题

时间:2014-05-25 17:55:30

标签: c++ qt

在我的Windows应用程序中,我的QMenu从QWidget的某个角落弹出。为了计算弹出QMenu的确切位置,我使用以下语句

QPoint p = btn->mapToGlobal(QPoint(0,0));

//Now get the size of the menu
int widthmnu =mnu->geometry().width();

//Create new Qpoint
int new_x =  p.x() - (widthmnu+5);
p.setX(new_x);

mnu->exec(p);

现在问题是这个方法第一次运行时mnu->geometry().width()的结果是680(这是错误的,菜单弹出错误的地方)。现在,如果再次调用此方法,则mnu-> geometry()。width()的结果为140,这是正确的。我的问题是为什么我第一次菜单启动时总是得到错误的值。我有办法解决这个问题吗?我甚至无法想到一个适用于第一种情况的黑客行为。

更新 我注意到,如果生成.exec()方法,宽度值才是正确的。 所以第一次宽度错误然后执行exec()调用。之后,正确的宽度值就在那里。我还在寻找修复

1 个答案:

答案 0 :(得分:4)

以下是documentation for QMenu::exec()的相关评论:

  

使用exec()或popup()定位菜单时,请记住您   不能依赖菜单的当前大小()。出于性能原因,   菜单仅在必要时调整其大小。所以在很多情况下,大小   演出前后不同。相反,使用sizeHint()   根据菜单的当前内容计算合适的大小。