资源简介

QT QTableView 多行表头,自定义表头,继承 QTableView

资源截图

代码片段和文件信息

#include 
#include 

#include “HHeaderItemDelegate.h“
#include “HHeaderView.h“
#include 

HHeaderItemDelegate::HHeaderItemDelegate(Qobject *parent) : QstyledItemDelegate(parent)
{
}

void HHeaderItemDelegate::setHeaderView(HHeaderView *pHeader)
{
    m_pHeaderView = pHeader;
}

//! headerView中绘制的item,根据不同的操作显示不同的效果
void HHeaderItemDelegate::paint (QPainter * painter
                                const QstyleOptionViewItem& option
                                const QModelIndex &index) const
{

    int row = index.row();
    int col = index.column();

    //const int textMargin = QApplication::style()->pixelMetric(Qstyle::PM_FocusframeHMargin) + 1;
    
    QRect smallRect;
    //判断是否有checkbox
    //! 目前我是不会设置checkbox的
    if (m_pHeaderView->isCheckedEnable(row col))
    {
        smallRect = Qstyle::alignedRect(option.direction Qt::AlignCenter
                                        QSize(option.fontMetrics.width(index.data(Qt::DisplayRole).toString()) + 25 option.fontMetrics.height() + 3)
                                        option.rect);
    }
    else
    {
        smallRect = Qstyle::alignedRect(option.direction Qt::AlignCenter
                                        QSize(option.fontMetrics.width(index.data(Qt::DisplayRole).toString()) + 8 option.fontMetrics.height() + 3)
                                        option.rect);
    }
    
    QstyleOptionHeader header_opt;
    header_opt.rect = option.rect;
    header_opt.position = QstyleOptionHeader::Middle;
    header_opt.textAlignment = Qt::AlignCenter;

    header_opt.state = option.state;
    //header_opt.state |= Qstyle::State_HasFocus;//Qstyle::State_Enabled | Qstyle::State_Horizontal | Qstyle::State_None | Qstyle::State_Raised;

    //判断是否能够排序
    //! 支持排序
    if (m_pHeaderView->isSortedEnable(row col))
    {
        //可以排序
        //获取它当前的排序顺序
        int ret = m_pHeaderView->sortedDirection(row col);
        if (0 == ret)
        {
            header_opt.sortIndicator = QstyleOptionHeader::SortUp;
        }
        else if (1 == ret)
        {
            header_opt.sortIndicator = QstyleOptionHeader::SortDown;
        }
        else
        {
            header_opt.sortIndicator = QstyleOptionHeader::None;
        }    
    }
    if (m_pHeaderView->isItemPress(row col))
    {
        header_opt.state |= Qstyle::State_Sunken; //按钮按下效果
    }

    painter->save();
    QApplication::style()->drawControl(Qstyle::CE_Header &header_opt painter);
    painter->restore();
    painter->setPen(QColor(25500));
    QstyleOptionViewItemV4 xopt(option);
    xopt.state &= ~Qstyle::State_MouseOver;
    if (m_pHeaderView->isCheckedEnable(row col))
    {
        //判断是该单元格是否有checkbox
        xopt.features |= QstyleOptionViewItemV4::HasCheckIndicator;

        //判断checkbox的状态
        Qt::CheckState state = m_pHeaderView->checkedState(row col);
        if (Qt:

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6988  2016-09-07 14:35  testHeadView\HHeaderItemDelegate.cpp

     文件        988  2016-09-07 14:31  testHeadView\HHeaderItemDelegate.h

     文件       5448  2016-11-14 15:58  testHeadView\HHeaderModel.cpp

     文件       2606  2016-08-26 14:28  testHeadView\HHeaderModel.h

     文件      17281  2018-02-24 15:39  testHeadView\HHeaderView.cpp

     文件       3757  2016-09-06 17:16  testHeadView\HHeaderView.h

     文件        193  2016-09-08 09:48  testHeadView\main.cpp

     文件       1397  2016-11-14 16:28  testHeadView\Readme.txt

     文件       2182  2016-11-14 15:53  testHeadView\TcTabelModel.cpp

     文件        758  2016-09-08 17:55  testHeadView\TcTabelModel.h

     文件       4336  2016-11-14 15:58  testHeadView\TcTableView.cpp

     文件       1012  2016-09-26 10:24  testHeadView\TcTableView.h

     文件       1817  2016-11-14 15:56  testHeadView\TcTableWidget.cpp

     文件        633  2016-09-08 17:23  testHeadView\TcTableWidget.h

     文件       2843  2016-09-08 17:21  testHeadView\TcTableWidget.ui

     文件        777  2016-11-14 15:57  testHeadView\testHeadView.pro

     文件       2377  2016-08-24 18:24  testHeadView\VHeaderModel.cpp

     文件        795  2016-08-24 18:08  testHeadView\VHeaderModel.h

     文件       2456  2016-08-24 18:21  testHeadView\VHeaderView.cpp

     文件        609  2016-08-24 18:08  testHeadView\VHeaderView.h

     目录          0  2018-02-24 18:34  testHeadView\bin

     目录          0  2018-02-24 18:35  testHeadView\platforms

     目录          0  2018-02-24 18:35  testHeadView

----------- ---------  ---------- -----  ----

                59253                    23


评论

共有 条评论