2011-04-17 16 views
9

मैं क्यूटी में "ड्रॉप डाउन बटन" कैसे बना सकता हूं?क्यूटी: ड्रॉप-डाउन बटन?

एक गैर क्यूटी उदाहरण के लिए, देखें: Combination button/dropdown in office

प्रमुख मुद्दा है कि विजेट प्राथमिक कार्रवाई के लिए एक आइकन की जरूरत है, और एक नेत्रहीन अलग "अधोगामी तीर" माध्यमिक माउस/कार्यों को दिखाने के लिए।

माध्यमिक विकल्पों के लिए "पुलडाउन तीर" पर क्लिक करने पर, उपयोगकर्ता को चुनने के लिए अन्य आइकन के ग्रिड के साथ प्रस्तुत किया जाना चाहिए। (सभी आइकन, कोई पाठ नहीं।)

क्या क्यूटी के पास ऐसा विजेट है जो ऐसा कर सकता है?

यदि नहीं, तो यह क्यूटी में कैसे बनाया जा सकता है? (मैं एक नया क्यूटी उपयोगकर्ता हूँ, इसलिए एक क्यूटी डिजाइनर आधारित समाधान आदर्श होगा।)

धन्यवाद

उत्तर

0

आपकी सबसे अच्छी शर्त का उपयोग करने के लिए QAbstractButton का अपना उप-वर्ग बनाना होगा। आप नामित हिस्से में नियमित आइकन और दूसरे क्षेत्र में अपना स्वयं का आइकन बनाना चाहते हैं। पॉपअप-मेन्यू को दिखाने के लिए आपको माउस प्रेस इवेंट को भी पकड़ने की आवश्यकता होगी यदि यह नामित क्षेत्र में है (नियमित बटन-हैंडलिंग कोड इसे लेने के बजाए, जिससे माउस को रिलीज़ होने पर बटन पर क्लिक किया गया सिग्नल होता है) ।

+0

धन्यवाद। क्या आप किसी भी ट्यूटोरियल की सिफारिश कर सकते हैं? मैंने कभी विजेट को उप-वर्गीकृत नहीं किया है। बिल्कुल यकीन नहीं है कि ड्राइंग कैसे होने वाला है। – nonot1

+0

@ nonot1: थोड़ा देर हो चुकी है, लेकिन मूलभूत अवलोकन के लिए http://doc.trolltech.com/latest/widgets-analogclock.html आज़माएं, और http://doc.trolltech.com/latest/widgets-calculator.html विशेष रूप से एक प्रकार का बटन ओवरराइड करता है। वे ट्यूटोरियल के बजाए उदाहरण हैं, लेकिन आपको कुछ मदद करने चाहिए। –

0

मुझे एक ही समस्या थी। मुझे कोई सूट विजेट नहीं मिला। मैंने दो बटनों का उपयोग करके समस्या हल की, जबकि दूसरे में मार्जिन 0 पर सेट किया गया और एक छोटा सा स्वयं खींचा तीर आइकन। आप इसे यहां देख सकते हैं:

enter image description here बाईं ओर, लंबवत केंद्र में, एक बार नीचे, एक बार नीचे।

यह समाधान त्रुटिपूर्ण है। ओएस एक्स में दूसरा बटन नियमित बटन की तरह नहीं खींचा जाता है (कस्टम मार्जिन की वजह से) और बदसूरत आयताकार ग्रे बटन के रूप में चिपक जाता है ...

0

मुझे लगता है कि आप QComboBox को उपclass करना चाहते हैं और आवश्यक कार्यक्षमता/देखो (पेंटवेन्ट के साथ) या कुछ) इसके विजेट के रूप में जो आप देख रहे हैं उसके करीब दिखता है (मुझे लगता है)।

शुभकामनाएं!

11

वास्तव में, एक QToolButton यह काफी अच्छा करता है।

http://qt-project.org/forums/viewthread/5377

ऐसा प्रतीत होता है ओ पी एक क्यूटी मंच में इस पूछा और एक बेहतर जवाब मिल गया। इसे पूर्णता के लिए यहां जोड़ना।

4

