带文本的 QToolButton:覆盖最小高度以模仿常规按钮高度

2024-03-21

我正在显示Q工具按钮 http://doc.qt.io/qt-5/qtoolbutton.html带有图标加文本的 s (Qt::图标旁边的工具按钮文本 http://doc.qt.io/qt-5/qt.html#ToolButtonStyle-enum)在工具栏之外。每个按钮都有一个与其关联的 QAction,它确定所使用的图标和显示的文本。所有这些按钮都放置在QGrid布局 http://doc.qt.io/qt-5/QGridLayout.html。到目前为止,一切都很好。

不幸的是,看起来只要您将 QAction 添加到 QToolButton,Qt 就会自动决定将其缩小到最小尺寸,这不是我想要的 QGridLayout。我使用以下几行来纠正水平维度中的这种行为:

QToolButton* pButton = new QToolButton(0);
pButton->addDefaultAction(pAction);
pButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
pButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);

然而,这仍然使我的按钮的高度比常规(推送)按钮更小。我已经尝试过各种其他尺寸政策但没有成功。

如何最好地解决这个问题?有没有可靠的方法来确定“正常”按钮高度?

我的一个想法是创建一个常规的虚拟按钮,将其放置在相同的布局中,然后读取其大小。然后可以将该大小应用于我的 QToolButton,并且虚拟按钮将再次被销毁。有没有更优雅/可靠的方法?


我不明白你想实现什么目标。

之间的区别QPushButton and QToolButton就是它,QToolButton已经实现了 PopupMenu (也可以轻松地为 QPushButton 完成) 据我了解,视觉差异只是 QToolButton 右下角的小箭头,当您使用添加时QActions to QToolButton

这个箭头对我来说是唯一的区别QToolButton and QPushButton。但也许我错过了一些东西。

从你的例子(带有图标+文本的QToolButton:如何将两者居中? https://stackoverflow.com/q/28516012/1917249) 您似乎不想使用该弹出功能。这就是为什么我不明白,为什么要使用 QToolButton 而不是 QPushButton。

在这个例子中显示: 1) 相同高度QToolButton and QPushButton2) 弹出菜单QPushButton

对于我来说,我不明白为什么要使用QToolButton并尝试让它看起来像QPushButton当使用简单时QPushButton as QToolButton

#include <QtGui>
#include <QtWidgets>

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

    // Prepare layout
    QMainWindow *window = new QMainWindow;
    QWidget *centralWidget = new QWidget(window);
    QGridLayout *grid = new QGridLayout(centralWidget);

    QTextEdit *textEdit = new QTextEdit();

    window->setCentralWidget(centralWidget);

    QAction *toolAction = new QAction(window->style()->standardIcon(QStyle::SP_MediaPlay), "ToolButton", window);
    QObject::connect(toolAction, &QAction::triggered, [=]() {
       qDebug() << "action";
    });


    QPushButton *pushButton = new QPushButton(toolAction->icon(), "PushButton1", window);
    pushButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    QPushButton *pushButton2 = new QPushButton(toolAction->icon(), "PushButton2", window);
    pushButton2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    QPushButton *pushButton3 = new QPushButton(toolAction->icon(), "PushButton2", window);
    pushButton3->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    QObject::connect(pushButton3, &QPushButton::released, [window, pushButton3, toolAction](){
       QMenu menu;
       menu.addAction(toolAction);
       QPoint pos = window->mapToGlobal(pushButton3->pos());
       pos += QPoint(0, pushButton3->height());
       menu.exec(pos);
    });

    QObject::connect(pushButton, SIGNAL(pressed()), toolAction, SLOT(trigger()));
    QObject::connect(pushButton2, SIGNAL(pressed()), toolAction, SLOT(trigger()));

    QToolButton *toolButton = new QToolButton(window);
    toolButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
    toolButton->setText("Popup action");
    toolButton->addAction(toolAction);
    toolButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    QToolButton *toolButton2 = new QToolButton(window);
    toolButton2->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
    toolButton2->setDefaultAction(toolAction);
    toolButton2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

    toolButton->setMaximumHeight(pushButton->sizeHint().height());
    toolButton->setMinimumHeight(pushButton->sizeHint().height());
    toolButton2->setMaximumHeight(pushButton->sizeHint().height());
    toolButton2->setMinimumHeight(pushButton->sizeHint().height());

    grid->addWidget(textEdit    ,0,0,1,2);
    grid->addWidget(toolButton  ,1,0,1,1);
    grid->addWidget(pushButton  ,1,1,1,1);
    grid->addWidget(toolButton2 ,2,0,1,1);
    grid->addWidget(pushButton2 ,2,1,1,1);
    grid->addWidget(pushButton3 ,3,0,1,2);

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

