2017-11-20 28 views
0

한 번의 클릭 대신 QPushbutton을 두 번 클릭 할 수 있기를 원합니다.QWidget with doubleclick

내가 시도하는 것 :

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

오류 "QObject를이 : 연결 : 아니오 같은 신호 QPushButton을을 ::로 DoubleClicked()"를 말한다

내가 처음 QPushButton을 선택했다,하지만 내 목적을 위해, 당신이 제안 할 수 있습니다 doubleclick 이벤트를 만들 수있는 경우 다른 객체로 변경하십시오. 푸시 버튼 일 필요는 없습니다.

Qt와 C++의 마스터 들께 감사드립니다.

+0

'QPushButton'에는'doubleClicked'에 대한 신호가 없습니다 (따라서 오류). 사실 QT에는 더블 클릭 처리가 없다고 생각합니다. 운영 체제를 제외하고 더블 클릭에 응답하는 응용 프로그램을 생각할 수 없습니다. ['QWidget :: mouseDoubleClickEvent'] (http://doc.qt.io/qt-5/qwidget.html#mouseDoubleClickEvent)를 볼 수는 있지만'clicked()'에 타이머가 필요하다고 생각됩니다. , 또는'pressed()'와'released()'를 사용하여 더블 클릭을 잡아라. 이것은 순수한 추측이므로 대답이 아닙니다. – Tas

+0

더블 클릭을 지원할 수있는 다른 개체를 알고 계십니까? 이미지 어쩌면 또는 다른? 나는 doubleclick 수있는 한 다른 일로 버튼을 교체 마음을 안합니다. – GeneCode

+0

시각적으로 단추 또는 다른 위젯처럼 보이길 원하십니까? – eyllanesc

답변

1

간단한 해결책은 우리가 덮어 mouseDoubleClickEvent 방법을 우리 자신의 위젯을 만드는 것입니다, 당신은 위젯 그릴 paintEvent를 덮어 쓸 수 있습니다 : 당신은 당신이로 홍보 할 수 Qt는 디자이너와 함께 사용하려면

#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 

을 다음에 표시된 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