gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:08:29 30 4
gpt4 key购买 nike

我试图让 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com