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.
nmWATI/Src/nmNum/nmSubWxs/nmWxSelectWellsWidget.cpp

113 lines
3.2 KiB
C++

#include "nmWxSelectWellsWidget.h"
#include <QLineEdit>
#include <QCheckBox>
#include <QEvent>
#include <QStringList>
#include <QHBoxLayout>
#include <QMouseEvent>
#include <QDebug>
#include <QListWidget>
#include "nmData/nmDataLogFile.h"
nmWxSelectWellsWidget::nmWxSelectWellsWidget(QWidget* aParent) :
QWidget(aParent),
m_pListWidget(new QListWidget(this)),
m_pLineEdit(new QLineEdit(this))
{
QVBoxLayout* layout = new QVBoxLayout;
layout->addWidget(m_pLineEdit);
layout->addWidget(m_pListWidget);
this->setLayout(layout);
}
void nmWxSelectWellsWidget::addItems(QStringList items, QList<QVariant> values)
{
if (m_items.count() > values.count()) {
return;
}
for (int i = 0; i < items.count(); i++) {
this->addItem(items[i], values[i]);
}
}
void nmWxSelectWellsWidget::addItem(QString name, QVariant value)
{
m_items.append(name);
m_values.append(value);
nmWxSelectWellItemWidget* itemWidget = new nmWxSelectWellItemWidget(NULL, name, value);
itemWidget->setFixedHeight(25);
QListWidgetItem* item = new QListWidgetItem(m_pListWidget);
item->setSizeHint(QSize(item->sizeHint().width(), 25));
m_pListWidget->addItem(item);
m_pListWidget->setItemWidget(item, itemWidget);
connect(itemWidget, SIGNAL(sigItemClicked()), this, SLOT(onUpdateSelections()));
}
void nmWxSelectWellsWidget::onUpdateSelections()
{
QStringList nameList;
// 遍历所有的itemWidget获取所有被选中的信息
for (int i = 0; i < m_pListWidget->count(); i++) {
nmWxSelectWellItemWidget* itemWidget = static_cast<nmWxSelectWellItemWidget*>(m_pListWidget->itemWidget(m_pListWidget->item(i)));
if (itemWidget->getSelected()) {
nameList.append(m_items[i]);
}
}
m_pLineEdit->setText(nameList.join(","));
}
nmWxSelectWellItemWidget::nmWxSelectWellItemWidget()
{
}
nmWxSelectWellItemWidget::nmWxSelectWellItemWidget(QWidget *parent, QString name, QVariant value)
{
m_sName = name;
m_iValue = value;
m_pCBox = NULL;
this->initUI();
}
void nmWxSelectWellItemWidget::setSelected(bool selected)
{
if (m_pCBox) {
m_pCBox->setChecked(selected);
}
}
bool nmWxSelectWellItemWidget::getSelected()
{
if (m_pCBox) {
return m_pCBox->isChecked();
}
return false;
}
void nmWxSelectWellItemWidget::toggleSelected()
{
this->setSelected(!this->getSelected());
}
void nmWxSelectWellItemWidget::initUI()
{
// 可以设置鼠标样式,表明这个部件可以被点击
setCursor(Qt::PointingHandCursor);
// 设置QCheckBox
QHBoxLayout* layout = new QHBoxLayout;
setLayout(layout);
m_pCBox = new QCheckBox(this);
m_pCBox->setText(m_sName);
layout->setAlignment(Qt::AlignVCenter);
}
void nmWxSelectWellItemWidget::mousePressEvent(QMouseEvent *event)
{
// 当鼠标左键被按下时,执行一些操作
if (event->button() == Qt::LeftButton) {
// 处理点击事件,例如发出一个信号或者调用一个槽函数
qDebug() << "ClickableWidget was clicked!";
}
QWidget::mousePressEvent(event); // 调用基类的处理函数
this->toggleSelected();
emit this->sigItemClicked();
}