当前位置: 首页 > news >正文

qt QGroupButton 实现两个QPushButton的互斥

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QButtonGroup, QVBoxLayoutclass ExampleApp(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):# 创建两个 QPushButtonself.button1 = QPushButton("按钮1", self)self.button1.setCheckable(True)  # 设置按钮为可选中状态self.button1.setChecked(True)   # 默认选中按钮1self.button2 = QPushButton("按钮2", self)self.button2.setCheckable(True)  # 设置按钮为可选中状态# 创建 QButtonGroup 并将两个按钮加入到按钮组中self.buttonGroup = QButtonGroup(self)self.buttonGroup.addButton(self.button1)self.buttonGroup.addButton(self.button2)# 设置按钮组为互斥模式(默认就是互斥的)self.buttonGroup.setExclusive(True)# 布局layout = QVBoxLayout()layout.addWidget(self.button1)layout.addWidget(self.button2)self.setLayout(layout)# 设置窗口属性self.setWindowTitle("QButtonGroup 示例")self.setGeometry(300, 300, 300, 200)if __name__ == "__main__":app = QApplication(sys.argv)ex = ExampleApp()ex.show()sys.exit(app.exec_())

另一种方式

RoutesItem ::RoutesItem (QWidget *parent): QPushButton(parent)
{setCheckable(true);setStyleSheet("QPushButton {""border-bottom: 1px solid gray;""border-top: 1px solid gray;""border-radius: 0;""padding: 0;"  // 设置按钮的内边距"}""QPushButton:checked {""background-color: lightgray;""border: none;""border-bottom: 1px solid rgb(70, 70, 70);""border-left: 10px solid rgb(70, 70, 70);""border-radius: 0;""}""QLabel {""background-color: transparent;""}");
...
}QButtonGroup *buttonGroup = new QButtonGroup(ui->scrollAreaWidgetContents);
RoutesItem *item = new RoutesItem(ui->scrollAreaWidgetContents);
...
RoutesItem *item2 = new RoutesItem(ui->scrollAreaWidgetContents);
...
buttonGroup->addButton(item);
buttonGroup->addButton(item2);
buttonGroup->setExclusive(true);
// 至此可以实习互斥选中,如需更多操作如:// 连接按钮点击信号
connect(buttonGroup, &QButtonGroup::buttonClicked, this, [](QAbstractButton *btn) {RoutesItem *selectedItem = qobject_cast<RoutesItem *>(btn);if (selectedItem) {// 处理选中的 RoutesItemqDebug() << "Selected item:" << selectedItem->fileName();}
});

相关文章:

  • 游戏引擎学习第232天
  • 解决 pip install tts 报错问题-—SadTalker的AI数字人视频—未来之窗超算中心
  • tomcat 的安装与启动
  • FPGA HR Bank如何支持ODELAY问题分析
  • text-decoration: underline;不生效
  • 土建施工员备考经验分享
  • 《软件设计师》复习笔记(14.3)——设计模式
  • Android12 ServiceManager::addService源码解读
  • Django 结合 Vue 实现简单管理系统的详解
  • JDBC 与 MyBatis 详解:从基础到实践
  • 7、生命周期:魔法的呼吸节奏——React 19 新版钩子
  • Qt 入门 5 之其他窗口部件
  • webgl入门实例-11WebGL 视图矩阵 (View Matrix)基本概念
  • 6.6 “3步调用ChatGPT打造高可靠Python调度器,零依赖实现定时任务自动化“
  • [Unity]-[UI]-[Prefab] 关于UGUI UI Prefab的制作技巧
  • 数据结构——顺序表(C语言实现)
  • 论文阅读:2024 arxiv AI Safety in Generative AI Large Language Models: A Survey
  • Odoo:免费开源的轧制品行业管理软件
  • Python 项目文档编写全攻略:从入门到自动化维护
  • PLM系统如何支持利益相关者分析?沟通矩阵设计
  • 央视网评论员:婚约不是性许可——山西订婚强奸案背后的性教育盲区
  • 虎门站一旅客跳下股道,广铁集团发布情况说明
  • 青岛市政协原副主席杨锡祥一审被控受贿3763万余元
  • 《还有明天》的元叙事:告别“很久很久以前”,书写新的故事
  • 从《阿甘正传》到《此心安处》:小画面里的大时代
  • 海基会副董事长罗文嘉妄称“大陆经济像一潭死水”,国台办回应