QT:我自己封裝的一個簡易的二維表類SimpleTable。在QT中,QTableWidget處理二維表格的功能很強大(QTableView更強大),但有時我們只想讓它顯示少量數據(文字和圖片),這時,使用QTableWidget就有點不方便了(個人感覺)。
所以我對QTableWidget再做了一次封裝(SimpleTable類),讓它在處理小型表格時更方便。
代碼很簡單,要解釋的就寫在注釋裡面了,歡迎大家使用。
如果大家發現這個類的BUG的話,歡迎提出,大家共同學習。
上代碼:
- //simpletable.h
- #ifndef SIMPLETABLE_H_
- #define SIMPLETABLE_H_
-
- #include <QtCore>
- #include <QtGui>
-
- class SimpleTable : public QTableWidget
- {
- Q_OBJECT
- private:
- public:
- //構造函數,無實際內容,直接調用的構造函數
- SimpleTable(QWidget *parent = 0) : QTableWidget(parent) { }
- SimpleTable(int row, int column, QWidget *parent = 0)
- : QTableWidget(row, column, parent) { }
- //設置某個單元格中的文字
- void SetCellText( int cx, int cy, const QString &text,
- int alignment = Qt::AlignLeft,
- const QIcon icon = QIcon() );
- //在某個單元格中放置一張小圖片
- void SetCellPixmap(int cx, int cy, const QPixmap &pixmap,
- Qt::Alignment alignment = Qt::AlignCenter);
- //獲取某個單元格中的字符串(如果沒有,就返回一個空字符串)
- QString GetCellText(int cx, int cy);
- //獲取某個單元格的圖片(如果沒有,就返回一張空圖片)
- QPixmap GetCellPixmap(int cx, int cy);
- };
-
- #endif
-
-
- //simpletable.cpp
- #include "simpletable.h"
-
- void SimpleTable::SetCellText(int cx, int cy, const QString &text,
- int alignment, const QIcon icon)
- {
- //檢查是否越界
- if( cx>=rowCount() || cy>=columnCount() )
- {
- qDebug() << "Fail, Out of Range";
- return;
- }
- //如果此單元格中已經有item了,就直接更改item中的內容
- //否則,新建一個item
- QTableWidgetItem *titem = item(cx, cy);
- if( NULL == titem )
- titem = new QTableWidgetItem;
- titem->setText(text);
- titem->setTextAlignment(alignment);
- //如果圖標不為空,就為此item設置圖標
- if( !icon.isNull() )
- titem->setIcon(icon);
- setItem(cx, cy, titem);
- }
-
- void SimpleTable::SetCellPixmap(int cx, int cy, const QPixmap &pixmap,
- Qt::Alignment alignment)
- {
- if( cx>=rowCount() || cy>=columnCount() )
- {
- qDebug() << "Fail, Out of Range";
- return;
- }
- //在item中設置圖片有很多方法,但我還是覺得在其中放置帶圖片一個Label最簡單
- QLabel *label = new QLabel(this);
- label->setAlignment(alignment);
- label->setPixmap(pixmap);
- setCellWidget(cx, cy, label);
- }
-
- QString SimpleTable::GetCellText(int cx, int cy)
- {
- QString result;
- if( cx>=rowCount() || cy>=columnCount() )
- {
- qDebug() << "Fail, Out of Range";
- return result;
- }
-
- QTableWidgetItem *titem = item(cx, cy);
- if( NULL != titem )
- {
- result = titem->text();
- }
- return result;
- }
-
- QPixmap SimpleTable::GetCellPixmap(int cx, int cy)
- {
- QPixmap result;
- if( cx>=rowCount() || cy>=columnCount() )
- {
- qDebug() << "Fail, Out of Range";
- return result;
- }
- QTableWidgetItem *titem = item(cx, cy);
- if( NULL == titem )
- return result;
- QLabel *label = dynamic_cast<QLabel*>( cellWidget(cx, cy) );
- result = *label->pixmap();
- return result;
- }
以下是一個簡單的測試例子:
- //main.cpp
- //測試例子
- #include "simpletable.h"
-
- int main(int argc, char **argv)
- {
- QApplication app(argc, argv);
- SimpleTable table(20, 10);
- for(int i=0; i<20; i++)
- {
- for(int j=0; j<10; j++)
- {
- table.SetCellText(i, j, QString::number(i*10+j));
- }
- }
- table.show();
- return app.exec();
- }