我有一个问题,我想要返回选定的Rows值,并且单独列,我找到了一个方法,使用函数单元格(行,列)返回它们,但我想单独获取它们
这是我的代码:
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>
列表中。
所有这一切的目的是尝试从选定的行和列中绘制饼图
所以请帮忙
答案 0 :(得分:1)
以下是我从评论中理解的内容,随时纠正我,如有必要,我会更新我的答案。
COL1 | COL2
NAME | VALUE
因此,当您选择一个单元格时,您实际上关心的是整行,例如行的名称和相关的值。如果是这种情况,那么仅允许用户选择整行而不是单元格会更有意义。 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;
}
按照example:
编辑QPieSeriesQPieSeries *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);