238 lines
9.0 KiB
C++
238 lines
9.0 KiB
C++
#include <QComboBox>
|
|
#include <QEvent>
|
|
#include <QDialog>
|
|
#include <QPushButton>
|
|
#include <QVBoxLayout>
|
|
#include <QLabel>
|
|
|
|
#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;
|
|
}
|
|
|
|
/*bool ProjectTableDelegate::eventFilter(QObject* obj, QEvent* event)
|
|
{
|
|
if (event->type() == QEvent::KeyPress) {
|
|
QKeyEvent* keyEvent = static_cast<QKeyEvent*>(event);
|
|
if (keyEvent->key() == Qt::Key_Return || keyEvent->key() == Qt::Key_Enter) {
|
|
QLineEdit* editor = qobject_cast<QLineEdit*>(obj);
|
|
if (editor) {
|
|
emit yourCustomSignal(editor->text());
|
|
commitData(editor); // 显式提交数据
|
|
closeEditor(editor); // 关闭编辑器
|
|
return true; // 阻止事件继续传播
|
|
}
|
|
}
|
|
}
|
|
return QStyledItemDelegate::eventFilter(obj, event);
|
|
}*/
|
|
|
|
void WizardBusTableDelegate::setEditorData(QWidget* editor, const QModelIndex& index) const
|
|
{
|
|
if(index.column() == 1 || index.column() == 2 || index.column() == 4)
|
|
{
|
|
QComboBox* comboBox = static_cast<QComboBox*>(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<QComboBox*>(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);
|
|
|
|
}*/
|