にはClass Buttons
、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()));
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();
};