2017-08-21 105 views
2

我试图让QRadioButton的大小随窗口大小而变化。我需要的是,当我调整窗口的大小以使其变得更大(或更小)时,QRadioButton也应该调整为变得更大(或更小)。Qt - 在窗口大小变化时如何更改QRadiobutton的大小

我试着用我用于QPushButton的方法,但是我发现它不起作用(检查底部的图片1和图片2)。 QRadioButton的大小只是保持不变。

此外,我也尝试setStyleSheetQRadioButton,但然后我点击图片是无效的,这不是我想要的结果(点击图片应该在我的情况下是有效的)。 我想知道我应该如何修改我的代码。谢谢!

下面是一些相关的代码:

.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); 

这里的图片:

PIC1

enter image description here

PIC2

enter image description here

回答

1

您需要创建一个布局和添加这些按钮,将其

mywidget.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 

mywidget.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

PIC 2

+0

的OP指QRadioButton。 – eyllanesc

+0

更新了代码。我为QRadioButton添加了样式表,以便轻松知道尺寸变化 –

+0

对不起,我想我没有解释清楚。我的意思是整个图片(包括文字),而不仅仅是框架。我再次编辑了这个问题。 此外,我在代码中添加了布局,但似乎这不能解决我的问题。 – Gary