2016-11-25 4 views
6

मुझे QComboBox के साथ कोई समस्या है। मुझे टेबलव्यू आइटम के साथ एक combobox की जरूरत है।सी ++ क्यूटी QComboBox tableview

उदाहरण के लिए, QComboBox के डिफ़ॉल्ट है:

┌─────────┐ 
│  ▼ │ 
├─────────┤ 
│ index 0 │ 
├─────────┤ 
│ index 1 │ 
├─────────┤ 
│ index 2 │ 
├─────────┤ 
│ index 3 │ 
└─────────┘ 

मैं इस तरह ComboBox बनाने की जरूरत है:

┌───────────────────┐ 
│     ▼ │ 
├─────────┬─────────┤ 
│ index 0 │ index 1 │ 
├─────────┼─────────┤ 
│ index 2 │ index 3 │ 
└─────────┴─────────┘ 

मैं नमूना लिखा था, लेकिन यह ठीक से काम नहीं:

QTableView *table = new QTableView(this); 
QComboBox *cb = new QComboBox; 
ui->verticalLayout->addWidget(cb); 
cb->setView(table); 
QStandardItemModel *model = new QStandardItemModel(2,2); 
cb->setModel(model); 

int x = 0; 
int y = 0; 
for (int i=0; i<4; i++) 
{ 
    model->setItem(x, y, new QStandardItem("index" + QString::number(i))); 
    if (i == 1) { 
     x++; 
     y = 0; 
    } 
    else 
     y++; 
} 

समस्या यह है - अगर मैं इंडेक्स 3 चुनता हूं, तो कॉम्बोबॉक्स इंडेक्स 2 सेट करेगा।

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

QTableView *table = new QTableView(this); 
QComboBox *cb = new QComboBox; 
ui->verticalLayout->addWidget(cb); 
cb->setView(table); 
QStandardItemModel *model = new QStandardItemModel(2,2); 
cb->setModel(model); 
for (int i=0; i<4; i++) 
    model->setItem(i%2, i/2, new QStandardItem("index" + QString::number(i))); 
// This one: 
connect(table, SIGNAL(pressed(QModelIndex)), SLOT(setCheckBoxIndex(QModelIndex))); 

//--SLOT-------- 
void MainWindow::setCheckBoxIndex(QModelIndex index) 
{ 
    QComboBox* combo = qobject_cast<QComboBox*>(sender()->parent()->parent()); 
    combo->setModelColumn(index.column()); 
    combo->setCurrentIndex(index.row()); 
} 

यह काम करते हैं। लेकिन मुझे नहीं पता कि यह कितना सही है?

+0

हाँ ,, यह काम करता है, बस मॉडल-व्यू वास्तुकला का फायदा नहीं उठाता है। थ्रेड था कि कोई भी एकल आयाम मॉडल को तालिका के दो-आयाम में परिवर्तित करने के लिए QAbstractProxyModel का उपयोग कर सकता है, लेकिन मेरे पास समाधान नहीं है, – Swift

उत्तर

2

के साथ एनालॉग बनाना है, आपको setModelColumn() का उपयोग करना चाहिए क्योंकि QComboBox समय पर केवल एक कॉलम दिखाता है।

इस तरह:

connect(table, &QTableView::pressed, [cb](const QModelIndex &index){ 
    cb->setModelColumn(index.column()); 
}); 
+0

पर संकलन नहीं करता है जो संकलित नहीं करता है। [सीबी] एक बात नहीं है। साथ ही, किसी को पता होना चाहिए कि कॉम्बो बॉक्स में इंडेक्स अभी भी तालिका की रेखा का सूचकांक होगा – Swift

+0

धन्यवाद! setModelColumn() काम है, लेकिन आपका कोड संकलित नहीं है। मैंने मुख्य प्रश्न में नमूना (संपादित) लिखा था। –

1

सुनिश्चित नहीं हैं कि अगर उस पाश में कारण है, लेकिन इस तरह से इसे और अधिक पठनीय और संभवतः त्रुटि मुक्त:

for (int i=0; i<4; i++) 
{ 
    model->setItem(i%2, i/2, new QStandardItem("index" + QString::number(i))); 
} 

अगर यह बदलता रहता है, स्तंभ गिनती के साथ जादुई संख्या 2 की जगह।

मुझे लगता है कि कॉम्बोबॉक्स आइटम की बजाय तालिका की रेखा का उपयोग करता है और पहले तत्व को प्रदर्शित करता है, जिसके लिए अनुसंधान की आवश्यकता होती है। यदि आप index0 या index1 का चयन करते हैं तो यह क्या करता है?

संपादित करें: हाँ, यह क्या हो रहा है। कोई फर्क नहीं पड़ता कि कितने कॉलम हैं, कॉम्बो बॉक्स तालिका से रेखा (रिकॉर्ड संख्या) प्राप्त करता है। मुझे लगता है कि आपको QTableView के लिए एक कस्टम प्रतिनिधि बनाना होगा, और हां, मॉडल कॉलम बदलें। वैकल्पिक रूप से QTableView के एनालॉग को एकल कॉलम मॉडल

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