मैंने अपनी पिछली परियोजना के लिए एक बटन से एक अग्निरोधक ड्रॉप डाउन मेनू बनाया। असल में मैं QPushButton subclass और कुछ कस्टम पेंटिंग किया था। तो फिर मैं उस बटन समारोह (QPushButton.setMenu (Qmenu)। अनुलग्न चित्र शो कि यह दिखता का उपयोग कर के लिए एक मेनू जोड़ें।

Dropbutton

7

आप एक QToolButton उपयोग करना होगा। तो फिर तुम सेट कर सकते हैं बटन के टेक्स्ट के बजाय आइकन, पॉपअपमेनू प्रॉपर्टी को मेनबूटटनपॉप पर सेट करें।यह मेरा कोड है:

//widget.cpp: 
#include "widget.h" 
#include "ui_widget.h" 

#include <QtGui> 

Widget::~Widget() 
{ 
    delete ui; 
} 

Widget::Widget(QWidget *parent) : 
    QWidget(parent), 
    ui(new Ui::Widget) 
{ 
    ui->setupUi(this); 
    menu = new QMenu(this); 
    act0 = new QAction("test",this); 
    act1 = new QAction("test1",this); 
    act0->setObjectName("act0"); 
    act1->setObjectName("act1"); 
    menu->addAction(act0); 
    menu->addAction(act1); 
    ui->toolButton->setMenu(menu); 
    connect(ui->toolButton,SIGNAL(clicked()),this,SLOT(slotTest())); 
    connect(act0,SIGNAL(triggered()),this,SLOT(slotTest())); 
    connect(act1,SIGNAL(triggered()),this,SLOT(slotTest())); 
    adjustSize(); 
} 

void Widget::slotTest() 
{ 
    QToolButton *tbtn = qobject_cast<QToolButton*>(sender()); 
    QAction *act = qobject_cast<QAction*>(sender()); 
    if(tbtn) 
    { 
     qDebug() << "event raised by QToolButton: " << tbtn->objectName(); 
    } 
    if(act) 
    { 
     qDebug() << "event raised by QAction: " << act->objectName(); 
    } 
} 

//widget.h: 
#ifndef WIDGET_H 
#define WIDGET_H 

#include <QWidget> 
class QMenu; 
class QAction; 
namespace Ui { 
class Widget; 
} 

class Widget : public QWidget 
{ 
    Q_OBJECT 

public: 
    explicit Widget(QWidget *parent = 0); 
    ~Widget(); 
private slots: 
    void slotTest(); 
private: 
    QMenu *menu; 
    QAction *act0; 
    QAction *act1; 
    Ui::Widget *ui; 
}; 

#endif // WIDGET_H 

//widget.ui: 
<?xml version="1.0" encoding="UTF-8"?> 
<ui version="4.0"> 
<class>Widget</class> 
<widget class="QWidget" name="Widget"> 
    <property name="geometry"> 
    <rect> 
    <x>0</x> 
    <y>0</y> 
    <width>53</width> 
    <height>40</height> 
    </rect> 
    </property> 
    <property name="windowTitle"> 
    <string>Widget</string> 
    </property> 
    <layout class="QVBoxLayout" name="verticalLayout"> 
    <item> 
    <widget class="QToolButton" name="toolButton"> 
    <property name="text"> 
     <string/> 
    </property> 
    <property name="icon"> 
     <iconset> 
     <normaloff>cerca.png</normaloff>cerca.png</iconset> 
    </property> 
    <property name="popupMode"> 
     <enum>QToolButton::MenuButtonPopup</enum> 
    </property> 
    </widget> 
    </item> 
    </layout> 
</widget> 
<layoutdefault spacing="6" margin="11"/> 
<resources/> 
<connections/> 
</ui> 
1

आप नियमित पुश बटन पर setMenu() का उपयोग कर सकते हैं।

QMenu* menu = new QMenu(this); 
menu->addAction(tr("Sub-action")); 
ui->button->setMenu(menu); 

मुझे नहीं लगता कि मेनू विस्तार हालांकि ऐच्छिक है ...

संबंधित मुद्दे