PowerModeler/source/attributeView.cpp

62 lines
2.3 KiB
C++

#include "attributeView.h"
#include "attributeTableDelegate.h"
#include "multiLineHeaderView.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)
{
m_tableView = new QTableView(this);
m_tableView->setStyleSheet("QTableView::item{padding-left:5px;} QTableView::item:selected{border:1px solid rgb(70,130,180);}");
m_tableView->verticalHeader()->setVisible(false);
//m_tableView->setTabKeyNavigation(false); //关闭tab键导航
m_attributeTableModel = new AttributeTableModel(m_modelAttributeGroup, this, m_connection, m_attributeTable);
m_tableView->setModel(m_attributeTableModel);
AttributeTableDelegate* delegate = new AttributeTableDelegate(m_tableView, m_connection, m_tableView);
m_tableView->setItemDelegate(delegate);
//自定义表头
m_multiLinHeader = new MultiLineHeaderView(Qt::Horizontal, this);
QColor bg(246, 246, 246);
QColor border(228, 228, 228);
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);
//除了第一列其余列恢复可以手动调整模式
QTimer::singleShot(1000, this, [=](){
for(int i = 1; i < m_multiLinHeader->count(); i++)
m_multiLinHeader->setSectionResizeMode(i, QHeaderView::Interactive);
});
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()
{
m_attributeTableModel->triggerSyncSignal();
}