Qt延迟处理mousePressEvent

时间:2016-07-29 20:32:48

标签: c++ qt

我有一个自定义按钮,除了左键单击外,还可以右键单击。它的工作原理如下:

private slots:
    void mousePressEvent(QMouseEvent *e) {
        if(e->button() == Qt::RightButton) {
                std::cout << "kek2";
                emit rightClicked();
        }
        QPushButton::mousePressEvent(e);
    }

由于一些奇怪的原因,左键单击工作正常,并且没有处理右键单击(通过缺少kek2输出判断),直到我执行左键单击,一次处理所有右键单击。为什么呢?

2 个答案:

答案 0 :(得分:1)

我查看了它并实现了一个等效的Button并将代码更改为:

void QRightClickButton::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::RightButton) {
                    std::cout << "kek2" << std::endl; //the << std::endl; //made it work good again
                    emit rightClicked();
    } else if(e->button() == Qt::LeftButton) {
     //this else if block is just a fast implementation of the leftclick
                    std::cout << "kek3" << std::endl;
                    QPushButton::mousePressEvent(e);
    }


} 

自己尝试记录消息(“kek2”和“kek3”)。 没有<< std::endl;,它仍然是错误的!

编辑:我决定再增加两种方法来做到这一点!

  1. 您也可以在没有std::endl;

    的情况下使用它

    std::cout << message; //prints message

    std::cout.flush(); //flushes the output so it will be visible as well

  2. 例如,您可以创建自己的类或您自己的函数。

    1. 使用qDebug()。 qDebug自动刷新流,因此您不必编写额外的代码,也不属于Qt self。这意味着你不打算混合2个库。
    2. 以这种方式使用:

      qDebug() << message;
      

答案 1 :(得分:1)

  1. 您应该使用qDebug(),因为它可以确保立即刷新输出。 std::cout不必。例如。 qDebug() << "kek2"。使用Qt时,不要将std::cout用于调试输出,这是不值得的。

  2. mousePressEvent 一个广告位。