मैं एक मिनीसेपर गेम के लिए एक gui बनाने के लिए क्यूटी निर्माता का उपयोग कर रहा हूं। मैं क्यूपश बटन को राइटक्लिक के साथ कैसे क्लिक कर सकता हूं? खेल में झंडा के लिए। दूसरे शब्द में, कौन सा संकेत दाएं क्लिक के लिए उपयोग किया जाता है?क्यूटी दाएं क्लिक करें QPushButton
उत्तर
माउसPressEvent स्लॉट पर फ़िल्टर के साथ अपना स्वयं का बटन बनाएं।
qrightclickbutton.h
#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
#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()));
तरह कनेक्ट MainWindow.cpp में एक स्लॉट बनाएँ।
void MainWindow::onRightClicked()
{
qDebug() << "User right clicked me";
}
यह मेरे लिए काम करता है!
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
संकेत होगा
यदि कोई भी सामान्य क्लिक() सिग्नल और कस्टम दाएं क्लिक() सिग्नल और कस्टम दोनों को कनेक्ट करना चाहते हैं() सिग्नल - ओवरराइड 'mousePressEvent (QMouseEvent * e के अंत में 'QPushButton :: mousePressEvent (e);' को कॉल करना आवश्यक है।) ' – Krzysiek
मुझे लगता है कि QPushButton को केवल बाएं माउस क्लिक सुनने के लिए आंतरिक रूप से लागू किया गया है। लेकिन आप आसानी से QPushButton का विस्तार कर सकते हैं और फिर से कार्यान्वित कर सकते हैं चलो माउस रिलीज इवेंट कहें और सही माउस बटन दबाए जाने पर अपनी बात करें, उदा। उदाहरण के लिए एक कस्टम rightClicked()
संकेत फेंकना:
signals:
void rightClicked();
protected:
void mouseReleaseEvent(QMouseEvent *e) {
if (e->button() == Qt::RightButton) emit rightClicked();
else if (e->button() == Qt::LeftButton) emit clicked();
}
... या आपके द्वारा क्लिक संकेत है कि MouseEvent सूचक अग्रेषित करता है ताकि आप बटन के बाहर उसी की जांच कर सकते हैं की एक अधिभार बना सकते हैं।
signals:
void clicked(QMouseEvent *);
protected:
void mouseReleaseEvent(QMouseEvent *e) {
emit clicked(e);
}
तो फिर तुम स्लॉट आप के लिए बटन के clicked(QMouseEvent *)
संकेत कनेक्ट और उसके अनुसार आगे बढ़ना में जांच करते हैं।
मैं 'QPushButton' का उपयोग कर रहा हूं और उसमें कोई 'बटन()' नहीं है। मुझे क्या करना चाहिए? – KhoC
@KhoC क्या ?? 'बटन()' 'QMouseEvent' का एक तरीका है। – cmannett85
इसलिए मुझे नहीं पता कि मैं 'mouseReleaseEvent' का उपयोग कैसे कर सकता हूं। आप 'mouseReleaseEvent' में 'rightClicked()' क्यों कहते हैं? – KhoC
मैं सिर्फ यह उपवर्ग करने की कोई जरूरत के साथ किसी भी मौजूदा बटन पर राइट-क्लिक करने योग्य बनाने के लिए इस छोटे सहायक एडाप्टर लिखा था राइट क्लिक के साथ-साथ बाएं क्लिक से ट्रिगर करें। इस ऑब्जेक्ट को हटाने की कोई आवश्यकता नहीं है - यह माता-पिता के रूप में ui->pushButton
का उपयोग करता है और माता-पिता को नष्ट होने पर क्यूटी द्वारा स्वतः हटा दिया जाएगा।
जाहिर है, आप यहां एक नया सिग्नल घोषित करने के लिए कोड की 2 पंक्तियां (शाब्दिक रूप से) लिख सकते हैं और वांछित होने पर clicked
के बजाय दायाँ क्लिक पर सिग्नल छोड़ सकते हैं।
- 1. QPushButton
- 2. क्यूटी - निचले दाएं
- 3. क्यूटी
- 4. QPushButton
- 5. फ्लैश दाएं क्लिक से अलग अभिनय पर क्लिक करें
- 6. एक QLineEdit या QPushButton
- 7. क्यूटी: स्टेटस बार में दो विजेट्स (QPushButton कहें), बाएं से एक और दूसरी तरफ दाएं तरफ कैसे जोड़ें?
- 8. उद्देश्य-सी: NSStatusBar दाएं और बाएं क्लिक
- 9. वीएस 2008 इंटेलिजेंस दाएं क्लिक पर लटकते
- 10. बाएं ईवेंट को दाएं माउस पर क्लिक करें
- 11. आकार के लिए माउस दाएं बटन डबल क्लिक करें
- 12. एक संदर्भ मेनू खोलने के लिए क्यूटी में दाएं क्लिक घटना
- 13. क्यूटी
- 14. QPushButton पर छवि कैसे सेट करें?
- 15. क्यूटी
- 16. क्यूटी: QMainWindow
- 17. क्यूटी "बंदर" परीक्षण - यादृच्छिक क्लिक और कीप्रेस को अनुकरण करें
- 18. क्यूटी में QLineEdit के क्लिक इवेंट कैसे प्राप्त करें?
- 19. होवर और दबाया स्टाइलशीट क्यूटी
- 20. क्यूटी, पुशबटन, आईडी विशेषता? यह जानने के लिए कि कौन सा बटन क्लिक किया गया था
- 21. क्यूटी
- 22. एक QTableWidget में एक QTableWidgetItem में एक QPushButton जोड़ें, यह कैसे क्यूटी :: AlignHCenter
- 23. क्यूटी
- 24. दाएं
- 25. दाएं
- 26. दाएं
- 27. क्यूटी मेमोरी मैनेजमेंट वस्तुओं
- 28. क्यूटी मुद्दा स्लॉट
- 29. ग्रे डॉट्स को हटाने के लिए QPushButton की चेक की गई स्थिति को कैसे शैलीबद्ध करें?
- 30. स्टाइलशीट के साथ QPushButton आइकन/टेक्स्ट स्पेसिंग को कैसे बदलें?
आपको शायद 'ईवेंट() 'को ओवरराइड करने और सिग्नल को उत्सर्जित करने की आवश्यकता होगी। – rainer
किसी भी प्रश्न के लिए 1 क्यों ?? हां, और अधिक प्रयास हो सकते थे, लेकिन सवाल एक अच्छा है। एक अच्छे जवाब के लिए मुहम्मद को धन्यवाद। – zeFree