105 lines
4.5 KiB
C++
105 lines
4.5 KiB
C++
#include "attributeView.h"
|
||
#include "attributeTableDelegate.h"
|
||
#include "multiLineHeaderView.h"
|
||
//#include "sqlQueryExecutor.h"
|
||
#include "dataSyncManager.h"
|
||
#include <QHeaderView>
|
||
#include <QVBoxLayout>
|
||
#include <QTimer>
|
||
|
||
AttributeView::AttributeView(const ModelAttributeGroup& modelAttributeGroup, QWidget* parent, const QString& connection, const QString& tableName)
|
||
: QWidget(parent)
|
||
, m_connection(connection)
|
||
, m_attributeTable(tableName)
|
||
, m_modelAttributeGroup(modelAttributeGroup)
|
||
{
|
||
//需要进行数据同步,因此从PublicGroupSyncManager中统一获取数据
|
||
m_attributeGroup = DataSyncManager::instance().getGroup(m_modelAttributeGroup.groupID);
|
||
|
||
m_tableView = new QTableView(this);
|
||
m_tableView->setStyleSheet("QTableView::item{padding-left:5px;} QTableView::item:selected{color:rgb(0,0,0); border:1px solid rgb(70,130,180);}");
|
||
m_tableView->verticalHeader()->setVisible(false);
|
||
m_tableView->setTabKeyNavigation(false); //关闭tab键导航,对自定义Eidtor设置焦点时(比如lineEdit)会触发tab键,目前尚未清楚为什么
|
||
m_tableView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed); //禁用自动触发编辑的所有方式(自定义代理中按要求实现,这里是双击和空格)
|
||
|
||
m_attributeTableModel = new AttributeTableModel(m_modelAttributeGroup, this, m_connection, m_attributeTable);
|
||
m_tableView->setModel(m_attributeTableModel);
|
||
m_attributeTableModel->setSelectionModel(m_tableView->selectionModel()); //注意selectionModel()一定要在视图setModel后,否则返回的是空指针
|
||
|
||
m_attributeTableDelegate = new AttributeTableDelegate(m_tableView, m_connection, m_tableView);
|
||
m_tableView->setItemDelegate(m_attributeTableDelegate);
|
||
|
||
//自定义表头
|
||
m_multiLinHeader = new MultiLineHeaderView(Qt::Horizontal, this);
|
||
QColor bg(40, 40, 40);
|
||
QColor border(30, 30, 30);
|
||
m_multiLinHeader->setBackgroundColor(bg);
|
||
m_multiLinHeader->setBorderColor(border);
|
||
//主标题加粗展示
|
||
for(int i =0; i < m_attributeTableModel->columnCount(); i++)
|
||
{
|
||
HeaderLineStyle mainTitleStyle;
|
||
mainTitleStyle.font.setBold(true);
|
||
m_multiLinHeader->setSectionLineStyle(i, 0, mainTitleStyle);
|
||
HeaderLineStyle subTitleStyle;
|
||
//subTitleStyle.font.setPointSize(8);
|
||
m_multiLinHeader->setSectionLineStyle(i, 1, subTitleStyle);
|
||
}
|
||
m_tableView->setHorizontalHeader(m_multiLinHeader);
|
||
//除了第一列其余列恢复可以手动调整模式,并根据外部承载容器的宽度调整section
|
||
QTimer::singleShot(1000, this, [=](){
|
||
int containerWidth = this->width() - 100;
|
||
int totalSize = m_multiLinHeader->length() - m_multiLinHeader->sectionSize(0);
|
||
for(int i = 1; i < m_multiLinHeader->count(); i++)
|
||
{
|
||
//恢复手动调整模式
|
||
m_multiLinHeader->setSectionResizeMode(i, QHeaderView::Interactive);
|
||
//根据比例计算每个section应当对应的大小
|
||
/*double ratio = m_multiLinHeader->sectionSize(i) / (double)totalSize;
|
||
int size = containerWidth * ratio;
|
||
m_multiLinHeader->resizeSection(i, size);*/
|
||
}
|
||
});
|
||
|
||
m_vLayout = new QVBoxLayout(this);
|
||
m_vLayout->setSpacing(0);
|
||
m_vLayout->setContentsMargins(0, 0, 0, 0);
|
||
m_vLayout->addWidget(m_tableView);
|
||
this->setLayout(m_vLayout);
|
||
}
|
||
|
||
AttributeView::~AttributeView()
|
||
{}
|
||
|
||
void AttributeView::active()
|
||
{
|
||
if(m_attributeGroup.isPublic && m_attributeGroup.version != DataSyncManager::instance().getGropuVersion(m_attributeGroup.id))
|
||
{
|
||
//提示强制刷新
|
||
emit showMessage(type_information, QString::fromWCharArray(L"提示"),
|
||
QString::fromWCharArray(L"该属性组为公共组,检测到数据发生更新,需要进行强制刷新"));
|
||
|
||
m_attributeTableModel->forceRefresh();
|
||
m_attributeGroup.version = DataSyncManager::instance().getGropuVersion(m_attributeGroup.id);
|
||
}
|
||
else
|
||
m_attributeTableModel->triggerSyncSignal();
|
||
}
|
||
|
||
void AttributeView::setEditable(bool editable)
|
||
{
|
||
if(editable)
|
||
m_tableView->setEditTriggers(QAbstractItemView::DoubleClicked | QAbstractItemView::EditKeyPressed);
|
||
else
|
||
m_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
||
}
|
||
|
||
void AttributeView::syncChangeRecord()
|
||
{
|
||
if(m_attributeGroup.isPublic)
|
||
{
|
||
m_attributeGroup.version++;
|
||
DataSyncManager::instance().syncGroupVersion(m_attributeGroup.id, m_attributeGroup.version);
|
||
}
|
||
}
|