You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nmWTAI-Platform/Src/nmNum/nmSubWxs/nmWxSelectResultWellsWidget...

102 lines
3.1 KiB
C++

#include "nmWxSelectResultWellsWidget.h"
#include <QListWidgetItem>
#include <QHBoxLayout>
#include <QRadioButton> // 修改:使用单选按钮
#include <QLabel>
#include <QButtonGroup>
// ---------------------- 单个井条目 ----------------------
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<nmWxSelectResultWellItemWidget*>(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<nmWxSelectResultWellItemWidget*>(
m_pListWidget->itemWidget(m_pListWidget->item(i))
);
if (widget->getName() == name) {
widget->setSelected(true);
break;
}
}
}