3

にはClass ButtonsbtnRightClicked信号とmousePressEventスロットがあります。

void Buttons::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::RightButton) {
        emit btnRightClicked();
    }
}

では、次のように信号をスロットmainwindow.cppに接続します。btnRightClickedonRightClicked

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();
};
4

1 に答える 1