带文本的 QToolButton:覆盖最小高度以模仿常规按钮高度 的相关文章

  • Qt 样式表:无法使用 ID 选择器

    我正在学习使用 Qt 样式表向我的应用程序添加不同的样式 我在网上查看了 Qt 文档 其中说你可以使用名为ID Selector可以将主题应用于某些对象 这就是我实现此功能的方式 QPushButton button color red 但
  • 如何以编程方式在 qml 中渲染 vtk 项目?

    到目前为止 我了解到我们在 QML 中有两个线程 我们的主应用程序线程和我们的 场景图 线程 http doc qt io qt 5 qtquick visualcanvas scenegraph html http doc qt io q
  • 无法在 mac osx 上的 QT 中创建新项目

    过去几天我一直坚持这个问题 我已经安装了 QT 4 8 并且也安装了库 但是当我开始创建一个新项目时 我只能选择使用 CMake 创建一个普通的 C 项目 我没有使用自动 qmake 的选项 我不知道为什么 如果有人可以帮忙 我们将不胜感激
  • Qt、QML 和 Windows 8 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我一直对Qt框架引入的QML很好奇 但从未有机会使用它 但现在随着 Windows 8 的到来 基于旧式小部件的界面将变得过时 只是我
  • 如何为列表中的每个元素创建一个按钮并将其放在滚动区域中?

    我有一个列表 每次用户打开文件时都会获取一个元素 我需要创建一个带有文件名 列表中的元素 的按钮 每次将该文件附加到列表中时 并将该按钮放入滚动区域 问题是我总是只有一个按钮 只是更改了名称 filenames def addfiles f
  • 部署 Qt Quick 演示应用程序 Minehunt 时出现全白屏幕

    为了测试部署过程 我尝试部署附带的演示应用程序 Minehunt 我能够让它运行 没有崩溃或错误 但屏幕是全白的 我相信这通常意味着我缺少插件 Dependency walker 报告没有问题 我什至尝试包含 Qt MingW 插件目录中的
  • 为什么我无法使用 Qt 中的 QXmlStreamReader 解析 XML 文件?

    我试图弄清楚 QXmlStreamReader 如何适用于我正在编写的 C 应用程序 我想要解析的 XML 文件是一个大字典 具有复杂的结构和大量的 Unicode 字符 因此我决定使用更简单的文档尝试一个小型测试用例 不幸的是 我碰壁了
  • QNetworkManager 默认情况下是否接受压缩回复?

    我在用Q网络管理器 https doc qt io qt qnetworkaccessmanager html从服务器获取文件 但是我不知道文件在传输过程中是否使用标准 gzip 压缩进行压缩 如果不是 如何让它们下载压缩文件 我该如何去检
  • 如何在 QML 中使用 Font Awesome

    有谁知道如何在 QML 中使用 Font Awesome 吗 我找不到任何文档或任何信息如何在 QML 中使用 Font Awesome 我喜欢做的是使用fontello http fontello com 创建最小的图标集 而不是从 Fo
  • 重新加载 tslib 触摸屏校准

    背景 我正在开发一个基于 Qt 的大型 GUI 它处理与触摸屏的所有用户交互 该程序的设计使得用户不需要访问命令提示符即可执行任何操作 包括重新校准触摸屏 我写了一个 tslib 的模仿品ts calibrate作为运行的实用程序QWidg
  • 我可以取消选中组框中的一组 RadioBottom 吗?

    组 Box 内的单选底部将被视为一组底部 它们是互斥的 我怎样才能清理他们的检查状态 我有几件收音机底部 其中一件经过检查 我怎样才能 清洁 取消选中 所有收音机底部 setChecked 在组内不起作用 我尝试做以下事情但失败了 我的代码
  • 在 py2exe 编译的 Python 脚本中启用 QImage 的 JPEG 支持?

    我正在尝试通过 PyQt4 在 Python 脚本的 QImage 对象中使用 JPEG 图像 脚本本身工作完美 图像加载并且可以操作和渲染等等 但是 当我尝试使用 py2exe 编译 此脚本时 除了 JPEG 图像之外 一切正常 用等效的
  • const QList 警告 = QList() << 0; gcc 4.7.2 的段错误

    因此 主题行中提到的代码会导致 Qt 4 8 3 和 gcc 4 7 2 出现分段错误 这是在 cpp 文件中的任何类 结构之外 并且与 gcc 4 4 一起使用 const QList
  • QT布局,如何使水平布局中的小部件向下移动一行而不是溢出窗口

    现在我有一个 QHBoxLayout W W W W W W 我将尺寸调整得更小 得到 W W W W lt gt 我想要 下划线是黑色空间 W W W W W W 我不确定哪种布局可以做到这一点 有人有主意吗 KDE 设置应用程序可以满足
  • 交叉编译 Qt 4.7 时出现“非法指令”

    我已经在这个问题上苦苦挣扎了一个多星期了 但仍然找不到解决方案 我正在尝试为 ARM 设备交叉编译 Qt 4 7 嵌入式开源版本 构建过程本身可以顺利完成 但生成的二进制文件似乎包含处理器无法理解的指令 构建主机是 i386 上的 Debi
  • 使用Qt设置http get请求参数

    我正在 Qt 中开发一个基本应用程序 它使用 REST API 从 Parse com 检索数据 我浏览了一些类参考和 cURL 手册 但仍然不清楚如何设置请求参数 例如 我想对用户进行身份验证 这是 Parse 提供的curl 示例 cu
  • 如何在QLineEdit/QLabel等中从左到右显示阿拉伯符号?

    在Qt的实现中阿拉伯符号显示在右到左方向 因此任何包含阿拉伯符号的字符串都将右对齐 但我的应用程序想要做的是显示所有文本左到右方向 无论是否包含阿拉伯符号 所有文本都是左对齐的 一个例子如下所示 This is 我想实现什么 就是这样QLi
  • 由于 QCoreApplication 事件循环,QThread 永远不会退出

    Problem 所以我有一个 CommandRetriever 类来保存一些命令 并且should在不同的线程上执行这些命令 class CommandRetriever public CommandRetriever CommandRet
  • Qt同步QNetworkAccessManager获取

    执行同步 QNetworkAccessManager get 的正确方法是什么 The qt wiki http qt shoutwiki com wiki How to wait synchronously for a Signal in
  • Qt 5.4/Qml:防止绑定循环

    我有一个全局单例 设置 它保存应用程序设置 当我尝试运行以下代码时 我得到一个QML CheckBox Binding loop detected for property checked CheckBox checked Settings

