2017-01-10 14 views
-1

У меня проблема, я хочу вернуть выбранные значения строк и столбцы отдельно, я нашел метод для возврата их обоих с помощью ячейки функции (строка, столбец), но я хочу, чтобы получить их отдельноПолучить значения строк, столбцов из ячейки в QT

Вот мой код:

QTableWidgetItem *c = new QTableWidgetItem(); 
QMap<QString,int> lists; 
for(i=0;i<range.rowCount();++i){ 
    for(int j=0;j<range.columnCount();++j){ 
     c=item(i,j);// here i can return the Rows, Columns Data 
     QMessageBox::information(this,"",c->text());    
    } 
} 

Как вы можете видеть, этот код работает, но я просто хочу вернуться строк и столбцов отдельно, так что я могу поставить их в моем списке QMap<QString,int>.

И цель всего этого, чтобы попытаться нарисовать PieChart из выбранных строк и столбцов

Так Любая помощь, пожалуйста,

+0

Я действительно не понимаю, что вы ищете ... i и j уже являются индексами ваших строк и столбцов, что еще вам нужно? –

+0

Если у вас уже есть индексы, нужно просто сохранить их на карте как} *** {ваша карта} ["row"] = i; {Ваша карта} ["column"] = j; *** – eyllanesc

+0

Отключить тему, но ... у вас есть утечка памяти, при которой вы выделяете новый 'QTableWidgetItem' и назначаете его' c', но затем переназначаете 'c' в цикл, не удаляя ранее выделенную память. –

ответ

1

Вот что я понял из комментариев, не стесняйтесь исправлять меня и В случае необходимости я обновлю ответ.

enter image description here

COL1 | COL2

ИМЯ | VALUE

Итак, когда вы выбираете ячейку, вы действительно заботитесь обо всей строке, a.k.a имя строки и связанное с ней значение. Если это так, было бы разумнее только позволить пользователю выбирать целые строки, а не ячейки. setSelectionBehavior(QAbstractItemView::SelectRows); должен сделать трюк.

При условии, что имя набора данных всегда в колонке 1, а значение в колонке 2, вы должны обновить свой код с сниппета:

QTableWidgetItem *c; //Deleted memory leak in your code. 
QMap<QString,double> myMap; //Don't name it a list if it is explicitly a map. 
for(i=0;i<range.rowCount();++i){ 
    QString dataName = item(i,0)->text(); 
    int  dataValue; 
    for(int j=1;j<range.columnCount();++j){ 
     c=item(i,j);// here i can return the Rows, Columns Data 
     dataValue += c->text().toDouble(); 
     //If you always have 2 columns only, dataValue will be the value you are looking for. 
     //If you can have more than 2 columns, dataValue will be the sum of all the cells located after the column 0, on the same row. 
     //Change this depending on how you want to treat those values. 
     QMessageBox::information(this,dataName,c->text());    
    } 
    myMap[dataName]=dataValue; 
} 

EDIT для QPieSeries, после этого example:

QPieSeries *series = new QPieSeries(); 
QMap<QString,double>::iterator it = myMap.begin(); 
QMap<QString,double>::iterator end = myMap.end(); 
for(; it!=end; ++it){ 
    series->append(it->key(), it->value()); 
} 

QPieSlice *slice = series->slices().at(1); 
slice->setExploded(); 
slice->setLabelVisible(); 
slice->setPen(QPen(Qt::darkGreen, 2)); 
slice->setBrush(Qt::green); 

QChart *chart = new QChart(); 
chart->addSeries(series); 
chart->setTitle("My Data"); 
chart->legend()->hide(); 

QChartView *chartView = new QChartView(chart); 
chartView->setRenderHint(QPainter::Antialiasing); 

/*change with your window here*/ 
yourWindow.setCentralWidget(chartView); 
+0

Thats it именно потому, что я хочу использовать [Gas, 22] как Abscissa и ordinate для моего PieChart – user3694419

+0

Но я не понимаю, почему вы положили 0 в столбцах атрибута 'item (i, 0) -> text()' – user3694419

+0

Так что теперь я могу использовать QMap для рисования моего PieChart, на самом деле я собираюсь использовать пример, дающий QT Documentation [link] http: // doc.qt.io/qt-5/qtcharts-piechart-example.html – user3694419

 Смежные вопросы

  • Нет связанных вопросов^_^