#include #include #include #include #include #include #include "diagramEditor/wizardBusTableDelegate.h" #include "global.h" WizardBusTableDelegate::WizardBusTableDelegate(QObject *parent) : QStyledItemDelegate(parent) { }; WizardBusTableDelegate::~WizardBusTableDelegate() { } QWidget* WizardBusTableDelegate::createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const { if(index.column() == 1) //电压 { QComboBox *editor = new QComboBox(parent); editor->addItem("220KV",QVariant(220)); editor->addItem("110KV",QVariant(110)); editor->addItem("35KV",QVariant(35)); editor->addItem("10KV",QVariant(10)); editor->addItem("6KV",QVariant(6)); editor->addItem("0.4KV",QVariant(0.4)); return editor; } else if(index.column() == 2) //单双母 { QComboBox *editor = new QComboBox(parent); editor->addItem("双母线",2); editor->addItem("单母线",1); return editor; } else if(index.column() == 4) //接线方式 { QComboBox *editor = new QComboBox(parent); editor->addItems({"分段连接"}); return editor; } return nullptr; } void WizardBusTableDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const { if(index.column() == 1 || index.column() == 2 || index.column() == 4) { QComboBox* comboBox = static_cast(editor); comboBox->setCurrentText(index.data(Qt::EditRole).toString()); } } void WizardBusTableDelegate::setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const { if(index.column() == 1 || index.column() == 2 || index.column() == 4) { QComboBox* comboBox = static_cast(editor); QVariant data = comboBox->currentData(); QVariant lastData = index.data(Qt::UserRole); //model->setData(index,lastData,Qt::UserRole+1); //将旧数据保存到role+1 model->setData(index, comboBox->currentText(), Qt::EditRole); model->setData(index, data, Qt::UserRole); // 关联数据 //if(index.data(Qt::UserRole) != index.data(Qt::UserRole+1)) //状态改变时才发送 { emit editingFinished(index, data.toString()); //发送自定义信号 } } } bool WizardBusTableDelegate::editorEvent(QEvent* event, QAbstractItemModel* model, const QStyleOptionViewItem& option, const QModelIndex& index) { if (event->type() == QEvent::MouseButtonPress) { if(index.column() == 3) { QDialog dialog(option.widget->parentWidget()); dialog.setWindowTitle("选择分段"); dialog.resize(300, 150); QModelIndex typeIndex = index.sibling(index.row(), 2); int nData = typeIndex.data(Qt::UserRole).toInt(); if(nData == 2) //双母 { // 创建两个组合框并添加数据 QComboBox *combo1 = new QComboBox(&dialog); combo1->addItem("不分段", QVariant(1)); combo1->addItem("2", QVariant(2)); combo1->addItem("3", QVariant(3)); combo1->addItem("4", QVariant(4)); combo1->addItem("5", QVariant(5)); combo1->addItem("6", QVariant(6)); combo1->addItem("7", QVariant(7)); combo1->addItem("8", QVariant(8)); QComboBox *combo2 = new QComboBox(&dialog); combo2->addItem("不分段", QVariant(1)); combo2->addItem("2", QVariant(2)); combo2->addItem("3", QVariant(3)); combo2->addItem("4", QVariant(4)); combo2->addItem("5", QVariant(5)); combo2->addItem("6", QVariant(6)); combo2->addItem("7", QVariant(7)); combo2->addItem("8", QVariant(8)); // 确定按钮 QPushButton *btnOk = new QPushButton("确定", &dialog); connect(btnOk, &QPushButton::clicked, &dialog, &QDialog::accept); // 布局 QVBoxLayout *layout = new QVBoxLayout(&dialog); QLabel *label1 = new QLabel("母线1:", &dialog); layout->addWidget(label1); layout->addWidget(combo1); QLabel *label2 = new QLabel("母线2:", &dialog); layout->addWidget(label2); layout->addWidget(combo2); QHBoxLayout *btnLayout = new QHBoxLayout; btnLayout->addStretch(); btnLayout->addWidget(btnOk); layout->addLayout(btnLayout); // 显示对话框 if (dialog.exec() == QDialog::Accepted) { // 获取两个组合框的文本和数据 QString text1 = combo1->currentText(); QVariant data1 = combo1->currentData(); QString text2 = combo2->currentText(); QVariant data2 = combo2->currentData(); // 组合显示文本 QString displayText = text1 + ";" + text2; // 组合数据(使用自定义格式) QVariant combinedData = QString("%1,%2").arg(data1.toInt()).arg(data2.toInt()); // 保存到模型 model->setData(index, displayText, Qt::DisplayRole); // 显示文本 model->setData(index, combinedData, Qt::UserRole); // 关联数据 emit editingFinished(index, combinedData.toString()); } } else{ //单母 // 1个组合框并添加数据 QComboBox *combo1 = new QComboBox(&dialog); combo1->addItem("不分段", QVariant(1)); combo1->addItem("2", QVariant(2)); combo1->addItem("3", QVariant(3)); combo1->addItem("4", QVariant(4)); combo1->addItem("5", QVariant(5)); combo1->addItem("6", QVariant(6)); combo1->addItem("7", QVariant(7)); combo1->addItem("8", QVariant(8)); // 确定按钮 QPushButton *btnOk = new QPushButton("确定", &dialog); connect(btnOk, &QPushButton::clicked, &dialog, &QDialog::accept); // 布局 QHBoxLayout *layout = new QHBoxLayout(&dialog); QLabel *label1 = new QLabel("母线:", &dialog); layout->addWidget(label1); layout->addWidget(combo1); QVBoxLayout *btnLayout = new QVBoxLayout; btnLayout->addStretch(); btnLayout->addWidget(btnOk); layout->addLayout(btnLayout); // 显示对话框 if (dialog.exec() == QDialog::Accepted) { // 获取两个组合框的文本和数据 QString text1 = combo1->currentText(); QVariant data1 = combo1->currentData(); // 组合显示文本 QString displayText = "分段:"+text1; // 组合数据(使用自定义格式) QVariant combinedData = QString("%1").arg(data1.toInt()); // 保存到模型 model->setData(index, displayText, Qt::DisplayRole); // 显示文本 model->setData(index, combinedData, Qt::UserRole); // 关联数据 emit editingFinished(index, combinedData.toString()); } } return true; } } return QStyledItemDelegate::editorEvent(event, model, option, index); } /*void WizardBusTableDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const { //根据行号设置交替色 QStyleOptionViewItem opt = option; initStyleOption(&opt, index); QModelIndex firstColIndex = index.sibling(index.row(), 0); TableItemState state = TableItemState(firstColIndex.data(Qt::UserRole).toInt()); //先执行默认绘制(包括背景、文本等基础元素) QStyledItemDelegate::paint(painter, opt, index); }*/