c++ - 如何用QToolButton正确管理文本和图标?

标签 c++ qt qt5 qtoolbutton

我的代码片段如下所示:

nextPageBtn = new QToolButton();
nextPageBtn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
nextPageBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
nextPageBtn->setIcon(QIcon(":/next.png"));
nextPageBtn->setText("Next");

目前我有两个问题。

第一:
我希望文本位于图标的左侧,但使用我提供的代码,文本位于右侧,如下所示: enter image description here

第二:
当窗口放大时,我无法找到将文本和图标保留在按钮中心的方法。当按钮变大时,它看起来像这样:enter image description here

编辑:
这就是我管理布局的方式:

nextPageHLayout = new QHBoxLayout; //This is the layout for QToolButton, it has two spacers and a QToolButton
mainVLayout->addLayout(nextPageHLayout); //mainVLayout is the main layout, and I put the mainVLayout to the central widget, and it also contains a QLabel above the nextPageHLayout

QSpacerItem *leftBtnSpacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Fixed);
nextPageHLayout->addSpacerItem(leftBtnSpacer);

nextPageBtn = new QToolButton(mainWidget);
nextPageHLayout->addWidget(nextPageBtn);
nextPageBtn->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
nextPageBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
nextPageBtn->setIcon(QIcon(":/next.png"));
nextPageBtn->setText("Next");

QSpacerItem *rightBtnSpacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Fixed);
nextPageHLayout->addSpacerItem(rightBtnSpacer);

最佳答案

您必须进行以下更改:

  • 您不应更改 QToolButton 的大小策略,这就是它扩展的原因。

  • 您必须更改 layoutDirectionQt::RightToLeft


QHBoxLayout * nextPageHLayout = new QHBoxLayout; //This is the layout for QToolButton, it has two spacers and a QToolButton
mainVLayout->addLayout(nextPageHLayout); //mainVLayout is the main layout, and it also contains a QLabel above the nextPageHLayout

QSpacerItem *leftBtnSpacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum);
nextPageHLayout->addSpacerItem(leftBtnSpacer);

nextPageBtn = new QToolButton(mainWidget);
nextPageHLayout->addWidget(nextPageBtn);
nextPageBtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
nextPageBtn->setIcon(QIcon(":/next.png"));
nextPageBtn->setText("Next");
nextPageBtn->setLayoutDirection(Qt::RightToLeft);

QSpacerItem *rightBtnSpacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum);
nextPageHLayout->addSpacerItem(rightBtnSpacer);

enter image description here

enter image description here

关于c++ - 如何用QToolButton正确管理文本和图标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49828339/

相关文章:

C++ 转换指针数组(没有数据丢失或过度使用内存)

c++ - 编译 VNC 服务器二进制文件(适用于 Android)

c++ - 从 Qt 中的 QInputDialog 获取多个输入

c++ - qt在编译时生成包含git hash的头文件并使用文件强制重建

qt5 - 如何改变QGLWidget的交换间隔

c++ - 使用函数类型语法声明成员函数

c++ - 现在对临时工程的非 const 引用?

c++ - QTextEdit显示的 block 中图像后的文本格式

c++ - QCompleter::activated disconnected after losing and gaining focus

c++ - __do_global_ctors 段错误在项目的某处,无法找到它