#include "nmWxSelectResultWellsWidget.h" #include #include #include // 修改:使用单选按钮 #include #include // ---------------------- 单个井条目 ---------------------- nmWxSelectResultWellItemWidget::nmWxSelectResultWellItemWidget(QWidget* parent, const QString& name) : QWidget(parent), m_sName(name) { initUI(); } void nmWxSelectResultWellItemWidget::initUI() { QHBoxLayout* layout = new QHBoxLayout(this); layout->setContentsMargins(5, 2, 5, 2); m_pRadioButton = new QRadioButton(m_sName, this); // 使用单选按钮 layout->addWidget(m_pRadioButton); connect(m_pRadioButton, SIGNAL(toggled(bool)), this, SLOT(onRadioButtonToggled(bool))); } bool nmWxSelectResultWellItemWidget::isSelected() const { return m_pRadioButton->isChecked(); } void nmWxSelectResultWellItemWidget::setSelected(bool selected) { m_pRadioButton->setChecked(selected); } QString nmWxSelectResultWellItemWidget::getName() const { return m_sName; } void nmWxSelectResultWellItemWidget::onRadioButtonToggled(bool checked) { if (checked) { emit sigItemClicked(); // 只有选中时才发射信号 } } QRadioButton* nmWxSelectResultWellItemWidget::getRadioButton() { return m_pRadioButton; } // ---------------------- 井列表管理 ---------------------- nmWxSelectResultWellsWidget::nmWxSelectResultWellsWidget(QWidget* parent) : QWidget(parent), m_pListWidget(new QListWidget(this)), m_pButtonGroup(new QButtonGroup(this)) { // 初始化按钮组 m_pButtonGroup->setExclusive(true); // 确保单选 QVBoxLayout* layout = new QVBoxLayout(this); layout->addWidget(new QLabel(tr("Select Well:"))); layout->addWidget(m_pListWidget); m_pListWidget->setSelectionMode(QAbstractItemView::NoSelection); } void nmWxSelectResultWellsWidget::addItem(const QString& name) { m_items.append(name); QListWidgetItem* item = new QListWidgetItem(); item->setSizeHint(QSize(150, 25)); nmWxSelectResultWellItemWidget* widget = new nmWxSelectResultWellItemWidget(nullptr, name); m_pListWidget->addItem(item); m_pListWidget->setItemWidget(item, widget); // 将单选按钮加入按钮组 m_pButtonGroup->addButton(widget->getRadioButton()); // 需要添加getRadioButton()方法 connect(widget, SIGNAL(sigItemClicked()), this, SLOT(handleItemSelection())); } QString nmWxSelectResultWellsWidget::getSelectedItem() const { QAbstractButton* checkedButton = m_pButtonGroup->checkedButton(); if (checkedButton) { // 通过按钮找到对应的widget QWidget* widget = checkedButton->parentWidget(); if (widget) { nmWxSelectResultWellItemWidget* itemWidget = qobject_cast(widget); if (itemWidget) { return itemWidget->getName(); } } } return QString(); } void nmWxSelectResultWellsWidget::setSelectedItem(const QString& name) { for (int i = 0; i < m_pListWidget->count(); ++i) { auto widget = static_cast( m_pListWidget->itemWidget(m_pListWidget->item(i)) ); if (widget->getName() == name) { widget->setSelected(true); break; } } }