• 7655阅读
  • 7回复

[讨论]为什么安装eventfilter没响应 [复制链接]

上一主题 下一主题
离线zhanghangff
 
只看楼主 倒序阅读 楼主  发表于: 2011-06-29

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    clearFlush();
     ReadFromFileData();
     //for(int ie=0;ie<50;ie++)
        // strcpy(ZhsFilebox[ie].number,MyData[ie].number);
    int size=0;
    size=GetFileSize();
    //qDebug("%d",size);
    tableWidget=new QTableWidget(this);
    tableWidget->setRowCount(size);
    tableWidget->setColumnCount(3);
    tableWidget->setGeometry(QRect(60,40,441,251));
    tableWidget->setHorizontalHeaderLabels(QStringList()<<tr("number")<<tr("qq")<<tr("address"));
    for(int i=0;i<size;i++)
    {QTableWidgetItem *newItem=new QTableWidgetItem;
     newItem->setText(MyData.name);
     tableWidget->setVerticalHeaderItem(i,newItem);}
   // tableWidget->setVerticalHeaderLabels(QStringList()<<tr("zhang1")<<("zhang2")<<tr("zhang3"));

        for(int i=0;i<size;i++){
            for(int j=0;j<3;j++){
           // QTableWidgetItem *newIetm=tableWidget->item(i,j);
             QTableWidgetItem *newItem=new QTableWidgetItem;
             tableWidget->setItem(i,j,newItem);
            // newIetmij=tableWidget->item(i,j);
             if(j==0)
             {newItem->setText(MyData.number);}else if(j==1)
             {newItem->setText(MyData.qq);}else if(j==2)
             {newItem->setText(MyData.address);}
        }
    }
   // QTableWidgetItem *newItem=new QTableWidgetItem;
   // newIetm=tableWidget->item(1,1);
  //  tableWidget->setItem(0,0,newItem);
   // newItem->setText("fff");
       tableWidget->installEventFilter(this);
       // tableWidget->setFocus();
        //tableWidget->setCurrentIndex();
       // tableWidget->setCurrentItem(0);
}


bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
if(target==tableWidget)
{
//  QMessageBox::information(this,tr("qwe"),tr("%1").arg("button press!"));
  if (event->type()==QEvent::MouseButtonPress)
  {       //QMouseEvent *mouseEvent=static_cast<QMouseEvent*>(event);
   QMessageBox::information(this,tr("qwe"),tr("%1").arg("button press!"));
   return true;
  }
}else if(event->type()==QEvent::MouseButtonRelease)
{    qDebug("f44ff");
            return QMainWindow::eventFilter(target,event);}
}

鼠标点击后不响应,求各位大虾帮忙啊!
离线dbzhang800

只看该作者 1楼 发表于: 2011-06-29
呵呵,不止一次见到这种问题,有时间要整理一篇blog出来。

QTableWidget 是 QAbstractScrollArea 的派生类。对于QAbstractScrollArea ,安装过滤器要安装到其 viewport 上而不是其自身!
离线zhanghangff
只看该作者 2楼 发表于: 2011-07-02
回 1楼(dbzhang800) 的帖子
怎么安装到viewport上啊?我不会,教教我吧
离线zhanghangff
只看该作者 3楼 发表于: 2011-07-02
回 1楼(dbzhang800) 的帖子
        tableWidget->verticalHeader()->viewport()->installEventFilter(this);我想在最旁边的标题框上点击鼠标响应,程序这样写是响应了,可是我的标题框没有了。
        我要是这样加的话tableWidget->viewport()->installEventFilter(this);除了标题框,整个表格都显示不出来了,求帮助啊大哥

离线dbzhang800

只看该作者 4楼 发表于: 2011-07-02
Re:回 1楼(dbzhang800) 的帖子
引用第3楼zhanghangff于2011-07-02 15:16发表的 回 1楼(dbzhang800) 的帖子 :
        tableWidget->verticalHeader()->viewport()->installEventFilter(this);我想在最旁边的标题框上点击鼠标响应,程序这样写是响应了,可是我的标题框没有了。
        我要是这样加的话tableWidget->viewport()->installEventFilter(this);除了标题框,整个表格都显示不出来了,求帮助啊大哥


你能告诉大家你过滤了哪些事件么?只过滤你了解的事件!!
离线zhanghangff
只看该作者 5楼 发表于: 2011-07-02
那什么是我不了解的事件啊?我初学者不能领会你的意图啊,还请指教!!
离线zhanghangff
只看该作者 6楼 发表于: 2011-07-02
回 4楼(dbzhang800) 的帖子
我还要过滤什么啊?我初学者不能领会你的意图啊,还请指教!!
离线dbzhang800

只看该作者 7楼 发表于: 2011-07-02
Re:回 4楼(dbzhang800) 的帖子
引用第6楼zhanghangff于2011-07-02 18:52发表的 回 4楼(dbzhang800) 的帖子 :
我还要过滤什么啊?我初学者不能领会你的意图啊,还请指教!!  

这... 你要问你自己,你想过滤什么?意图是什么?。。。

看你前面的描述,你显然把 Paint/Polish 等绘制事件都 给过滤了
快速回复
限100 字节
 
上一个 下一个