如何解决子类化 QHeaderView 时排序箭头消失
我正在继承 QHeaderView 以在 QTableView 的水平标题中添加过滤图标。 QTableView 已激活排序功能消耗 QSortFilterProxyModel,直到现在它工作正常。 但是,当我尝试继承 QHeaderView 并将其用作列标题时,只有第一列显示过滤器图标。
headerview_filter.h
#ifndef HEADERVIEW_FILTER_H
#define HEADERVIEW_FILTER_H
#include <QHeaderView>
class HeaderView_Filter : public QHeaderView
{
Q_OBJECT
public:
explicit HeaderView_Filter(Qt::Orientation orientation,QWidget * parent = nullptr);
void paintSection(QPainter *painter,const QRect &rect,int logicalIndex) const override;
private:
const QpolygonF _funel = QpolygonF({{22.0,36.0},{22.0,22.0},{10.0,10.0},{40.0,{28.0,36.0}});
};
#endif // HEADERVIEW_FILTER_H
headerview_filter.cpp
#include "headerview_filter.h"
HeaderView_Filter::HeaderView_Filter(Qt::Orientation orientation,QWidget * parent)
: QHeaderView(orientation,parent)
{
setSectionsClickable(true);
}
void HeaderView_Filter::paintSection(QPainter *painter,int logicalIndex) const
{
painter->save();
QHeaderView::paintSection(painter,rect,logicalIndex);
painter->restore();
const double scale = 0.6*rect.height()/50.0;
painter->setBrush(Qt::black);
painter->translate(0,5);
painter->scale(scale,scale);
painter->drawpolygon(_funel);
painter->restore();
}
以形式使用:
auto* tableView = _ui->tableView_Data;
tableView->setModel(_sortFilterProxyModel);
tableView->setSortingEnabled(true);
tableView->setHorizontalHeader(new HeaderView_Filter(Qt::Horizontal,tableView));
解决方法
我在输入时找到了解决方案,并且更喜欢发布代码供其他人使用。 绘图的位置必须相对于作为paintSection 参数提供的绘图矩形进行平移:
void HeaderView_Filter::paintSection(QPainter *painter,const QRect &rect,int logicalIndex) const
{
painter->save();
QHeaderView::paintSection(painter,rect,logicalIndex);
painter->restore();
const double scale = 0.6*rect.height()/50.0;
painter->setBrush(Qt::black);
// Here
painter->translate(rect.x(),rect.y()+5);
//
painter->scale(scale,scale);
painter->drawPolygon(_funel);
painter->restore();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。