zoukankan      html  css  js  c++  java
  • QListWidget代码刷新界面

    我有一个特殊效果要求实现(其实很弱智,也变成特殊效果,汗一下自己):两个QRadioButton切换的时候,让旁边的QListWidget自动变化不同的背景色。想了很多办法:

    1. 控件自己刷新,不行

    list_widget->update();
    list_widget->repaint();
    QCoreApplication::processEvents(); // 加上这句也不行

    2. 试图使用QListView的dataChanged(),可这是个保护函数,由于QListWidget封装的太好了,看不到它背后的view类实现,不能使用保护函数,因此也不行。

    3. 试图构造QModelIndex,然后使用QAbstractItemView的update()函数,成功刷新第一行,而且居然真的只刷新那一行,其余行保持了一个错误的颜色:

    QPoint pt(0,0);
    QModelIndex t3 = list_widget->indexAt(pt);
    list_widget->update(t3);

    但是试图每行都刷新,但是无奈始终无法取到每一行的高度,无法取到高度

    for (int i=0; i<list_widget->count(); i++) {
    QSize si = list_widget->item(i)->sizeHint(); // 这句无效
    int len = si.width();
    int hi = si.height();
    QPoint pt(hi*i, i);
    QModelIndex t3 = list_widget->indexAt(pt);
    list_widget->update(t3); // view
    }

    4. 选中的时候,会不会自动刷新?实践证明也不行:

    list_widget->setcurrentrow(list_widget->count()-1);

    5. 最后想了一个笨办法,只适用于低频率变化,不适于不断刷新:

    list_widget->hide(); // 试过了,不调用隐藏,只调用显示是没有用的
    list_widget->show();

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

    总结1:QModelIndex很难从外部构造,通常都是内部类实现的时候提供并加以处理。相关的方法大多数也都是内部函数,只有一个update()函数不是,这个函数虽然好用但却又很难构造它的参数,而且这个函数只刷新某一行,剩下的行即使错误也不管。

    总结2:虽然很多办法都不行,但是增加item的时候,QListWidget会整体刷新,鼠标移过QListWidget的时候也会整体刷新。

    总结3:我记得在学wxPython的时候,解决过这个不间断刷新的问题,回头把代码找出来看看。

  • 相关阅读:
    使用Feign访问接口
    IDEA 更改提示一键补全快捷键
    Mac配置Gradle环境
    RestSharp Simple REST and HTTP API Client for .NET
    Vue 一个注册页面有省市联动
    Authentication 接口验证访问 (C#)
    WebService快速入门文档
    自己写了个MongoDB的CRUD文档
    RabbitMQ入门教程
    dubbo简单入门使用
  • 原文地址:https://www.cnblogs.com/findumars/p/4312219.html
Copyright © 2011-2022 走看看