随机推荐

  • 在 C++ 纯虚函数上应用“using”关键字

    B 类重写了 A 类的纯虚函数 print C 类继承了 B 类并具有 using A print 语句 那么为什么 C 类不是抽象类呢 class A public virtual void print 0 class B public
  • 仅在多索引中的第二个索引上使用 .loc

    我有多索引数据框 如下所示 value year name 1921 Ah 40 1921 Ai 90 1922 Ah 100 1922 Ai 7 其中year and name是指数 我想选择名称所在的每一行Ai出现 我努力了df loc
  • 通用 C++ 多维迭代器

    在我当前的项目中 我正在处理多维数据结构 底层文件按顺序存储 即一个巨大的数组 没有向量的向量 使用这些数据结构的算法需要知道各个维度的大小 我想知道是否已在某处以通用方式定义了多维迭代器类 以及是否有任何标准或首选方法来解决此问题 目前
  • 如何在 Kendo 菜单中检索 id 值

    我在我的项目中使用 Kendo 菜单 我想在单击所选项目时检索 id 值 我使用了 onSelect 事件 并且能够检索所选项目的文本 如何检索 id 值 您可以使用 HTML5 数据属性来完成此操作 HTML div class k co
  • python多处理池解释器中的断言错误

    我正在编写一个示例程序来测试 python 2 7 2 中工作线程多处理池的使用情况 这是我在 python ubuntu 解释器中编写的代码 gt gt gt from multiprocessing import Pool gt gt
  • Swift:guard let 和 where - 优先级

    有时 我想用guard结合let where简化我的代码 但我想知道 let 的优先级是什么以及在哪里 例如 class Person func check gt Bool print checking return nil func te
  • 无可用服务器时的 Serilog 和 seq

    当使用 Serilog 和 Seq 的应用程序找不到将日志发送到的服务器时 预期的行为是什么 每次尝试记录都会抛出异常吗 我希望我的应用程序使用 Seq 服务器 如果可用 但如果不可用 仍继续运行并记录到文件 当使用 Serilog 和 S
  • 为什么 Pry 不能在 Heroku 的控制台中运行?

    我的目标是使用 Pry 作为我的 Rails 应用程序的控制台 无论是在本地还是在我的临时服务器上 但我无法让它在 Heroku 上工作 我正在跟进these https github com pry pry wiki Setting up
  • 如何从 Xcode 项目中删除 cocoa pods 插件之一

    有人知道如何从 Xcode 项目中删除 cocoa pods 插件之一吗 例如我已经安装了afnetworking and nyximagekit在我的项目中 现在 我想删除nyximagekit但保留afnetwoking 怎么做 从 p
  • 为什么在 Fortran 中使用命令 PRINT 会覆盖输入文件?

    我正在编写代码并使用 Fortran 中的输入和输出功能 代码看起来像这样 仅用于简化 PROGRAM TEST REAL DIMENSION 1000 A REAL B INTEGER T Defining input and outpu
  • 获取文件系统限制

    我想编写一个函数来告诉我是否可以将文件 文件夹写入特定路径 我想这样做而不实际将任何文件写入磁盘 有 WINAPI 函数吗 感谢您的帮助 您可以使用获取文件安全性 http msdn microsoft com en us library
  • opencv rtsp流协议

    我想处理并显示从树莓派相机创建的网络 rtsp 流 我有这个代码 include
  • 我的项目中 SDL2 的链接器错误

    我使用 CMake 和 Code Blocks 从源代码构建 SDL2 并尝试将我自己的项目源链接到以下静态库 libSDL2 a libSDL2main a OpenGL32 lib 这三个库包含在称为 libdir 我使用批处理命令 我
  • 一个可定制的 diff 工具,可以生成报告(XML、HTML 格式)

    我想为非回归测试提供差异报告 我的程序是基于 Java 的 但我没有找到任何 API 来满足我的需求 因此 我使用外部工具 CSDiff 它接受 2 个文件作为参数并返回 HTML 报告 这很好而且很容易设置 现在我遇到的唯一问题是 HTM
  • iPhone——当 alpha 设置为零时,为什么 UIViews 上的 TouchBegan 不触发?

    是否正在进行一些优化以删除视图或其他内容 尽管我已经将其设置为透明 但我仍然希望它能够接收触摸事件 如果 alpha 0 这些事件似乎不会触发 你说得对 在透明视图上检测不到触摸 http developer apple com iphon
  • 1024px宽度的屏幕和1024px宽度的平板电脑是冲突的

    我正在使用 MediaQuery 创建响应式网站布局 如下所示 除了一个邪恶的问题外 一切正常 core css 默认应用于站点 它是桌 面版本的样式表 但正如您在此链接中看到的 当屏幕宽度为 1024px 或以下时 它将链接到 table
  • 无论页数如何,pyPdf 输出文件的大小都相同

    我正在尝试使用 pyPdf 将大型 pdf 中的几页提取到单独的文件中 每当我这样做时 生成的文件大小几乎与源文件相同 我认为这与文件内的书签有关 因为如果页面不包含任何链接 输出文件的大小会非常小 我不知道如何从输出文件中排除书签 fro
  • 如何用不同的颜色绘制填充路径/形状

    我需要为屏幕上的形状着色任何我想要的颜色 我目前正在尝试使用 UIImage 来做到这一点 我想根据我的愿望重新着色 据我所知 做到这一点的唯一方法是获取 UIImage 的各个像素 这需要我编写更多行代码来解决这个问题 除了我写的之外 还
  • 如何在下面顶部的集合视图中添加部分标题

    我正在使用带有搜索栏的集合视图 我通过 cod 添加了搜索栏 起始位置为 0 0 从顶部开始 所以现在我的图像看起来像这样 在此处输入图像描述 1 1 但我需要将标题转到我的搜索栏 我是通过故事板完成的 但是在运行时 我的标题名称和搜索栏具
  • 带文本的 QToolButton:覆盖最小高度以模仿常规按钮高度

    我正在显示Q工具按钮 http doc qt io qt 5 qtoolbutton html带有图标加文本的 s Qt 图标旁边的工具按钮文本 http doc qt io qt 5 qt html ToolButtonStyle enu