歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

QT:封裝一個簡易的二維表類SimpleTable

QT:我自己封裝的一個簡易的二維表類SimpleTable。在QT中,QTableWidget處理二維表格的功能很強大(QTableView更強大),但有時我們只想讓它顯示少量數據(文字和圖片),這時,使用QTableWidget就有點不方便了(個人感覺)。

所以我對QTableWidget再做了一次封裝(SimpleTable類),讓它在處理小型表格時更方便。

代碼很簡單,要解釋的就寫在注釋裡面了,歡迎大家使用。

如果大家發現這個類的BUG的話,歡迎提出,大家共同學習。

上代碼:

  1. //simpletable.h   
  2. #ifndef SIMPLETABLE_H_   
  3. #define SIMPLETABLE_H_   
  4.   
  5. #include <QtCore>   
  6. #include <QtGui>   
  7.   
  8. class SimpleTable : public QTableWidget  
  9. {  
  10.     Q_OBJECT  
  11. private:  
  12. public:  
  13.     //構造函數,無實際內容,直接調用的構造函數   
  14.     SimpleTable(QWidget *parent = 0) : QTableWidget(parent) { }  
  15.     SimpleTable(int row, int column, QWidget *parent = 0)  
  16.         : QTableWidget(row, column, parent) { }  
  17.     //設置某個單元格中的文字   
  18.     void SetCellText( int cx, int cy, const QString &text,   
  19.         int alignment = Qt::AlignLeft,   
  20.         const QIcon icon = QIcon() );  
  21.     //在某個單元格中放置一張小圖片   
  22.     void SetCellPixmap(int cx, int cy, const QPixmap &pixmap,  
  23.         Qt::Alignment alignment = Qt::AlignCenter);  
  24.     //獲取某個單元格中的字符串(如果沒有,就返回一個空字符串)   
  25.     QString GetCellText(int cx, int cy);  
  26.     //獲取某個單元格的圖片(如果沒有,就返回一張空圖片)   
  27.     QPixmap GetCellPixmap(int cx, int cy);  
  28. };  
  29.   
  30. #endif   
  31.   
  32.   
  33. //simpletable.cpp   
  34. #include "simpletable.h"   
  35.   
  36. void SimpleTable::SetCellText(int cx, int cy, const QString &text,   
  37.                               int alignment, const QIcon icon)  
  38. {  
  39.     //檢查是否越界   
  40.     if( cx>=rowCount() || cy>=columnCount() )  
  41.     {  
  42.         qDebug() << "Fail, Out of Range";  
  43.         return;  
  44.     }  
  45.     //如果此單元格中已經有item了,就直接更改item中的內容   
  46.     //否則,新建一個item   
  47.     QTableWidgetItem *titem = item(cx, cy);  
  48.     if( NULL == titem )  
  49.         titem = new QTableWidgetItem;  
  50.     titem->setText(text);  
  51.     titem->setTextAlignment(alignment);  
  52.     //如果圖標不為空,就為此item設置圖標   
  53.     if( !icon.isNull() )  
  54.         titem->setIcon(icon);  
  55.     setItem(cx, cy, titem);  
  56. }  
  57.   
  58. void SimpleTable::SetCellPixmap(int cx, int cy, const QPixmap &pixmap,  
  59.                                 Qt::Alignment alignment)  
  60. {  
  61.     if( cx>=rowCount() || cy>=columnCount() )  
  62.     {  
  63.         qDebug() << "Fail, Out of Range";  
  64.         return;  
  65.     }  
  66.     //在item中設置圖片有很多方法,但我還是覺得在其中放置帶圖片一個Label最簡單   
  67.     QLabel *label = new QLabel(this);  
  68.     label->setAlignment(alignment);  
  69.     label->setPixmap(pixmap);  
  70.     setCellWidget(cx, cy, label);  
  71. }  
  72.   
  73. QString SimpleTable::GetCellText(int cx, int cy)  
  74. {  
  75.     QString result;  
  76.     if( cx>=rowCount() || cy>=columnCount() )  
  77.     {  
  78.         qDebug() << "Fail, Out of Range";  
  79.         return result;  
  80.     }  
  81.   
  82.     QTableWidgetItem *titem = item(cx, cy);  
  83.     if( NULL != titem )  
  84.     {  
  85.         result = titem->text();  
  86.     }  
  87.     return result;  
  88. }  
  89.   
  90. QPixmap SimpleTable::GetCellPixmap(int cx, int cy)  
  91. {  
  92.     QPixmap result;  
  93.     if( cx>=rowCount() || cy>=columnCount() )  
  94.     {  
  95.         qDebug() << "Fail, Out of Range";  
  96.         return result;  
  97.     }  
  98.     QTableWidgetItem *titem = item(cx, cy);  
  99.     if( NULL == titem )  
  100.         return result;  
  101.     QLabel *label = dynamic_cast<QLabel*>( cellWidget(cx, cy) );  
  102.     result = *label->pixmap();  
  103.     return result;  
  104. }  

以下是一個簡單的測試例子:

  1. //main.cpp   
  2. //測試例子   
  3. #include "simpletable.h"   
  4.   
  5. int main(int argc, char **argv)  
  6. {  
  7.     QApplication app(argc, argv);  
  8.     SimpleTable table(20, 10);  
  9.     for(int i=0; i<20; i++)  
  10.     {  
  11.         for(int j=0; j<10; j++)  
  12.         {  
  13.             table.SetCellText(i, j, QString::number(i*10+j));  
  14.         }  
  15.     }  
  16.     table.show();  
  17.     return app.exec();  
  18. }  
Copyright © Linux教程網 All Rights Reserved