目前在用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());
.....
}
就这样。