从QT中的单元格中获取行,列值
Get The Row,Column values from a cell in QT
我有一个问题,我想 return 选定的行值和列分开,我找到了一种方法 return 它们都使用函数单元格(行,列) , 但我想分开买
这是我的代码:
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());
}
}
如您所见,此代码有效,但我只想 return 行和列分开,以便我可以将它们放入我的 QMap<QString,int>
列表中。
所有这一切的目的是尝试从选定的行和列中绘制饼图
所以请帮忙
这是我从评论中了解到的,欢迎指正,如有必要我会更新我的答案。
COL1 |列 2
名称 |值
所以当你 select 一个单元格时,你实际上关心的是整行,a.k.a 行的名称和关联的值。如果是这种情况,只允许用户 select 整行而不是单元格会更有意义。 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;
}
编辑 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);
我有一个问题,我想 return 选定的行值和列分开,我找到了一种方法 return 它们都使用函数单元格(行,列) , 但我想分开买
这是我的代码:
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());
}
}
如您所见,此代码有效,但我只想 return 行和列分开,以便我可以将它们放入我的 QMap<QString,int>
列表中。
所有这一切的目的是尝试从选定的行和列中绘制饼图
所以请帮忙
这是我从评论中了解到的,欢迎指正,如有必要我会更新我的答案。
COL1 |列 2
名称 |值
所以当你 select 一个单元格时,你实际上关心的是整行,a.k.a 行的名称和关联的值。如果是这种情况,只允许用户 select 整行而不是单元格会更有意义。 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;
}
编辑 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);