c++ - Qt - 如何在窗口大小发生变化时更改 QRadiobutton 的大小

标签 c++ css qt

我试图让 QRadioButton 的大小随着窗口的大小而改变。我需要的是,当我将窗口的大小调整为变大(或变小)时,QRadioButton 也应该调整为变大(或变小)。

我尝试使用我用于QPushButton 的方法,但我发现它不起作用(检查底部的 pic1 和 pic2)。 QRadioButton 的大小保持不变。

此外,我也尝试过为QRadioButton设置setStyleSheet,但是点击图片无效,这不是我想要的结果(点击图片对我来说应该是有效的)。 我想知道我应该如何修改我的代码。谢谢!

下面是一些相关的代码:

.h文件

QRadioButton *funcSourceOrientedButton;
QPushButton *funcLockButton;

.cpp文件

QPixmap pixmap(":/images/Function/SourceOriented.png");
QIcon ButtonIcon(pixmap);
funcSourceOrientedButton->setIcon(ButtonIcon);
funcSourceOrientedButton->setIconSize(function_oriented_button_size);
funcSourceOrientedButton->setMinimumSize(function_oriented_button_size);
funcSourceOrientedButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

funcLockButton->setStyleSheet("border-image: url(:/images/Function/WLock.png);");
funcLockButton->setMinimumSize(function_button_size);
funcLockButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

图片如下:

图1

enter image description here

图2

enter image description here

最佳答案

您需要创建一个布局并将这些按钮添加到其中

我的部件.h

#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

class QRadioButton;
class MyWidget : public QWidget
{
    Q_OBJECT

public:
    MyWidget(QWidget *parent = 0);
    ~MyWidget();

    bool eventFilter(QObject *obj, QEvent *event);

private:
    QSize __CalculateIndicatorSize(const QSize & radioBtnSize);
private:
    QRadioButton * m_radioBtn1;
    QRadioButton * m_radioBtn2;

    QString styleForButton_;
    QString styleForIndicator_;
};

#endif // MYWIDGET_H

我的小部件.cpp

#include "mywidget.h"
#include <QHBoxLayout>
#include <QPushButton>
#include <QRadioButton>
#include <QEvent>
MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    styleForButton_ = "QRadioButton{border-width: 10 10 10 10; border-image: url(C:/Users/phamat/Desktop/bg.png) 10 10 10 10;}";
    styleForIndicator_ = "QRadioButton::indicator{width: %1px; height: %2px;}";

    QHBoxLayout * layout = new QHBoxLayout();
    layout->setContentsMargins(20, 20, 20, 20);
    layout->setSpacing(20);
    setLayout(layout);

    m_radioBtn1 = new QRadioButton(this);
    m_radioBtn1->setText("Radio button 1");
    m_radioBtn1->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    m_radioBtn1->setStyleSheet(styleForButton_);
    m_radioBtn1->installEventFilter(this);
    layout->addWidget(m_radioBtn1);

    m_radioBtn2 = new QRadioButton(this);
    m_radioBtn2->setText("Radio button 2");
    m_radioBtn2->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
    m_radioBtn2->setStyleSheet(styleForButton_);
    m_radioBtn2->installEventFilter(this);
    layout->addWidget(m_radioBtn2);
}

MyWidget::~MyWidget()
{
}

bool MyWidget::eventFilter(QObject *obj, QEvent *event)
{
    if (obj == m_radioBtn1)
    {
        if (event->type() == QEvent::Resize)
        {
            QSize size = __CalculateIndicatorSize(m_radioBtn1->size());
            m_radioBtn1->setStyleSheet(styleForButton_ + styleForIndicator_.arg(size.width()).arg(size.height()));
        }
    }
    else if (obj == m_radioBtn2)
    {
        if (event->type() == QEvent::Resize)
        {
            QSize size = __CalculateIndicatorSize(m_radioBtn2->size());
            m_radioBtn2->setStyleSheet(styleForButton_ + styleForIndicator_.arg(size.width()).arg(size.height()));
        }
    }
    return QWidget::eventFilter(obj, event);
}


QSize MyWidget::__CalculateIndicatorSize(const QSize & radioBtnSize)
{
    if (radioBtnSize.width() > 300)
    {
        return QSize(20, 20);
    }
    else if (radioBtnSize.width() > 200)
    {
        return QSize(15, 15);
    }
    else
    {
        return QSize(10, 10);
    }
}

图1

图2

关于c++ - Qt - 如何在窗口大小发生变化时更改 QRadiobutton 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45788833/

相关文章:

c++ - 从 C 代码库在 C++ 中对 unsigned char * 上的 strchr 进行微创更改?

html - Chrome - 网站底部的空白

c++ - 在 QLabel 中隐藏或裁剪重叠文本?

c++ - QApplication::exec() 拒绝返回(在控制台程序中)

构造函数中的 C++ 类型特征导致错误

c++ - 构建发布/调试 VS2010 C++

c++ - 使用 getline 和 strtok 以某种方式从 istringstream 读取?

html - Bootstrap 4 表响应 tbody 滚动

html - 将页脚元素放置到 div 的底部而不使用边距 - bootstrap

c++ - Qt 4.6 OpenGL GLSL