私はmineseeperゲームのためのGUIを作成するためのQt Creatorの使用しています。 右クリックでクリックしたQpushButtonを知る方法はありますか?ゲームの旗のために。 他の言葉では、どの信号が右クリックに使用されていますか?Qtの右クリックのQPushButton
答えて
はmousePressEventスロットでフィルタを使用して独自のボタンを作成します。
qrightclickbutton.h
#include "qrightclickbutton.h"
QRightClickButton::QRightClickButton(QWidget *parent) :
QPushButton(parent)
{
}
void QRightClickButton::mousePressEvent(QMouseEvent *e)
{
if(e->button()==Qt::RightButton)
emit rightClicked();
}
は今、この
QRightClickButton *button = new QRightClickButton(this);
ui->gridLayout->addWidget(button);
connect(button, SIGNAL(rightClicked()), this, SLOT(onRightClicked()));
のように接続し
#ifndef QRIGHTCLICKBUTTON_H
#define QRIGHTCLICKBUTTON_H
#include <QPushButton>
#include <QMouseEvent>
class QRightClickButton : public QPushButton
{
Q_OBJECT
public:
explicit QRightClickButton(QWidget *parent = 0);
private slots:
void mousePressEvent(QMouseEvent *e);
signals:
void rightClicked();
public slots:
};
#endif // QRIGHTCLICKBUTTON_H
qrightclickbutton.cpp MainWindow.cppのスロットを作成します。
void MainWindow::onRightClicked()
{
qDebug() << "User right clicked me";
}
それは私のために働く!
私はちょうどそれをサブクラス化する必要のない任意の既存のボタンを右クリック可能にするために、この小さなヘルパーアダプターを書いた誰かが一般的なclicked()シグナルとカスタムのrightClicked()シグナルの両方に接続したい場合は、オーバーライドされた 'mousePressEvent(QMouseEvent * e)の終わりで' QPushButton :: mousePressEvent(e); ' ) ' – Krzysiek
私はのQPushButtonは内部でのみマウスの左クリックを聞くために実装されると思います。しかし、簡単にQPushButtonを拡張して、マウスのリリースイベントと言って再実装することができます。
signals:
void rightClicked();
protected:
void mouseReleaseEvent(QMouseEvent *e) {
if (e->button() == Qt::RightButton) emit rightClicked();
else if (e->button() == Qt::LeftButton) emit clicked();
}
を...またはあなたがボタンの外で同じ検査を行うことができますので、MouseEventのポインタを転送クリックした信号のオーバーロードを作成することができます。たとえば、カスタムrightClicked()
信号を発します。
signals:
void clicked(QMouseEvent *);
protected:
void mouseReleaseEvent(QMouseEvent *e) {
emit clicked(e);
}
次に、あなたはあなたにボタンのclicked(QMouseEvent *)
信号を接続し、それに応じて進みスロットでチェックを行います。
私は 'QPushButton'を使っていますが、' button() 'はありません。私は何をすべきか? – KhoC
@KhoC何? 'button()'は 'QMouseEvent'のメソッドです。 – cmannett85
私は 'mouseReleaseEvent'をどうすれば使うことができるのか分かりません。 'mouseReleaseEvent'で' rightClicked() 'をなぜ呼び出すのですか? – KhoC
:
class CRightClickEnabler : public QObject
{
public:
CRightClickEnabler(QAbstractButton * button): QObject(button), _button(button) {
button->installEventFilter(this);
};
protected:
inline bool eventFilter(QObject *watched, QEvent *event) override {
if (event->type() == QEvent::MouseButtonPress)
{
auto mouseEvent = (QMouseEvent*)event;
if (mouseEvent->button() == Qt::RightButton)
_button->click();
}
return false;
}
private:
QAbstractButton* _button;
};
使用法:
connect(ui->pushButton, &QPushButton::clicked, [](){qDebug() << "Button clicked";});
new CRightClickEnabler(ui->pushButton);
を今から、clicked
信号意志を右クリックと左クリックによってトリガされます。このオブジェクトを削除する必要はありません - それは親としてui->pushButton
を使用していますし、親が破棄されるとはQtによって自動削除されます。
明らかに、新しい信号をここに宣言し、希望の場合はclicked
の代わりに右クリックしてその信号を放出する2行のコードを書くことができます。
- 1. QPushButtonの右クリックcontextMenu
- 2. QPushbutton settext QTの問題?
- 3. Qt QPushbuttonアイコン上のアイコン
- 4. Qt - QPushButton改行が機能しない
- 5. システムテーマの使い方QPushButtonのアイコン - Linux上のQtデザイナー
- 6. いくつかのQTウィンドウをQPushButtonで接続する
- 7. QPushbuttonのクリックされたスロットの座標にアクセスする
- 8. QPushButton
- 9. 右クリック、テキストキャプチャ
- 10. メインメニューを右クリック
- 11. 右クリックJButton
- 12. Extjsコンテキストメニュー(右クリック)
- 13. WinForms ListBox右クリック
- 14. 右クリックjquery
- 15. アップルスクリプトファイルを右クリック
- 16. Objective-C:NSStatusBar右クリックと左クリック
- 17. 左クリックまたは右クリックの場合
- 18. QPushButtonのツールチップ
- 19. QpushbuttonのPyQTQ HoverEvent?
- 20. マウスイベントのバグを右クリック
- 21. Windowsフォームボタンのアクションを右クリック
- 22. GtkTreeViewの行を右クリック
- 23. RichEditableTextの右クリックを検出
- 24. 右クリックからのディレクトリパス
- 25. Windowsエクスプローラで右クリック
- 26. Qpushbuttonの丸いアイコン
- 27. Qt - QPushButtonアイコンのマージンが同じになる必要があります
- 28. カスタムメニュー/コンテキストメニューマウスオーバーまたは右クリック
- 29. Bukkit - 右クリックを検出
- 30. ブックマークレット - 右クリックしますか?
あなたはおそらく 'イベントを()'オーバーライドして、信号を自分で放出する必要があります。 – rainer
なぜ、誰か-1この質問?はい、もっと努力したかもしれませんが、問題は良いことです。良い答えのためにムハンマドに感謝します。 – zeFree