2011-12-02 12 views
6

मैं क्यूटी में एक खोज-प्रकार टेक्स्ट फ़ील्ड बनाना चाहता हूं जिसमें मानक टेक्स्ट के साथ-साथ मैं "टैग" कहूंगा ... मूल रूप से अतिरिक्त खोज शब्द जिन्हें व्यक्तिगत रूप से हाइलाइट किया गया है और अलग किया गया है । मैं इसे "चुना गया" (जावास्क्रिप्ट पुस्तकालय) में बहु-चयन की तरह दिख रहा हूं। http://harvesthq.github.com/chosen/क्यूटी - बहु-चयन

मैं खोज के माध्यम से कुछ भी खोजने में असमर्थ रहा हूं। ऐसा लगता है कि मानक क्यूटी टेक्स्ट बॉक्स प्रकार "उप-विजेट" के लिए डिज़ाइन नहीं किए गए हैं।

ऐसा प्रतीत होता है कि QTextEdit HTML का समर्थन करता है ... जो एक संभावना हो सकती है ... लेकिन दस्तावेज़ों के संदर्भ में डॉक्स मेरे लिए बहुत स्पष्ट नहीं हैं (जो मुझे लगता है कि वांछित स्वरूपण प्राप्त करने की आवश्यकता होगी)। http://doc.qt.io/qt-5/qtextedit.html#html-prop

यह मजाकिया ... मुझे इस सबमिशन पेज के निचले हिस्से में जाना पड़ा और मुझे एहसास हुआ कि मुझे यह टैग करना है (यह मेरा पहला SO सवाल है) ... यह टैग-एडर बॉक्स लगभग वही है जो मैं चाहता हूं!

+0

सीएसएस-संगतता के बारे में: http://developer.qt.nokia.com/doc/qt-4.8/richtext-html-subset.html। आप टेबल और कुछ सीएसएस-जादू के साथ वांछित व्यवहार को अनुकरण करने का प्रयास कर सकते हैं, हालांकि यह आसान नहीं होगा क्योंकि Richtext किसी इनपुट घटक ('टैग हटाएं' बटन का समर्थन नहीं करता है?)। अधिक सटीक उत्तर प्राप्त करने के लिए आपको वांछित व्यवहार के बारे में अधिक जानकारी प्रदान करनी चाहिए। क्या हर शब्द "टैग" होना चाहिए या क्या इसमें कुछ टैग हैं? क्या टैग किए गए शब्दों को संपादन योग्य या केवल हटाने योग्य माना जाता है? अगर मेरे पास एक पल है तो मैं आपको कुछ बनाने की कोशिश करूंगा। –

उत्तर

1

यहाँ एक उपयोगकर्ता प्रकार, पायथन में लिखा के रूप में एक QLineEdit में बटन लगाने का एक बहुत ही सरल दिया गया है:

from PySide.QtCore import * 
from PySide.QtGui import * 

class Entry(QLineEdit): 

    def __init__(self): 
     QLineEdit.__init__(self) 
     self.buttons = [] 
     self.backupText = '' 
     self.textEdited.connect(self.on_change) 
     self.layout = QHBoxLayout() 
     self.setLayout(self.layout) 
     self.layout.addStretch() 
     marginz = QLabel(' ') 
     marginz.show() 
     margin = marginz.width() 
     marginz.hide() 
     self.layout.setContentsMargins(margin, margin, margin, margin) 

    def on_change(self): 
     if self.text()[-1] == ' ' and not self.text().endswith(' '): 
      if len(self.text()) > len(self.backupText): 
       self.setText(self.text() + ' ') 
       self.buttons.append(QPushButton(self.text().split()[-1])) 
       self.layout.insertWidget(self.layout.count()-1, self.buttons[-1]) 
      else: 
       self.setText(self.text()[0:-1]) 
       self.buttons[-1].hide() 
       del self.buttons[-1] 
     self.backupText = self.text() 


app = QApplication([]) 

window = QMainWindow() 
window.setStyleSheet(
    'QPushButton {border: 1px solid gray; background: lightgray; color: black;}') 
entry = Entry() 
window.setCentralWidget(entry) 
window.show() 

app.exec_() 

यह एक QHBoxLayout बनाता है और प्रत्येक शब्द आप लिखने के लिए यह करने के लिए एक बटन जोड़ता है, और ले जाता है जब आप शब्द से छुटकारा पा लेते हैं तो बटन दूर हो जाता है।

यदि आप प्रत्येक उप-विजेट के अंदर एक करीबी बटन डालना चाहते हैं, तो आप इसके लिए एक कस्टम विजेट भी बना सकते हैं।

संपादित

j_kubik की टिप्पणी के रूप में कहा गया है, व्यापक मार्जिन बटन के साथ सिस्टम टैग बटन पाठ उपयोगकर्ता द्वारा वर्तमान में लिख रहा है ओवरलैप का कारण होगा। मैंने डाले गए बटनों (स्टाइलशीट्स के साथ) के मार्जिन को लागू करने के लिए कोड को संशोधित किया है, उपयोगकर्ता द्वारा टाइप की जाने वाली प्रत्येक जगह के लिए एक अतिरिक्त स्थान जोड़ा है, और QHBoxLayout की सामग्री सेट करें, मार्जिन एक स्थान के समान चौड़ाई ("") सेट करें। अब बटन डाले गए पाठ को ओवरलैप नहीं करेंगे।

+1

यह सही तरीके से गठबंधन कैसे किया जाता है? मेरा मतलब है कि वे बटन सिर्फ पाठ से व्यापक होंगे, क्या वे अगले टाइप किए गए शब्द को ओवरलैप नहीं करेंगे? यह देखना अच्छा होगा कि क्या लिखा जा रहा है।मैं इसे अच्छे लग रहे बनाने के लिए और विभिन्न प्रणालियों और इस्तेमाल किया शैलियों यह वास्तव में एचटीएमएल का उपयोग किया जा sohuld या C++/अजगर और बटन विजेट का उपयोग करते हुए नए सिरे से rewriten के बीच पोर्टेबल होने के लिए लगता है। –

+0

मैं प्रश्न में उल्लेख किया जाना चाहिए था - मैं सी का उपयोग कर रहा ++ ... मैं सेल्सियस तक ++ अपने जवाब को बदलने और मैं क्या मिल देखने के लिए प्रयास करने के लिए जा रहा हूँ। कोड के लिए धन्यवाद। –

1

कोई उपयोग करने योग्य उपयोग आत्मा नहीं है जो मुझे पता है। यदि मैं इसे कार्यान्वित करने का प्रयास करना चाहता था, तो मैं निश्चित रूप से लेआउट के साथ विजेट का उपयोग करता हूं, जिसमें दो प्रकार के बच्चे विजेट होते हैं: LineEdits (बड़े विजेट के वास्तविक भाग की तरह सीमाहीन) और बटन - कोड प्रबंधन लाइन संपादन परिवर्तन बस जोड़ देंगे पहले या बाद में नए बटन और यदि नेसिसरी के बीच बटन के साथ twinedit विभाजित किया गया है। इस तरह क्यूटी प्रोग्रामर के इरादे से विचलन नहीं कर रहे हैं कि विगेट्स का उपयोग कैसे करें और उन्हें एक शैली में एक साथ कैसे फिट करें।

यदि आप चाहते हैं कि आप निकालें आइकन प्रदान करने के लिए बटन के बजाय कस्टम विजेट का उपयोग कर सकते हैं। जैसा कि मैंने अपनी टिप्पणी में लिखा था - अगर मेरे पास थोड़ा और समय है तो मैं ऐसा कुछ करने की कोशिश करूंगा।