2017-11-20 2 views
0

Ich möchte auf einen QPushbutton doppelklicken statt mit einem einzigen Klick.QWidget mit doubleclick

Was ich versucht:

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

Fehler sagt "QObject :: connect: kein solches Signal QPushButton :: doubleClicked()"

Ich wählte QPushButton zunächst, aber für meine Zwecke, können Sie vorschlagen zu einem anderen Objekt wechseln, wenn es ein Doppelklick-Ereignis machen kann. Nicht unbedingt ein Druckknopf sein.

Danke Meister von Qt und C++.

+0

'QPushButton' hat kein Signal für' doubleClicked' (daher der Fehler). Tatsächlich glaube ich nicht, dass irgendetwas in QT eine Doppelklick-Handhabung hat, wie es scheint (ich kann mir keine Anwendung vorstellen, die auf ein Doppelklick reagiert, außer bei Betriebssystemen). Sie könnten nach ['QWidget :: mouseDoubleClickEvent'] (http://doc.qt.io/qt-5/qwidget.html#mouseDoubleClickEvent) schauen, aber ich vermute, dass Sie vielleicht nur einen Timer in Ihrer' clicked() 'benötigen oder verwenden Sie 'pressed()' und 'released()', um einen Doppelklick aufzunehmen. Keine Antwort, denn das ist reine Vermutung. – Tas

+0

Kennen Sie ein anderes Objekt, das Doppelklick unterstützen kann? Bild vielleicht oder anderes? Es macht nichts, den Knopf durch andere Sache zu ersetzen, solange es Doppelklick machen kann. – GeneCode

+0

visuell möchten Sie es wie eine Schaltfläche oder ein anderes Widget aussehen? – eyllanesc

Antwort

1

Eine einfache Lösung ist unser eigenes Widget zu erstellen, so überschreiben wir die mouseDoubleClickEvent Methode, und man konnte paintEventO überschreiben Sie das Widget zu zeichnen:

#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 

Wenn Sie es mit Qt Designer verwenden möchten, können Sie fördern als im Folgenden dargestellt link.

und dann verbinden:

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

Im folgenden link gibt es ein Beispiel.

+0

Das sieht süß aus. Ich werde es später versuchen und wenn es funktioniert, werde ich seine Antwort bald akzeptieren. Danke für die Antwort. :) – GeneCode

+1

@GeneCode Ich habe ein Beispiel veröffentlicht, Sie finden es unter folgendem Link: https://github.com/eyllanesc/stackoverflow/tree/master/47383722 – eyllanesc