【问题标题】:Qt: Resizing QMenuBar corner widgetQt:调整 QMenuBar 角小部件的大小
【发布时间】:2015-08-12 16:15:25
【问题描述】:

我在主窗口菜单栏的右上角放了一个按钮:

QPushButton *pb = new QPushButton("Text");
pb->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);

QMainWindow *mainWindow;
mainWindow->menuBar()->setCornerWidget(pb, Qt::TopRightCorner);

初始布局很好。一段时间后,一个异步事件将 QPushButton 的文本更改为更长的字符串,但它在右侧被剪裁了。

我可以看到 QPushButton 的大小在字符串更新时发生了变化。如果调整窗口大小,QPushButton 会正确显示。问题似乎是让 QMenuBar 识别小部件的大小已更改。

这个答案How to auto change QPushButton width and QMenuBar corner widget width when change text of button? 建议重置角落小部件。我宁愿避免这种情况,因为我的应用程序的结构让我在初始化后跳过了几个丑陋和尴尬的箍来重置角落小部件。

【问题讨论】:

    标签: qt resize widget


    【解决方案1】:

    解决方案很简单。更新按钮调用menuBar()->adjustSize();的文本后,我在Qt5.5中测试过,希望对你有用。

    【讨论】:

    • 是的,这行得通。谢谢!我总是在改变的小部件上尝试 adjustSize() 。我必须记得调整父母。
    【解决方案2】:

    您可以将 QWidgetAction 用作水平菜单小部件:

    class TestMenu : public QWidgetAction
    {
    public:
        TestMenu(QObject *parent) :
            QWidgetAction (parent)
        {
    
        }
        virtual QWidget *createWidget(QWidget *parent)
        {
            QComboBox *combo = new QComboBox(parent);
            combo->setFixedWidth(300);
            return combo;
        }
    
        virtual void deleteWidget(QWidget *widget)
        {
            delete widget;
        }
    };
    

    ...

    QMenu *menu = new QMenu();
    menu->addAction(new TestMenu(this));
    menuBar()->setCornerWidget(menu);
    

    An example of how it looks

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多