成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在QListView中添加radiobutton

移動開發
Qt 4推出了一組新的item view類,它們使用model/view結構來管理數據與表示層的關系。這種結構帶來的功能上的分離給了開發人員更大的彈性來定制數據項的表示,它也提供一個標準的model接口,使得更多的數據源可以被這些item view使用。

QListView中添加radiobutton,用到了model/view結構,那么首先我們先對他有個了解。Model-View-Controller(MVC),是從Smalltalk發展而來的一種設計模式,常被用于構建用戶界面。經典設計模式的著作中有這樣的描述:

MVC 由三種對象組成。Model是應用中的的程序對象,View是它的屏幕表示,Controller定義了用戶界面如何對用戶輸入進行響應。在MVC之前,用戶界面設計傾向于三者揉合在一起,MVC對它們進行了解耦,提高了靈活性與重用性。

假如把view與controller結合在一起,結果就是model/view結構。這個結構依然是把數據存儲與數據表示進行了分離,它與MVC都基于同樣的思想,但它更簡單一些。這種分離使得在幾個不同的view上顯示同一個數據成為可能,也可以重新實現新的view,而不必改變底層的數據結構。為了更靈活的對用戶輸入進行處理,引入了delegate這個概念。它的好處是,數據項的渲染與編程可以進行定制。

其實這個MVC模式,model進行數據的訪問與處理,view提供顯示,而delegate則負責進行item的render,Qt中在使用的時候,如下

 1、 Create a existing model

    QDirModel *model = new QDirModel;

2 、Create the list view

QListView *list = new QListView(…);

3、 Display the item

list->setModel(model); 

4 、Create a existing model

QDirModel *model = new QDirModel;

5、 Create the list view

QListView *list = new QListView(…);

6、 Display the item

list->setModel(model);

至于與delegate的關聯,我們可以用list->setItemDelegate(new QItemDelegate());

在QListView中,如果我們要使用一個check box,我們可以直接在model類中data函數處理

  1. QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const   
  2.   {  
  3.       if(role == Qt::CheckStateRole)  
  4.        {  
  5.              return true;   
  6.        }  
  7.       .......  
  8.   } 

這樣在QListView中就可以顯示出勾選的check box,但是如果需要進行radio button的顯示,我們還需要進行一些相關處理。

在QItemDelegate中,有一個drawCheck函數

  1.     virtual void drawCheck ( QPainter * painter, const QStyleOptionViewItem & option, const  QRect & rect, Qt::CheckState state ) const  
  2.     {  
  3. if (!rect.isValid())  
  4.         return;  
  5.        QStyleOptionViewItem opt(option);  
  6.       opt.rect = rect;  
  7.        optopt.state = opt.state & ~QStyle.:State_HasFocus;  
  8.        switch (state) {  
  9.        case Qt::Unchecked:  
  10.           opt.state |= QStyle.:State_Off;  
  11.           break;  
  12.        case Qt::PartiallyChecked:  
  13.           opt.state |= QStyle.:State_NoChange;  
  14.           break;  
  15.        case Qt::Checked:  
  16.           opt.state |= QStyle.:State_On;  
  17.           break;  
  18.        }  
  19.        QApplication::style()->drawPrimitive(QStyle.:PE_IndicatorViewItemCheck, &opt, painter);  
  20.     } 

該函數實現了check box的繪制,對于qt來說,check box與radio button在某些方面來說是一樣的,只是在各自的樣式上面的有點不一樣,也就是對于style的繪制不一樣,于是參考qt中QStyle類,使用QStyle.:PE_IndeicatorRadioButton進行重新繪制,就可以變成radio button樣式

QApplication::style()->drawPrimitive(QStyle.:PE_IndicatorRadioButton, &opt, painter);

于是我們重寫一個drawRadio函數,與drawCheck一樣,就是***一句使用上面處理。

然后我們重寫delegate相關paint函數,

  1. void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const  
  2.   {  
  3.           QRect checkSpace;     //the rect for draw check    
  4.           int isCheck = index.model()->data(index, Qt::CheckStateRole).toInt();   //get the index item's check state  
  5.               if(isCheck)  
  6.              drawRadio(painter, option, checkSpace, Qt::Checked);  
  7.                else               
  8.               drawRadio(painter, option, checkSpace, Qt::Unchecked);  
  9.                      ... ...     //draw others like display role, decroration role        
  10.    } 

小結:關于在QListView中添加radiobutton的內容就介紹到這里,Model-View-Controller(MVC),是從Smalltalk發展而來的一種設計模式,常被用于構建用戶界面。想必你因該了解了MVC結構了吧!

【編輯推薦】

淺談Qt中多線程編程

Qt環境變量配置與安裝

從新手到老手之Qt學習歷程

Spring3.0.5 MVC—異常處理

詳解ASP.NET MVC 3新的Layout布局系統

責任編輯:zhaolei 來源: 互聯網
相關推薦

2009-07-06 15:19:13

webwork ser

2011-08-02 11:07:00

2023-01-18 17:22:38

YAML注釋Linux

2011-07-21 15:49:27

iPhone 模擬器 視頻

2012-06-13 09:05:46

谷歌Chrome離線應用

2019-05-23 10:11:39

Python編程語言singledispa

2013-11-28 14:06:04

Ubuntu技巧用戶

2011-06-28 14:27:38

Qt Qt For Sym

2011-03-22 10:57:30

Oracle添加用戶賦權

2020-06-22 10:33:52

云計算邊緣計算IT

2022-11-03 11:19:22

2018-04-08 11:10:45

GitLinux開源

2009-07-17 13:45:16

WinCE開始菜單

2022-03-03 13:22:52

LinuxKDE PlasmaKDE

2009-09-11 11:39:23

C# RadioBut

2009-07-21 12:24:01

Scala先決條件添加字段

2011-03-03 10:04:28

PureFTPdmysql

2023-10-18 11:01:07

GNOME按鈕

2011-08-18 17:32:55

iPhone開發Table Cell

2023-09-12 15:39:07

WASIXprocessZig
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品一区二区三区在线 | 人人爽日日躁夜夜躁尤物 | 亚洲欧美一区二区三区1000 | jvid精品资源在线观看 | www.日本国产 | 国产精品精品视频一区二区三区 | 国产一区精品在线 | 精品视频久久久 | 欧洲一区二区三区 | 欧美日韩精品一区二区三区四区 | 精品一区二区在线观看 | 欧美 日韩精品 | 亚洲精品中文字幕在线观看 | 成在线人视频免费视频 | 欧美日韩最新 | 日韩一区二区三区av | 精品久久久久一区二区国产 | 欧美日韩国产一区二区 | 亚洲欧美在线免费观看 | 日韩精品 电影一区 亚洲 | 亚洲成人免费 | 99日韩| 美国一级黄色片 | 国产亚洲一区二区三区在线 | 欧美在线视频一区二区 | 亚洲精品女优 | 特级特黄特色的免费大片 | 麻豆av网| av黄色在线 | 亚洲午夜一区二区 | 国产成人精品久久二区二区91 | 91麻豆精品国产91久久久久久久久 | 精品中文字幕一区二区三区 | 久久精品色欧美aⅴ一区二区 | 成人一区二区在线 | 亚洲图片一区二区三区 | 国产不卡视频在线 | 欧美国产视频 | 一区二区视屏 | 色视频在线免费观看 | 欧美日韩国产中文字幕 |