从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);