如何获取Qt窗口中的所有按钮类型并区分处理?
获取窗口中所有按钮类型并区分处理
要获取窗口中所有类型的按钮,你可以利用Qt中所有按钮控件的共同基类QAbstractButton,通过findChildren方法一次性获取所有继承自它的控件实例,之后再通过qobject_cast区分具体类型:
实现代码
// 获取所有继承自QAbstractButton的控件 QList<QAbstractButton*> list = this->findChildren<QAbstractButton*>(); for (auto* but : list) { qDebug() << " " << but->objectName(); if (QToolButton* tbn = qobject_cast<QToolButton*>(but)) { connect(but, SIGNAL(pressed()), this, SLOT(toolButton_pressed())); connect(but, SIGNAL(released()), this, SLOT(toolButton_released())); } else if (QPushButton* pbn = qobject_cast<QPushButton*>(but)) { connect(but, SIGNAL(pressed()), this, SLOT(pushButton_pressed())); connect(but, SIGNAL(released()), this, SLOT(pushButton_released())); } // 如果需要处理其他按钮类型(如QCheckBox、QRadioButton),可以继续添加else if分支 }
说明
QAbstractButton是Qt所有按钮控件的基类,包括QToolButton、QPushButton、QCheckBox、QRadioButton等,因此findChildren<QAbstractButton*>()会返回窗口中所有这类控件。- 如果你只需要处理
QToolButton和QPushButton,现有的qobject_cast判断会自动过滤掉其他按钮类型。 - 若使用Qt 5及以上版本,推荐使用更类型安全的新信号槽语法,例如:
connect(tbn, &QToolButton::pressed, this, &YourClass::toolButton_pressed);
内容的提问来源于stack exchange,提问作者Cesar
相关产品推荐
相关产品推荐

