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的時候,解決過這個不間斷刷新的問題,回頭把代碼找出來看看。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM