qt - How to repetitive function while holding QPushButton? -
मेरे पास निम्न कोड है:
शून्य MainWindow :: OnClicked () {otesanek-> gt ; सेटपोस (ओटेसेंक- & gt; pos ()। X () + 5, ओटेसानेक- & gt; pos ()। Y ()); } कनेक्ट (सही, सिग्नल (क्लिक किया ()), यह, स्लॉट (ऑनक्लाइट ()));
otesanek QGraphicsScene में QGraphicsItem है और सही एक ही दृश्य में QPushButton है
मेरा लक्ष्य: होल्डिंग द्वारा बटन (दाएं) आइटम को 5 पिक्स के ऊपर ले जाता है, जब तक कि बटन दबाए नहीं जाते।
यह कोड कर रहा है: मुझे 5 पिक्स और फिर 5 पिक्स से अधिक स्थानांतरित करने के लिए फिर से दोबारा क्लिक करना है
मैंने इसे दबाने वाले फ़ंक्शन के साथ करने का प्रयास किया, लेकिन मुझे कोई परिणाम नहीं मिला।
आशा है कि आप मेरी समस्या समझेंगे उत्तर के लिए धन्यवाद: -)
आप बार-बार अपनी कक्षा में स्लॉट कॉल करने के लिए QTimer
का उपयोग कर सकते हैं और MousePress
और का उपयोग कर सकते हैं।
QTimer
MyGraphicsView.h
ईवेंट > <पूर्व> #include & lt; QGraphicsScene & gt; # शामिल करें & lt; QGraphicsView & gt; # शामिल करें & lt; QMouseEvent & gt; # शामिल करें & lt; QInputDialog & gt; # शामिल करें & lt; QGraphicsEllipseItem & gt; # शामिल करें & lt; QTimer & gt; कक्षा मायग्राफिक्स देखें: सार्वजनिक QGraphicsView {Q_OBJECT सार्वजनिक: माइग्रफ़िक्स दृश्य () {} माइग्रफ़िक्स दृश्य (QGraphicsScene * दृश्य, QWidget * parent = 0); ~ माइग्रफ़िक्सदृश्य () {}; सार्वजनिक स्लॉट: शून्य माउसप्रेसइवेंट (QMouseEvent * ईवेंट); शून्य mouseReleaseEvent (QMouseEvent * घटना); शून्य कदम आईटम (); निजी: QGraphicsEllipseItem * आइटम; QTimer * टाइमर; }; MyGraphicsView :: MyGraphicsView (QGraphicsScene * दृश्य, QWidget * parent) ): QGraphicsView (दृश्य, अभिभावक) {आइटम = नया QGraphicsEllipseItem (0, यह-> दृश्य ()); आइटम- & gt; सेटखाना (-50.0, -50.0, 100.0, 100.0); आइटम- & gt; सेटफ़्लैग (QGraphicsItem :: ItemIsMovable); टाइमर = नया QTimer (यह); कनेक्ट (टाइमर, सिग्नल (टाइमआउट ()), यह, स्लॉट (moveItem ())); } शून्य MyGraphicsView :: mousePressEvent (QMouseEvent *) {timer- & gt; प्रारंभ (10); } शून्य MyGraphicsView :: mouseReleaseEvent (QMouseEvent *) {timer- & gt; रोक (); } शून्य MyGraphicsView :: moveItem () {item- & gt; setPos (आइटम- & gt; pos ()। X () + 5, आइटम- & gt; pos ()। Y ()); }
main.cpp
# शामिल "MyGraphicsView.h" # शामिल करें & lt; QApplication & gt; Int main (int argc, char ** argv) {QApplication app (argc, argv); QGraphicsScene दृश्य; Scene.setSceneRect (-100.0, -100.0, 200.0, 200.0); मायग्राफिक्स दृश्य देखें (और दृश्य); view.show (); वापसी app.exec (); }
यहां दो पुनरावृत्तियों के बीच की देरी 10 एमएस है, जो आप अपनी पसंद के अनुसार समायोजित कर सकते हैं। मैंने स्पष्ट रूप से जांच नहीं की कि किस माउस बटन को दबाया गया है, लेकिन यह आप QMouseEvent :: button ()
पर कॉल कर कर सकते हैं और इसे Qt :: MouseButton
enum से तुलना कर सकते हैं। < / P>
क्या यह सहायता है?
Comments
Post a Comment