QPushButton:如何对齐图标和文本

2024-01-12

使用 Qt C++,我有一些带有图标和文本的按钮。由于所有按钮的文本长度不同,图标未对齐:

我尝试使用 QToolButton 代替:

button->setToolButtonStyle( Qt::ToolButtonTextBesideIcon );
button->setSizePolicy( QSizePolicy( QSizePolicy::Policy::Expanding, button->sizePolicy().verticalPolicy() ) );

但没有成功,无法使文本居中,最终结果是:

有没有办法让图标垂直对齐并且文本保持居中,如下所示:


您可以通过子类化来实现它QPushButton。这是一个具有最低功能的示例:

class MyButton : public QPushButton {
public:
  explicit MyButton(QWidget* parent = nullptr) : QPushButton(parent) {}
  virtual ~MyButton() {}

  void setPixmap(const QPixmap& pixmap) { m_pixmap = pixmap; }

  virtual QSize sizeHint() const override {
    const auto parentHint = QPushButton::sizeHint();
    // add margins here if needed
    return QSize(parentHint.width() + m_pixmap.width(), std::max(parentHint.height(), m_pixmap.height()));
  }

protected:
  virtual void paintEvent(QPaintEvent* e) override {
    QPushButton::paintEvent(e);

    if (!m_pixmap.isNull()) {
      const int y = (height() - m_pixmap.height()) / 2; // add margin if needed
      QPainter painter(this);
      painter.drawPixmap(5, y, m_pixmap); // hardcoded horizontal margin
    }
  }

private:
  QPixmap m_pixmap;
};

如果您想从 Qt Designer 使用它,只需使用推广特色 http://doc.qt.io/qt-4.8/designer-using-custom-widgets.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QPushButton:如何对齐图标和文本 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 按成员序列化

    我已经实现了template
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写

随机推荐

  • 在不使用命令行工具的情况下使用 Python Fabric (fab)

    尽管 Fabric 文档提到了一种使用该库进行 SSH 访问而不需要 fab 命令行工具和 或任务的方法 但我似乎无法管理一种方法来做到这一点 我想运行这个文件 示例 py 通过仅执行 python 示例 py env hosts exam
  • 支持在 Dynamics CRM 2016 中设置 Web 资源样式

    建议和支持的方式是什么来设计 CRM Web 资源的样式 使其与常规 CRM 表单 视图和对话框保持一致 想必您不会引用 CRM 正在使用的相同样式 因为这将不受支持 但是是否有一组可以直接引用的样式 以节省您自己编写的时间 它不是特定于
  • Android中如何处理ConcurrentModificationException

    我正在尝试从 a 中删除项目ArrayList 有时它弹出一个异常 java util ConcurrentModificationException 首先我尝试通过以下方式删除它们array list name remove i 但是失败
  • Fluent NHibernate 有很多外键映射问题

    我正在尝试在 nhibernate 中映射一个简单的数据结构 Tables Employees employeeID int username varchar 30 departmentID int Departments departme
  • 如何将 Spring Boot 应用程序日志文件读取到 Splunk 中? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我希望将日志数据从应用程序发送到 Splunk 我发现这与spring无关 只是Splunk需要一些配置来读取应用程序的日志文件 我想知道
  • 我可以将 SQL Server Management Studio 2005 用于 2008 DB 吗?

    我希望使用 Management Studio 2005 管理 SQL Server 2008 DB 原因是我们的服务器是 64 位计算机 而我们只有 64 位版本的软件 这可能吗 使用 Management Studio 2008 管理
  • 使用 stackalloc 分配的内存的初始化

    如果我分配内存stackalloc in C 内存是否已初始化 with 0 该文档没有提到这一点 只是告诉我们保留了正确的金额 在我的测试中 这种内存默认为0 但这并不意味着它是有保证的 从规格来看 18 8 堆栈分配 新分配的内存的内容
  • 如何重写WPF路由命令调度机制

    我可以以某种方式扩展 WPF 命令路由 以便它首先检查命令是否可以在聚焦字段中调用 如果不能在其他字段中调用 永远不会改变 有什么钩子吗 也许您不知道这是否可行 但在网络上的某个地方看到了类似的内容并且可以保留链接吗 抽象例子 例如 如果我
  • WebRTC:如何为视频编码器启用硬件加速

    我正在尝试在 WebRTC 的帮助下将屏幕捕获的视频发送到 mediasoup WebRTC 库中有一个类 Android 屏幕捕捉器 它可以工作 但在某些设备上的性能非常糟糕 特别是当我使用高清或更好的显示分辨率时 在 stackover
  • OpenCV:链接错误,无法解析外部符号 _cvResize 和 _cvCvtColor

    链接错误的原因很清楚 我的链接过程中缺少一些库 不幸的是 OpenCV 2 4 1 似乎改变了它的内部结构 所以我通过 Google Stackoverflow 搜索功能找到的解决方案只建议我链接到不再存在的库 cv lib 或 cxcor
  • 使用c#生成不记名令牌

    我有一个网络应用程序 我的要求是我需要在每次登录时生成 oauth2 不记名令牌 目前我们使用thinktecture来生成token 但是这个过程每次生成token大约需要7秒的时间 有什么方法可以在不使用 thinktecture 的情
  • SwiftUI 共享表导致 iPad 崩溃

    我正在关注这个教程https jeevatamil medium com how to create share sheet uiactivityviewcontroller in swiftui cef64b26f073 https je
  • 如何用eclipse安装android?

    我想用 eclipse 安装 android sdk 我也使用 Ubuntu 作为操作系统 请给予支持以及关于android的良好学习材料 Regards 要开始使用 Eclipse 进行 Android 开发 您必须安装ADT Plugi
  • 如何使用 glassfish v4 将 http 重定向到 https

    我们在 Glassfish v4 上创建了一个网站 它使用端口 8080 作为 http 使用端口 8081 作为 https 我们的思科防火墙将对端口 80 的请求转发到端口 8080 并将对端口 443 的请求转发到端口 8081 但我
  • 如何使用Eclipse IDE调试基于JavaFX 11的Maven项目(2019-03)

    问题 我无法使用建议的方法调试使用 Eclipse IDE 2019 03 4 11 0 编写和启动的基于 JavaFX 11 的 Maven 项目并用于相关问题 https stackoverflow com questions 5652
  • 如何在 R 中创建 (100%) 堆叠直方图?

    我的数据集 我有以下格式的数据 此处是从 CSV 文件导入 您可以找到 CSV 格式的示例数据集here http cl ly 3F1u0W2b3y081v172A2O PAIR PREFERENCE 1 5 1 3 1 2 2 4 2 1
  • Twig 在第一个特定字符作为分隔符后分割字符串

    我有一个与以下情况相同的问题这个问题 https stackoverflow com q 17304739 6578454 除了可能发生不止一个 是在正文中 一个例子 57b42a0557cdd Filename whatever pdf
  • 将 QWidget 嵌入 X11 窗口

    我想将两个 QWidget 嵌入到使用 XLib 创建的窗口中 我写了这段代码 Assume all the necessary headers included int main int argc char argv QApplicati
  • App Engine Datastore IN 运算符 - 如何使用?

    阅读 http code google com appengine docs python datastore gqlreference html http code google com appengine docs python dat
  • QPushButton:如何对齐图标和文本

    使用 Qt C 我有一些带有图标和文本的按钮 由于所有按钮的文本长度不同 图标未对齐 我尝试使用 QToolButton 代替 button gt setToolButtonStyle Qt ToolButtonTextBesideIcon