• 10705阅读
  • 13回复

[提问]QTableWidget 的itemDoubleClicked 和itemClicked [复制链接]

上一主题 下一主题
离线foxgod
 

只看楼主 倒序阅读 楼主  发表于: 2013-03-04
我使用QTableWidget 的itemDoubleClicked 和itemClicked的时候,双击的时候,单击信号也触发了,怎么回事呢,我把我的行表头隐藏了,设置了可以多行选择。,我写了一个widget,在widget里面放了一个tablewidget触犯信号时这样的

// connect(tableWidget,SIGNAL(itemDoubleClicked(QTableWidgetItem*)),this,SLOT(enterPatient2Dcentre(QTableWidgetItem*)));   // connect(tableWidget,SIGNAL(itemClicked(QTableWidgetItem*)),this,SLOT(countPatientList(QTableWidgetItem*)));这样双击的时候,单击也触发了,不知道怎么回事
离线pxiao_xiao

只看该作者 1楼 发表于: 2013-03-04
这是必然会触发的 双击是建立在单击的基础上的 你可以自己加时钟判断 比如500ms内无第二次click触发就是单击 执行单击 否则 流出
离线rpdhunter

只看该作者 2楼 发表于: 2013-03-05
楼主难道单击和双击都设置了对应的槽函数?

如果这样,那就只能像楼上说的那样了
离线foxgod

只看该作者 3楼 发表于: 2013-03-05
回 1楼(pxiao_xiao) 的帖子
但是我的tablewidget是这样的,在一个widget1里面有一个widget2,在widget2里面有一个tablewidget,所以mouseDoubleClickEvent和mousepressevent都好像不能实现呀
离线foxgod

只看该作者 4楼 发表于: 2013-03-05
2楼和3楼的这样又怎么解决呢
离线pxiao_xiao

只看该作者 5楼 发表于: 2013-03-05
什么意思? widget2的鼠标事件不能实现 还是 tablewidget的鼠标事件不能实现?
离线foxgod

只看该作者 6楼 发表于: 2013-03-05
回 5楼(pxiao_xiao) 的帖子
都不可以实现呀,
离线pxiao_xiao

只看该作者 7楼 发表于: 2013-03-05
上代码
离线foxgod

只看该作者 8楼 发表于: 2013-03-05
//void Widget::mousePressEvent(QMouseEvent *event)
//{
//    qDebug()<<"enter mousePressEvent(QMouseEvent *event)";
//    timer->start(500);
//}


//void Widget::mouseClike()
//{
//     qDebug()<<"enter mouseClike()";
//     //QTableWidgetItem* item =tableWidget->currentItem();
//     //itemClicked(QTableWidgetItem* item);
//}
//void Widget::mouseDoubleClickEvent(QMouseEvent *event)
//{
//    qDebug()<<"enter mouseDoubleClickEvent(QMouseEvent *event)";
//    timer->stop();
//    //QTableWidgetItem* item =tableWidget->currentItem();
//    //itemDoubleClicked(QTableWidgetItem* item);
//}
这些代码,打的log都没有进去,不起作用,还有想问下,tablewidget里面怎么判断如何选择了多行呢。
离线foxgod

只看该作者 9楼 发表于: 2013-03-05
回 7楼(pxiao_xiao) 的帖子
我刚才看了下,我是在我的tablewidget里面点击鼠标双击没反应,因为我的mouseDoubleClickEvent事件在是我的widget里面的,我的tablewidget是这样的,我在一个widget界面里面拖入了一个Widget2,在这个Widget2里面放入了一个tablewidget,现在怎么在widget里面写tablewidge的鼠标事件呢
离线pxiao_xiao

只看该作者 10楼 发表于: 2013-03-05

简易实例
static bool dORc = false;
QTimer *timer = NULL;
void QBigDataTableWidget::enterPatient2Dcentre(QTableWidgetItem*)
{
    dORc = true;
    qDebug()<<"enter mouseDoubleClickEvent";
}

void QBigDataTableWidget::countPatientList(QTableWidgetItem*)
{
    if (NULL != timer)
    {
        return;
    }
    timer = new QTimer();
    connect(timer , SIGNAL(timeout()) , this , SLOT(waitTimer()));
    timer->start(500);
}

void QBigDataTableWidget::waitTimer()
{
    if (!dORc)
    {
        //执行你自己的单击事件策略
        qDebug()<<"enter mouseClike()";
        timer->stop();
    }
    else
    {
        dORc =false;
    }
    delete timer;
    timer = NULL;
}
离线foxgod

只看该作者 11楼 发表于: 2013-03-05
回 10楼(pxiao_xiao) 的帖子
按照你说了,解决了刚才的问题,但是现在又有个问题,我在程序里面还要判断下右键使用,可是点击右键的时候,又触发了itemClicked(QTableWidgetItem*),这个怎么解决。
离线pxiao_xiao

只看该作者 12楼 发表于: 2013-03-05
苍天呐......... 锅 你能自己想想不
离线foxgod

只看该作者 13楼 发表于: 2013-03-05
回 12楼(pxiao_xiao) 的帖子
解决了
快速回复
限100 字节
 
上一个 下一个