2010-04-04 12 views
48

मैं QTableWidget संपादन योग्य में एक कॉलम रखना चाहता हूं।
मंचों में मैंने कुछ flags के बारे में बहुत कुछ पढ़ा है लेकिन इसे लागू करने में सक्षम नहीं हो सका। मदों की तरह निम्नलिखित QTableWidget मेंQTableWidget में कॉलम कैसे बनाएं केवल पढ़ने के लिए?

उत्तर

77

सम्मिलित:

QTableWidgetItem *item = new QTableWidgetItem(); 
item->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled); 

वर्क्स ठीक!

संपादित करें:

QTableWidgetItem *item = new QTableWidgetItem(); 
item->setFlags(item->flags()^Qt::ItemIsEditable); 

यह एक बेहतर समाधान है। @Priomsrb के लिए धन्यवाद।

+14

'item-> setFlags (item-> झंडे()^Qt :: ItemIsEditable) का उपयोग करना बेहतर होगा; '। यह अन्य झंडे को बरकरार रखेगा – priomsrb

+1

@priomsrb उपयोगकर्ता 2 9 343436 द्वारा सुझाए गए अनुसार 'item-> flags() और ~ Qt :: ItemIsEditable' के बजाय आप एक विशेष या (एक्सओआर) का उपयोग क्यों करते हैं? एक्सओआर का परिणाम झंडे की डिफ़ॉल्ट स्थिति पर निर्भर करता है। – m7913d

+0

@ m7913d मुझे लगता है कि आप सही हैं। मेरा समाधान सिर्फ संपादन योग्य राज्य को टॉगल करता है। तो यह काम नहीं करेगा अगर आइटम पहले से ही पढ़ा गया था। – priomsrb

27

एक्सओआर का उपयोग करने का नतीजा वर्तमान स्थिति पर निर्भर करता है। मैं

item->setFlags(item->flags() & ~Qt::ItemIsEditable); 

का उपयोग करने का सुझाव देता हूं ताकि यह सुनिश्चित किया जा सके कि वर्तमान सेटिंग के बावजूद संपादन बंद हो गया है।

+0

मैंने आपके इस समाधान की कोशिश की और यह काम नहीं किया: संकलक ने '~' के बारे में शिकायत की। – Momergil

0

पंक्तियों या स्तंभों में @ नरेक कोड को लागू करने के लिए, बस लूप के लिए एक सरल उपयोग करें और पंक्तियों/कॉलम के लिए झंडे को शामिल करने के लिए एक शर्त डालें जिसमें आप संपादन योग्य नहीं होना चाहते हैं।

निम्नलिखित कोड एक QTableWidget में एक csv फ़ाइल में लिखा है:

if(!rowOfData.isEmpty()){ 
for (int x = 0; x < rowOfData.size(); x++) 
    { 
     rowData = rowOfData.at(x).split(","); 
     if(ui->table_Data->rowCount() <= x) ui->table_Data->insertRow(x); 
     for (int y = 0; y < rowData.size(); y++) 
     { 
      QTableWidgetItem *item = new QTableWidgetItem(rowData[y],QTableWidgetItem::Type); 
      if(y < 3) item->setFlags(item->flags()^Qt::ItemIsEditable); // Only disables the first three columns for editing, but allows the rest of the columns to be edited 
      ui->table_Data->setItem(x,y,item); 
      ui->table_Data->repaint(); 
     } 
    } 
} 
0

मैं एक बेहतर सुझाव के लिए आया था, बस एक नई स्लॉट के साथ cellDoubleClicked संकेत के ऊपर लिख। यह है, यदि आप चाहते हैं कि कोई भी कक्ष संशोधित नहीं किया जाए

+0

ऐसा करने की कोई ज़रूरत नहीं है, यही कारण है कि हमारे पास आइटम झंडे हैं। उसकी समस्या को ठीक करने के लिए सिर्फ एक पंक्ति। – reggie

+0

अंतर यह है कि आपको अपने सभी बच्चों के सामान पर बिटमैप से ध्वज को बाहर करना होगा? मेरा सुझाव था कि यदि आप पूरे विजेट को केवल पढ़ने के लिए चाहते हैं तो ~ 20 बिट्स और ~ बिटमैप ध्वज के साथ लेखन लाइन को बाहर करना था। असल में मेरी टिप्पणी गलत थी, इसे सेल डब्लूक्लेक्टेड सिग्नल डिस्कनेक्ट करना चाहिए – Damdidam

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