2017-11-20 26 views
0

ワンクリックの代わりにQPushbuttonをダブルクリックしたいと思っています。QWidget with doubleclick

connect(pb, SIGNAL(doubleClicked()), this, SLOT(comBtnPressed())); 

エラーは言う:私が試した何

"のQObjectは::接続:いいえ、そのような信号のQPushButtonを::ダブルクリックさ()"

私は当初のQPushButtonを選びましたが、私の目的のために、あなたが提案することができますdoubleclickイベントを作成できる場合は、他のオブジェクトに変更します。必ずしもプッシュボタンである必要はありません。

QtとC++のマスターに感謝します。

+0

'QPushButton'には' doubleClicked'のシグナルがありません(したがってエラーです)。実際、私はQTの中にはダブルクリックの処理がないと思うので(オペレーティングシステムを除いてダブルクリックに反応するアプリケーションは考えられません)。あなたは['QWidget :: mouseDoubleClickEvent'](http://doc.qt.io/qt-5/qwidget.html#mouseDoubleClickEvent)を見ることができますが、あなたはあなたの' clicked() 'にタイマーが必要かもしれないと思っています。ダブルクリックをキャプチャするには 'pressed()'と 'released()'を使います。これは純粋推測ですから答えはありません。 – Tas

+0

ダブルクリックをサポートできる他のオブジェクトをご存知ですか?画像は多分または他の?ダブルクリックできる限り、ボタンを他のものに置き換えても構いません。 – GeneCode

+0

視覚的にボタンや他のウィジェットのように見せたいですか?視覚的には – eyllanesc

答えて

1

簡単な解決策は、私たちはmouseDoubleClickEventメソッドを上書きし、そしてあなたがウィジェットを描画するためにpaintEventを上書きする可能性が私たち自身のウィジェットを作成することです:

#ifndef DOUBLECLICKEDWIDGET_H 
#define DOUBLECLICKEDWIDGET_H 

#include <QWidget> 
#include <QPainter> 

class DoubleClickedWidget : public QWidget 
{ 
    Q_OBJECT 
public: 
    explicit DoubleClickedWidget(QWidget *parent = nullptr):QWidget(parent){ 
     setFixedSize(20, 20); 
    } 

signals: 
    void doubleClicked(); 
protected: 
    void mouseDoubleClickEvent(QMouseEvent *){ 
     emit doubleClicked(); 
    } 
    void paintEvent(QPaintEvent *){ 
     QPainter painter(this); 
     painter.fillRect(rect(), Qt::green); 
    } 
}; 

#endif // DOUBLECLICKEDWIDGET_H 

あなたはQtのデザイナーでそれを使用したい場合は、あなたのように促進することができますlinkに示されている。

、次に接続:

//new style 
connect(ui->widget, &DoubleClickedWidget::doubleClicked, this, &MainWindow::onDoubleClicked); 
//old style 
connect(ui->widget, SIGNAL(doubleClicked), this, SLOT(onDoubleClicked)); 

以下linkの例があります。

+0

これは甘く見えます。私は後でそれを試してみると、うまくいくとすぐに彼の答えを受け入れる。応答していただきありがとうございます。 :) – GeneCode

+1

@GeneCode例を公開しました。次のリンクから見つけることができます:https://github.com/eyllanesc/stackoverflow/tree/master/47383722 – eyllanesc

関連する問題