QPainter绘制图形跟随QTableWidget滑动

目前在用Qt弄一个火焰图,结果如下图所示:
在这里插入图片描述

这东西就两层:顶层的QTableWidget,以及底层的用来绘制百分比柱条的widget。

两个分开东西分来来实现都不是难事,所以部分就不赘述了。
难点在于(前提:QTableWidget被layout到了WIdget上)当整个窗口(Widget)大小小于QTableWidget其中的内容时,QTableWidget会出现滚动条来导航画面,当拖动滚动条的时候,底层绘图的坐标就会对不上顶层的table。

然而当你试图用滚动条的pos来作为参考坐标的时候,你会发现这不是你想要的结果(翻译腔。。)。
我还想过直接把图绘制在QTableWidget上(viewport),结果当然也还不是我想要的。
最后翻Qt的帮助文档,找到了继承自QTableView的函数:
rowViewportPosition,这个正是我想要的那个函数。
所以最后,坐标对齐的代码如下

void MainWidget::paintEvent(QPaintEvent *evt)
{
    QPainter painter(this);
    //我设置了表格列横向布满(mTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);),
    //所以就不弄x坐标的。假如想x坐标对齐的话,有对应的函数columnViewportPosition
    painter.translate(0, mTableWidget->rowViewportPosition(0) + mTableWidget->horizontalHeader()->height());
    .....
}

就这样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值