【发布时间】:2015-07-29 03:59:17
【问题描述】:
我有一个QMenu,它被分配给QPushButton,并在按下按钮时弹出。它看起来像这样:
但是,我希望菜单的宽度等于按钮的宽度,因为现在它看起来很丑,而且更难点击。
我可以使用setMinimumWidth 为菜单设置一个固定宽度,但是我必须手动输入宽度值。按钮的大小在创建后可能不会改变,因此菜单的最小宽度不一定要动态调整。但是我不想硬编码一个值。
这两个小部件都是在我的窗口的构造函数中创建的,它也是从QWidget 派生的。我可以调用按钮的sizeHint 方法,但这只会返回它的“最佳”宽度。它后来在布局中的宽度比这更宽。
现在,在按钮上调用 width 方法也不会返回它在布局中应该具有的正确宽度,而是一个比按钮宽的宽度,即使我在所有子小部件之后调用它我的窗口已分配到他们的布局,并且窗口的布局已设置。我不确定这是为什么;可能是因为 window-widget 的构造函数还不知道它要显示的大小?
现在,有没有办法使该菜单具有按钮的宽度?或者在什么时候我可以在按钮上调用width 方法,它会返回按钮实际显示的宽度?该按钮也设置为菜单的parent。有没有办法让小部件具有其父级的宽度?
这里有一些示例代码:
MainInterface::MainInterface(QWidget *parent){
//some code
_moreButton = new QPushButton(tr("&More..."));
_moreMenu = new QMenu(_moreButton);
_cmdAction = new QAction(tr("Save as Batch File"), this);
_moreMenu->addAction(_cmdAction);
_moreButton->setMenu(_moreMenu);
//some more code
_layout->addWidget(_moreButton);
setLayout(_layout);
}
【问题讨论】:
-
您是否尝试使用
setWidth? -
你是什么意思?我知道如何设置菜单的宽度 (
setMinimumWidth),这也可以,但我无法检索该按钮的实际宽度。