在“类按钮”中,我有一个“btnRightClicked”信号和一个“mousePressEvent”槽:
但是我运行了这个程序,什么也没有发生。我猜测原因是因为我没有连接到
我在中央窗口部件上设置了一些按钮,我希望当右键单击它们时,它们能够触发右键单击事件。那么我该如何使其正常工作呢?
谢谢。
void Buttons::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::RightButton) {
emit btnRightClicked();
}
}
在 mainwindow.cpp
中,我将 btnRightClicked
信号连接到 onRightClicked
槽,代码如下:
connect(&mButtons, SIGNAL(btnRightClicked()), this, SLOT(onRightClicked()));
< p > onRightClicked
插槽的用法如下:
void MainWindow::onRightClicked()
{
qDebug() << "right clicked";
}
但是我运行了这个程序,什么也没有发生。我猜测原因是因为我没有连接到
mousePressEvent
插槽。我对Qt还比较新,不知道我是否正确。我在中央窗口部件上设置了一些按钮,我希望当右键单击它们时,它们能够触发右键单击事件。那么我该如何使其正常工作呢?
谢谢。
编辑:button.h
中:
class Buttons : public QObject
{
Q_OBJECT
public:
Buttons();
QVector<QPushButton*> buttons;
void setButtons(int totalBtns) {
for(int i = 0; i < totalBtns; i++) {
buttons[i]->setObjectName(QString::number(i));
buttons[i]->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
}
}
public slots:
void mousePressEvent(QMouseEvent *e) {
if(e->button() == Qt::RightButton) {
emit btnRightClicked();
}
}
signals:
void btnRightClicked();
};
connect(&mButtons, ...
。mButtons
是什么?你在输出日志中看到了什么? - Dmitry SazonovmousePressEvent
添加一个override
关键字会给你一些提示。@Simon 提供了正确的答案。mousePressEvent
是QWidget
的虚方法,你应该重写它。但是你创建了自己的类,没有任何逻辑来调用你自己的mousePressEvent
方法。 - Dmitry Sazonov