#include "attributeView.h" #include "attributeTableDelegate.h" #include "multiLineHeaderView.h" #include #include #include 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->setFocusPolicy(Qt::NoFocus); //避免视图抢Editor的焦点 m_tableView->setTabKeyNavigation(false); //关闭tab键导航 m_attributeTableModel = new AttributeTableModel(m_modelAttributeGroup, this, m_connection, m_attributeTable); m_tableView->setModel(m_attributeTableModel); m_attributeTableDelegate = new AttributeTableDelegate(m_tableView, m_connection, m_tableView); m_tableView->setItemDelegate(m_attributeTableDelegate); //自定义表头 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(); }