c++ - 使 QMenu 具有与父级相同的宽度(QPushButton)

标签 c++ qt widget size width

我有一个 QMenu 分配给 QPushButton 并在按下按钮时弹出。它看起来像这样:

enter image description here

但是,我希望菜单的宽度与按钮的宽度相等,因为它现在看起来很难看,而且更难点击。

我可以使用 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);
}

最佳答案

也许你应该像这样设置菜单的最小宽度:

menu->setMinimumWidth( button->width() );

void QWidget::resizeEvent( QResizeEvent* event ) 的末尾或 void QWidget::showEvent( QShowEvent* event )功能。但是为此,您需要子类化 QWidget 并覆盖该派生类中提到的函数之一。

void Derived::resizeEvent( QResizeEvent* event )
{
    QWidget::resizeEvent( event );

    // Update the size of your your menu here (enough on the first resize) ...
}

或者对 showEvent 做同样的事情。

关于c++ - 使 QMenu 具有与父级相同的宽度(QPushButton),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30289794/

相关文章:

c++ - 以未知顺序执行函数的最有效方法

c++ - 如何以跨平台的方式获取(几乎)唯一的系统标识符?

qt - 是否可以将 QWidget 声明为在 Qt 之外创建的窗口的子窗口?

android - 铿锵++ : error: linker command failed with exit code 1 Qt Android

android - 我可以在不涉及gradle的情况下对Android应用进行版本控制吗?

css - 如何使用 forms.CharField(widget=forms.PasswordInput() 中的 attrs

c++ - 在 for 循环中使用 erase() 只删除第一行

java - 保存 SWT Widget 对象的集合

Android 小部件刷新

c++ - std::uniform_real_distribution 在失去随机性之前可以生成多少个随机数?