pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

QHeaderView::paintSection 做了什么,以至于我在之前或

What does QHeaderView::paintSection do such that all I do to the painter before or after is ignored(QHeaderView::paintSection 做了什么,以至于我在之前或之后對(duì)畫家所做的一切都被忽略了) - IT屋-程序員軟件開(kāi)發(fā)技
本文介紹了QHeaderView::paintSection 做了什么,以至于我在之前或之后對(duì)畫家所做的一切都被忽略了的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

這個(gè)問(wèn)題是這篇文章 是不同的,雖然看起來(lái)與 這個(gè).

This question is further development of this post and is different, though may seem similar as this one.

我正在嘗試重新實(shí)現(xiàn) QHeaderView::paintSection,以便從模型返回的背景得到尊重.我試著這樣做

I am trying to reimplement QHeaderView::paintSection, so that the background returned from the model would be honored. I tried to do this

void Header::paintSection(QPainter * painter, const QRect & rect, int logicalIndex) const
{
    QVariant bg = model()->headerData(logicalIndex, Qt::Horizontal, Qt::BackgroundRole);
    // try before
    if(bg.isValid())                // workaround for Qt bug https://bugreports.qt.io/browse/QTBUG-46216
        painter->fillRect(rect, bg.value<QBrush>());             
    QHeaderView::paintSection(painter, rect, logicalIndex);
    // try after
    if(bg.isValid())                // workaround for Qt bug https://bugreports.qt.io/browse/QTBUG-46216
        painter->fillRect(rect, bg.value<QBrush>());             
}

但是,它不起作用 - 如果我調(diào)用 QHeaderView::paintSection ,我用畫家繪制的任何東西都不可見(jiàn)(我也嘗試?yán)L制對(duì)角線).如果我刪除 QHeaderView::paintSection 調(diào)用,線條和背景將可見(jiàn).在 QHeaderView::paintSection 之前和之后調(diào)用 fillRect 沒(méi)有任何區(qū)別.

However, it didn't work - if I make QHeaderView::paintSection call, nothing I draw with the painter is visible (I also tried drawing a diagonal line). If I remove QHeaderView::paintSection call, the line and the background will be visible. Making the fillRect call before vs. after the QHeaderView::paintSection doesn't make any difference.

我想知道,QHeaderView::paintSection 是什么讓我無(wú)法在它上面畫一些東西.以及是否有一種方法可以在不重新實(shí)現(xiàn) QHeaderView::paintSection 所做的一切的情況下克服它?

I wonder, what is it that QHeaderView::paintSection does that makes it impossible for me to draw something on top of it. And whether there is a way to overcome it without reimplementing everythning what QHeaderView::paintSection does?

我需要做的就是為某個(gè)單元格添加某種陰影 - 我仍然希望單元格中的所有內(nèi)容(文本、圖標(biāo)、漸變背景等)都按照現(xiàn)在的方式繪制...

All I need to do is to add a certain shade to a certain cell - I still want everything in the cell (text, icons, gradient background etc.) to be painted as it is now...

推薦答案

很明顯為什么第一個(gè) fillRect 不起作用.您在 paintSection 之前繪制的所有內(nèi)容都將被基礎(chǔ)繪制覆蓋.

It is obvious why the first fillRect doesn't work. Everything that you paint before paintSection is overridden by base painting.

第二個(gè)調(diào)用更有趣.

通常所有的繪制方法都會(huì)保留 painter 狀態(tài).這意味著當(dāng)你調(diào)用 paint 時(shí),它看起來(lái)像畫家狀態(tài)沒(méi)有改變.

Usually all paint methods preserves painter state. It means that when you call paint it looks like the painter state hasn't been changed.

盡管如此,QHeaderView::paintSection 破壞了畫家的狀態(tài).

Nevertheless QHeaderView::paintSection spoils the painter state.

要繞過(guò)這個(gè)問(wèn)題,您需要自己保存和恢復(fù)狀態(tài):

To bypass the issue you need to save and restore the state by yourself:

void Header::paintSection(QPainter * painter, const QRect & rect, int logicalIndex) const
{
    QVariant bg = model()->headerData(logicalIndex, Qt::Horizontal, Qt::BackgroundRole);
    painter->save();
    QHeaderView::paintSection(painter, rect, logicalIndex);
    painter->restore();
    if(bg.isValid())               
        painter->fillRect(rect, bg.value<QBrush>());             
}

這篇關(guān)于QHeaderView::paintSection 做了什么,以至于我在之前或之后對(duì)畫家所做的一切都被忽略了的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

