1. 程式人生 > >QTableView的表格項中加入圖示的方法

QTableView的表格項中加入圖示的方法

當在使用表格檢視的時候,需要在表格每一行前面加入圖示,應該怎麼做呢?Qt中通過使用MVC的處理方式,很容易做到這一點,具體實現如下:

先貼出圖,讓大家一睹為快

下面我就來介紹一下,上圖的燈泡是怎麼實現的,通過過載QAbstractTableModel中的data方法,如下:(CTblModel 派生自QAbstractTableModel

  1. QVariant CTblModel::data(const QModelIndex &index, int role) const
  2. {  
  3.     if (!index.isValid())  
  4.         return QVariant();  
  5.     int col = index.column();  
  6.     if (col == ledColIndex && role == Qt::DecorationRole)  
  7.     {  
  8.         return QIcon(":/images/light.png");  
  9.     }  
  10.     else
  11.     {  
  12.         ...  
  13.     }  
  14.     return QVariant();  
  15. }  
對於mvc的使用方法,請參考http://blog.csdn.net/rabinsong/article/details/8452946

讓圖片動起來,能夠響應使用者事件,當用戶單擊燈泡時,燈泡會點亮,這個怎麼實現呢?

要實現這個功能,首先要能接受到滑鼠事件,其次,要知道滑鼠點選了燈泡部分,不能滑鼠不在燈泡上點選,燈泡也亮。有了這兩點,下面我們來看看實現:

我們可以通過過載QTableView的 mousePressEvent(),從而獲得對滑鼠單擊的控制權,通過indexAt方找到當前單擊的index,再根據索引找到燈泡所在的列,具體實現如下:

  1. <pre name="code"class="cpp">void CTblView::mouseMoveEvent(QMouseEvent *event)  
  2. {  
  3.     const QPoint &p = event->pos();  
  4.     QModelIndex modelIndex = indexAt(p);  
  5.     if (modelIndex.isValid())  
  6.     {  
  7.         int col = modelIndex.column();  
  8.         int row = modelIndex.row();  
  9.         if (col == ledColIndex)  
  10.         {  
  11.             pTblModel->setLight(row);  
  12.         }  
  13.     }  
  14. }</pre><br><br>  
pTblModel就是上面定義的CTblModel,到了這裡大家應該知道了基本實現思路了吧。

讓圖示變大一些,按照上面的做法,燈泡圖示的大小很小,不管你的light.png圖片多大,在表格中顯示時的圖示大小預設都很小,那麼怎麼改變圖示的大小呢?方法也很簡單,就是在CTblView建構函式中加入setIconSize(QSize(25,25));我設定的是25*25大小,顯示效果如上圖的燈泡效果,大家可以根據自己的應用,調整其大小。