ZBLOG

QToolButton的宽度比下拉菜单的action宽度多很多,如何统一尺寸

要统一 QToolButton 的宽度和下拉菜单中动作(action)的宽度,可以通过以下几个步骤实现:

  1. 获取 QAction 的文本宽度:首先,您需要获取下拉菜单中动作的最大宽度。可以使用 QFontMetrics 来计算文本的宽度。

  2. 设置 QToolButton 的固定宽度:然后,将 QToolButton 的固定宽度设置为您获得的最大宽度。

下面是一个简单的示例代码,演示了如何实现这一点:

#include <QApplication>
#include <QToolButton>
#include <QMenu>
#include <QAction>
#include <QFontMetrics>

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    // 创建 QToolButton
    QToolButton *toolButton = new QToolButton();

    // 创建下拉菜单
    QMenu *menu = new QMenu();

    // 添加一些动作到菜单
    QAction *action1 = new QAction("Short Action");
    QAction *action2 = new QAction("A Much Longer Action");
    menu->addAction(action1);
    menu->addAction(action2);

    // 计算最大的动作宽度
    int maxWidth = 0;
    
    for (const QAction* action : menu->actions()) {
        QFontMetrics metrics(action->font());
        int actionWidth = metrics.horizontalAdvance(action->text()) + 20; // 适当增加一些边距
        if (actionWidth > maxWidth) {
            maxWidth = actionWidth;
        }
    }

    // 设置工具按钮的弹出菜单
    toolButton->setMenu(menu);
    
    // 设置工具按钮的固定宽度
    toolButton->setFixedWidth(maxWidth);

    toolButton->setText("Options"); // 设置工具按钮的文本

    toolButton->show();

    return app.exec();
}

说明:

  • 使用 QFontMetrics::horizontalAdvance() 方法来获取每个动作文本的宽度。
  • 在循环中更新 maxWidth,并在每次添加新动作时加上一些额外的边距,以确保视觉上的美观。
  • 最后,通过调用 setFixedWidth(maxWidth) 来统一 QToolButton 的宽度,使其与最长的下拉菜单动作相匹配。

这样就能确保你的 QToolButton 宽度与下拉菜单中的最长动作一致。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22247

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?