How can I read and manipulate CSV file data in C++?(如何在 C++ 中讀取和操作 CSV 文件數(shù)據(jù)?)
In C++ why can#39;t I write a for() loop like this: for( int i = 1, double i2 = 0; (在 C++ 中,為什么我不能像這樣編寫 for() 循環(huán): for( int i = 1, double i2 = 0;)
How does OpenMP handle nested loops?(OpenMP 如何處理嵌套循環(huán)?)
Reusing thread in loop c++(在循環(huán) C++ 中重用線程)
Precise thread sleep needed. Max 1ms error(需要精確的線程睡眠.最大 1ms 誤差)
Is there ever a need for a quot;do {...} while ( )quot; loop?(是否需要“do {...} while ()?環(huán)形?)
主站蜘蛛池模板: 杭州月嫂技术培训服务公司-催乳师培训中心报名费用-产后康复师培训机构-杭州优贝姆健康管理有限公司 | 代做标书-代写标书-专业标书文件编辑-「深圳卓越创兴公司」 | 山东活动策划|济南活动公司|济南公关活动策划-济南锐嘉广告有限公司 | 广州活动策划公司-15+年专业大型公关活动策划执行管理经验-睿阳广告 | 郑州宣传片拍摄-TVC广告片拍摄-微电影短视频制作-河南优柿文化传媒有限公司 | 【灵硕展览集团】展台展会设计_展览会展台搭建_展览展示设计一站式服务公司 | 飞扬动力官网-广告公司管理软件,广告公司管理系统,喷绘写真条幅制作管理软件,广告公司ERP系统 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 | 镀锌角钢_槽钢_扁钢_圆钢_方矩管厂家_镀锌花纹板-海邦钢铁(天津)有限公司 | 非小号行情 - 专业的区块链、数字藏品行情APP、金色财经官网 | 政府回应:200块在义乌小巷能买到爱情吗?——揭秘打工族省钱约会的生存智慧 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 护腰带生产厂家_磁石_医用_热压护腰_登山护膝_背姿矫正带_保健护具_医疗护具-衡水港盛 | 建筑资质代办-建筑资质转让找上海国信启航 | 百方网-百方电气网,电工电气行业专业的B2B电子商务平台 | 康明斯发电机,上柴柴油发电机,玉柴柴油发电机组_海南重康电力官网 | 睿婕轻钢别墅_钢结构别墅_厂家设计施工报价| 科箭WMS仓库管理软件-TMS物流管理系统-科箭SaaS云服务 | 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 - 杭州标识标牌|文化墙|展厅|导视|户内外广告|发光字|灯箱|铭阳制作公司 | 智慧钢琴-电钢琴-便携钢琴-数码钢琴-深圳市特伦斯乐器有限公司 | 净化工程_无尘车间_无尘车间装修-广州科凌净化工程有限公司 | 深圳诚暄fpc首页-柔性线路板,fpc柔性线路板打样生产厂家 | 万家财经_财经新闻_在线财经资讯网 | 低压载波电能表-单相导轨式电能表-华邦电力科技股份有限公司-智能物联网综合管理平台 | 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 干洗加盟网-洗衣店品牌排行-干洗设备价格-干洗连锁加盟指南 | 涂层测厚仪_漆膜仪_光学透过率仪_十大创新厂家-果欧电子科技公司 | 沉降天平_沉降粒度仪_液体比重仪-上海方瑞仪器有限公司 | 视频教程导航网_视频教程之家_视频教程大全_最新视频教程分享发布平台 | 上海璟文空运首页_一级航空货运代理公司_机场快递当日达 | 深圳货架厂_仓库货架公司_重型仓储货架_线棒货架批发-深圳市诺普泰仓储设备有限公司 | 山东石英砂过滤器,除氟过滤器「价格低」-淄博胜达水处理 | 示波器高压差分探头-国产电流探头厂家-南京桑润斯电子科技有限公司 | 【北京写字楼出租_写字楼租赁_办公室出租网/出售】-远行地产官网 | 铁艺,仿竹,竹节,护栏,围栏,篱笆,栅栏,栏杆,护栏网,网围栏,厂家 - 河北稳重金属丝网制品有限公司 山东太阳能路灯厂家-庭院灯生产厂家-济南晟启灯饰有限公司 | 粘弹体防腐胶带,聚丙烯防腐胶带-全民塑胶 | 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 交变/复合盐雾试验箱-高低温冲击试验箱_安奈设备产品供应杭州/江苏南京/安徽马鞍山合肥等全国各地 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 |