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.
102 lines
3.1 KiB
C++
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;
|
|
}
|
|
}
|
|
} |