我有一个自定义按钮,除了左键单击外,还可以右键单击。它的工作原理如下:
private slots:
void mousePressEvent(QMouseEvent *e) {
if(e->button() == Qt::RightButton) {
std::cout << "kek2";
emit rightClicked();
}
QPushButton::mousePressEvent(e);
}
由于一些奇怪的原因,左键单击工作正常,并且没有处理右键单击(通过缺少kek2输出判断),直到我执行左键单击,一次处理所有右键单击。为什么呢?
答案 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;
,它仍然是错误的!
您也可以在没有std::endl;
std::cout << message; //prints message
std::cout.flush(); //flushes the output so it will be visible as well
例如,您可以创建自己的类或您自己的函数。
qDebug()
。 qDebug自动刷新流,因此您不必编写额外的代码,也不属于Qt self。这意味着你不打算混合2个库。以这种方式使用:
qDebug() << message;
答案 1 :(得分:1)
您应该使用qDebug()
,因为它可以确保立即刷新输出。 std::cout
不必。例如。 qDebug() << "kek2"
。使用Qt时,不要将std::cout
用于调试输出,这是不值得的。
mousePressEvent
不一个广告位。