【记录问题】Qt QButtonGroup无效果以及获取流式布局高度

【记录问题】Qt QButtonGroup无效果以及获取流式布局FlowLayout高度

QButtonGroup无效果

QPushButton 默认是不可以被选择,所以需要使用setCheckable(true) 方法设置成可以选择,想要单选效果,需要给QButtonGroup添加setExclusive(true)方法;

获取流式布局FlowLayout高度

/**
 * @brief 给出宽度计算出高度
 * @param width 宽度
 * @return
 */
int FlowLayout::getFlowLayoutHeight(int width) const
{
    // 如果FlowLayout中没有子控件,返回0
    if (itemList.isEmpty()) {
        return 0;
    }
    int count = 1; // 计算FlowLayout中控件的行数,初始化为1行,不管咋样最少就是一行
    int lineHeight = 0; // 当前行中控件的最大高度
    int lineWidth = 0; // 当前行已经占据的宽度
    int height = 0; // FlowLayout的总高度
    QMargins edgeDistance = contentsMargins();//边距
    const int itemCount = itemList.count();//获取有多少个子项
    width = width - edgeDistance.left() - edgeDistance.right();
    for (int i = 0; i < itemCount; i++) {
        QLayoutItem *item = itemList.at(i);
        //获取到里面的子项
        QWidget *widget = item->widget();
        QSize s = widget ? widget->sizeHint() : item->sizeHint();
        s.setWidth(s.width() + horizontalSpacing()); // 加上水平方向上的间隔
        // 如果当前行已经占据的宽度加上当前控件的宽度大于FlowLayout的宽度
        if (lineWidth + s.width() > width) {
            lineWidth = 0; // 当前行宽度清零
            count++; // 行数增加
        }
        lineWidth += s.width(); // 当前行宽度增加当前控件的宽度
        lineHeight = qMax(lineHeight, s.height()); // 更新当前行中控件的最大高度
    }
    height = lineHeight *count+(verticalSpacing())*(count-1) + edgeDistance.top() +edgeDistance.bottom();
    return height + 2; // 返回FlowLayout的总高度
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QButtonGroupQT中一个方便的类,用于管理一组互斥的按钮(例如,单选按钮)。通过将多个按钮添加到QButtonGroup中,您可以实现只有一个按钮可以被选中的效果。当一个按钮被选中时,其他按钮将自动取消选择。 QButtonGroup提供了多个便利的方法,例如`addButton()`用于添加按钮,`checkedButton()`用于获取当前选中的按钮,`buttonClicked()`用于处理按钮点击事件等。 以下是一个简单的示例,演示如何使用QButtonGroup: ```python from PyQt5.QtWidgets import QApplication, QWidget, QRadioButton, QVBoxLayout, QButtonGroup import sys class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): vbox = QVBoxLayout() # 创建一个QButtonGroup self.group = QButtonGroup() # 创建多个QRadioButton,并将它们添加到QButtonGroup中 rb1 = QRadioButton('Option 1') rb2 = QRadioButton('Option 2') rb3 = QRadioButton('Option 3') self.group.addButton(rb1) self.group.addButton(rb2) self.group.addButton(rb3) # 将QRadioButton添加到垂直布局中 vbox.addWidget(rb1) vbox.addWidget(rb2) vbox.addWidget(rb3) # 为QButtonGroup绑定按钮点击事件 self.group.buttonClicked.connect(self.on_button_clicked) self.setLayout(vbox) self.setGeometry(300, 300, 300, 200) self.setWindowTitle('QButtonGroup Example') self.show() def on_button_clicked(self, button): # 处理按钮点击事件 print('Button %s clicked' % button.text()) if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 运行程序后,您可以看到三个单选按钮。当您单击其中一个时,`on_button_clicked()`方法将被调用,并显示选中的按钮文本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值