我是靠谱客的博主 柔弱洋葱,最近开发中收集的这篇文章主要介绍qt tableview代理实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1. [图片] Screenshot-无标题窗口.png    


添加图片到资源文件夹



2. [文件] test.zip ~ 23KB     下载(647)     

3. [文件] main.cpp ~ 273B     下载(119)     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
  * @file main.cpp
  * @brief 
  * @author xiangxw
  * @version 0.0
  * @date 2011年04月30日
  */
 
#include<QApplication>
#include"MyTableView.h"
 
 
int main( int argc, char *argv[])
{
     QApplication app(argc,argv);
 
     MyTableView table;
     table.show();
 
     return app.exec();
}

4. [文件] MyTableView.h ~ 1KB     下载(84)     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/**
  * @file MyTableView.h
  * @brief
  * @author xiangxw
  * @version 0.0
  * @date 2011年04月30日
  */
 
#ifndef MYTABLEVIEW_H
#define MYTABLEVIEW_H
 
#include<QTableView>
#include<QItemDelegate>
#include<QStandardItemModel>
#include<QPixmap>
 
class MyTableView;
class MyItemDelegate;
class MyStandardItemModel;
 
class MyTableView: public QTableView
{
     public :
         MyTableView(QWidget * parent=0);
         virtual ~ MyTableView(){}
 
     protected :
         void mouseMoveEvent(QMouseEvent * event);
 
     private :
         MyItemDelegate * delegate;
         MyStandardItemModel * model;       
};
 
class MyItemDelegate: public QItemDelegate
{
     public :
         MyItemDelegate(QObject * parent=0);
         virtual ~ MyItemDelegate(){}
 
         void paint(QPainter * painter,
                 const QStyleOptionViewItem & option,
                 const QModelIndex & index) const ;
         bool editorEvent(QEvent * event,
                 QAbstractItemModel * model,
                 const QStyleOptionViewItem & option,
                 const QModelIndex & index);
     private :
         QPixmap favouritePixmap;
         QPixmap notFavouritePixmap;
 
};
 
class MyStandardItemModel: public QStandardItemModel
{
     public :
         MyStandardItemModel(QObject * parent=0)
             :QStandardItemModel(parent){}
         virtual ~ MyStandardItemModel(){}
         
         QVariant data( const QModelIndex & index,
                       int role=Qt::DisplayRole) const ;
         QVariant headerData( int section,
                 Qt::Orientation orientation,
                 int role=Qt::DisplayRole) const ;
};
 
#endif

5. [文件] MyTableView.cpp ~ 3KB     下载(107)     

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
  * @file MyTableView.cpp
  * @brief 
  * @author xiangxw
  * @version 0.0
  * @date 2011年04月30日
  */
 
#include<QPainter>
#include<QMouseEvent>
#include"MyTableView.h"
 
#ifndef NDEBUG
#include<QDebug>
#endif
 
MyTableView::MyTableView(QWidget * parent)
     :QTableView(parent)
{
     delegate= new MyItemDelegate;
     model= new MyStandardItemModel; 
     model->setRowCount(6);
     model->setColumnCount(8);
 
     this ->setModel(model);
     this ->setItemDelegate(delegate);
 
     this ->resizeColumnsToContents();
     this ->resizeRowsToContents();
     this ->setEditTriggers(QAbstractItemView::NoEditTriggers);
     this ->setSelectionBehavior(QAbstractItemView::SelectRows);
     this ->setMouseTracking( true ); //important
}
 
void MyTableView::mouseMoveEvent(QMouseEvent * event)
{
     int column= this ->columnAt(event->x());
     int row= this ->rowAt(event->y());
     if (column==0 && row!=-1){
         this ->setCursor(Qt::PointingHandCursor);
     }
     else {
         this ->setCursor(Qt::ArrowCursor);
     }
}
 
MyItemDelegate::MyItemDelegate(QObject * parent)
     :QItemDelegate(parent)
{
     favouritePixmap=QPixmap( ":/favourite.png" );
     notFavouritePixmap=QPixmap( ":/no-favourite.png" );
}
 
void MyItemDelegate::paint(QPainter * painter,
         const QStyleOptionViewItem & option,
         const QModelIndex & index) const
{
     if (index.column()!=0){
         QItemDelegate::paint(painter,option,index);
         return ;
     }
     const QAbstractItemModel * model=index.model();
     QVariant var=model->data(index,Qt::CheckStateRole);
     if (var.isNull()) var= false ;
     const QPixmap & star=var.toBool()?
                          favouritePixmap:notFavouritePixmap;
 
     int width=star.width();
     int height=star.height();
     QRect rect=option.rect;
     int x=rect.x()+rect.width()/2-width/2;
     int y=rect.y()+rect.height()/2-height/2;
 
     painter->drawPixmap(x,y,star);
}
 
bool MyItemDelegate::editorEvent(QEvent * event,
         QAbstractItemModel * model,
         const QStyleOptionViewItem & /*option*/ ,
         const QModelIndex & index)
{
     if (event->type()==QEvent::MouseButtonPress &&
             index.column()==0){
         QVariant var=model->data(index,Qt::CheckStateRole);
         bool isFavourite=var.toBool();
         if (var.isValid())
             isFavourite=isFavourite? false : true ;
         else
             isFavourite= true ;
         model->setData(index,isFavourite,Qt::CheckStateRole);
         return true ; //I have handled the event
     }
 
     return false ;
}
 
QVariant MyStandardItemModel::data(
         const QModelIndex & index,
         int role) const
{
     int column=index.column();
 
     if (role==Qt::DisplayRole && column!=0)
         return column+1;
     if (role==Qt::ToolTipRole && column==0)
         return tr( "love" );
     return QStandardItemModel::data(index,role);
}
 
QVariant MyStandardItemModel::headerData( int section,
         Qt::Orientation orientation,
         int role) const
{
     if (section==0 && orientation==Qt::Horizontal){
         if (role==Qt::DecorationRole)
             return QIcon( ":/favourite.png" );
         if (role==Qt::DisplayRole)
             return "" ;
         if (role==Qt::ToolTipRole)
             return tr( "love" );
     }
     return QStandardItemModel::headerData(section,orientation,role);
}

最后

以上就是柔弱洋葱为你收集整理的qt tableview代理实现的全部内容,希望文章能够帮你解决qt tableview代理实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部