从QT中的单元格中获取行,列值

时间:2017-01-10 16:36:16

标签: qt cell qtablewidget qmap qtablewidgetitem

我有一个问题,我想要返回选定的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>列表中。

所有这一切的目的是尝试从选定的行和列中绘制饼图

所以请帮忙

1 个答案:

答案 0 :(得分:1)

以下是我从评论中理解的内容,随时纠正我,如有必要,我会更新我的答案。

enter image description here

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

编辑QPieSeries
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);