演示

实现起来比较简单,就是在每个TableWidget的单元格设置一个Widget,如Label.重写QLabel类中的两个函数,达到鼠标进入离开单元格时显示的效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| void Widget::addGIFtoTableWidget(int row,int column,QString file){ MyLabel *label=new MyLabel; label->setMargin(3); QMovie *movie=new QMovie; movie->setFileName(file); movie->setScaledSize(QSize(24,24)); movie->start(); movie->stop(); label->setMovie(movie); ui->tableWidget->setCellWidget(row,column,label); }
|
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
| #define QQ_GIF_DIR "../expression/qq/" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); ui->tableWidget->setSelectionMode(QTableWidget::NoSelection); ui->tableWidget->setRowCount(10); int num_index=1; int rowCount= ui->tableWidget->rowCount(); int columnCount = ui->tableWidget->columnCount(); for (int row = 0; row <rowCount; ++row) { for (int column = 0;column<columnCount; ++column) { QString strFileName=QString("%1%2.gif").arg(QQ_GIF_DIR).arg(num_index); if(QFileInfo(strFileName).exists()) addGIFtoTableWidget(row,column,strFileName); num_index++; } } }
|
然后再看看 MyLabel 类
| mylabel.h #ifndef MYLABEL_H #define MYLABEL_H #include<QLabel> class MyLabel : public QLabel { public: MyLabel(QWidget *parent=0); protected: void enterEvent(QEvent *event); void leaveEvent(QEvent *event); }; #endif
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| mylabel.cpp #include "mylabel.h" #include<QMovie> MyLabel::MyLabel(QWidget *parent):QLabel(parent) { } void MyLabel::enterEvent(QEvent *event) { setStyleSheet("border: 1px solid rgb(111, 156, 207);background-color:rgba(150,150,150,50)"); setCursor(Qt::PointingHandCursor); QMovie *movie=this->movie(); movie->start(); } void MyLabel::leaveEvent(QEvent *event) { setStyleSheet("border:none"); setCursor(Qt::ArrowCursor); QMovie *movie=this->movie(); movie->jumpToFrame(0); movie->stop(); }
|
我在Ui窗口添加了了一个table widget部件,所以还要先设置相应的参数

OK,的确挺简单的…当然还有很多问题也要考虑…