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的时候,解决过这个不间断刷新的问题,回头把代码找出来看看。

时间: 2024-11-03 22:07:27

QListWidget代码刷新界面的相关文章

重复点击主界面(TabBar)按钮刷新界面--点击状态栏回到顶部

1.监听按钮点击 2.判断是否是点击的同一个按钮(记录上次点击的按钮) 3.当重复点击相同按钮时,需要获取当前按钮对应控制器刷新界面 3.1 判断是否重复点击按钮,代码写在哪里? 点击标题按钮,属于精华控制器的事情,所以找到精华控制器.写在点击按钮方法里面 3.2怎么拿到按钮对应的控制器? 通过当前按钮的tag值,从精华控制器的子控制器数组中去 3.3怎么让对应的控制器刷新界面? 在对应的控制器里面提供刷新方法,这样每个控制器都要写,太麻烦 之前我们抽取了父类,只需要在父类中提供一个刷新界面方法

使用OC和swift创建系统自带的刷新界面

使用OC和swift创建系统自带的刷新界面 一:swift刷新界面代码: import UIKit class ViewController: UITableViewController { // 用于显示的数据源    var _dataSource:[String] = []        // 加载更多 状态 风火轮    var _aiv:UIActivityIndicatorView!        override func viewDidLoad() {        super.

iOS开发——OC和swift创建系统自带的刷新界面

使用OC和swift创建系统自带的刷新界面 一:swift刷新界面代码: import UIKit class ViewController: UITableViewController { // 用于显示的数据源    var _dataSource:[String] = []        // 加载更多 状态 风火轮    var _aiv:UIActivityIndicatorView!        override func viewDidLoad() {        super.

DataBindings 与 INotifyPropertyChanged 实现自动刷新界面

业务逻辑与界面的分离对于维护与迁移是非常重要的,在界面上给某属性赋值,后台要检测到其已经发生变化 问题: 输入某物品 单价 Price, 数量Amount, 要求自动计算总价,即: TotalPrice = Price * Amount, 如下图: 普通的实现方式 TextBox.TextChanged() 事件中可以检测到值发生改变,并且可以给其他的 TextBox.Text 赋值,但是如果 TextBox 太多,给每个 TextBox 加这样的一个事件工作量会比较大. 下面介绍另外一种方法:

网络请求后关于刷新界面UI的问题

? ? ? ?做项目的时候遇到了问题.同步请求不能刷新界面. ? ? ? ?原来设想:在同步请求的方法内,同步请求之前,添加一个菊花.同步请求拿到结果后再移除菊花. ? ? ? ?现实情况:菊花根本不显示.坑啊. ? ? ? ?自此开始了整整一天的挣扎.后来问了朋友.说是同步请求冻结界面,让我用异步请求试试.后来用异步请求网络后,在主线程刷新界面,就可以了. ? ? ? ?我到现在也没明白苹果的冻结视图,到底为什么?有朋友知道答案了,帮忙解惑.谢谢.

几种js调用刷新界面方式

有的时候需要手动调用来刷新界面,比如非动态切换的语言模式啊,风格样式啊什么的. <!DOCTYPE html> <html> <head> <meta charset='utf-8'> </head> <body> <button onclick="click1()">location.reload();</button> <button onclick="click2()&

PHP JS HTML ASP页面跳转代码 延时跳转代码 返回到上一界面并刷新

1.PHP延时跳转代码 //跳转到浏览界面 header("Refresh:1;url=machine_list.php"); //不延时 <?php header("location: http://www.baidu.com"); ?> //PHP内JS输出代码 echo ("<script language=\"JavaScript\">alert(\"修改成功!\");location

使用原生自定义View,setState刷新界面后UI不能正常显示

背景 项目整合react native时,将原生的一个九宫格图片显示,封装成了RN控件,并提供了一个source属性 @ReactProp(name = "source") 问题 在js端使用该控件时,通过state初始化时给source赋值,然后,当添加图片是,通过setState刷新数据来刷新界面显示,理想状态下是,界面应该显示新增的图片,但是,当setState之后,控件上的图片就不显示了!!尝试着给该控件设置背景颜色,发现控件所占的空间位置还是有的. 解决方案 当遇到问题,首先

IOS异步获取数据并刷新界面dispatch_async的使用方法

在ios的开发和学习中多线程编程是必须会遇到并用到的.在java中以及Android开发中,大量的后台运行,异步消息队列,基本都是运用了多线程来实现. 同样在,在ios移动开发和Android基本是很类似的一种模型. 但是很多时候,在应用开发中,我们会发现本身并没有自己编码去处理一些并发的事件,去开辟新的子线程等等. (虽然一般的调用sdk发起一个网络请求,系统都是会默认给你新起一个线程去处理的). 整个程序看上去基本就是在Main线程中执行. 确实也是这样的一种现象,因为我们基本都是在操作控件