Skip to content

Commit 77befbd

Browse files
a123bjamescowens
authored andcommitted
Fix sorting
1 parent 7ed02c7 commit 77befbd

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

src/qt/votingdialog.cpp

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -692,12 +692,19 @@ VotingChartDialog::VotingChartDialog(QWidget *parent)
692692
resTabWidget->addTab(m_chartView, tr("Chart"));
693693
#endif
694694

695-
answerTable_ = new QTableWidget(this);
696-
answerTable_->setColumnCount(3);
697-
answerTable_->setRowCount(0);
698-
answerTableHeader<<"Answer"<<"Shares"<<"Percentage";
699-
answerTable_->setHorizontalHeaderLabels(answerTableHeader);
695+
answerModel_ = new QStandardItemModel();
696+
answerModel_->setColumnCount(3);
697+
answerModel_->setRowCount(0);
698+
answerModel_->setHeaderData(0, Qt::Horizontal, tr("Answer"));
699+
answerModel_->setHeaderData(1, Qt::Horizontal, tr("Shares"));
700+
answerModel_->setHeaderData(2, Qt::Horizontal, "%");
701+
702+
answerTable_ = new QTableView(this);
703+
answerTable_->setModel(answerModel_);
700704
answerTable_->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
705+
answerTable_->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeMode::ResizeToContents);
706+
answerTable_->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeMode::ResizeToContents);
707+
answerTable_->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
701708
answerTable_->setEditTriggers( QAbstractItemView::NoEditTriggers );
702709
resTabWidget->addTab(answerTable_, tr("List"));
703710
vlayout->addWidget(resTabWidget);
@@ -708,7 +715,8 @@ void VotingChartDialog::resetData(const VotingItem *item)
708715
if (!item)
709716
return;
710717

711-
answerTable_->setRowCount(0);
718+
answerModel_->setRowCount(0);
719+
answerTable_->sortByColumn(-1, Qt::AscendingOrder);
712720
answerTable_->setSortingEnabled(false);
713721

714722
#ifdef QT_CHARTS_LIB
@@ -723,29 +731,30 @@ void VotingChartDialog::resetData(const VotingItem *item)
723731
url_->setText("<a href=\""+item->url_+"\">"+item->url_+"</a>");
724732
answer_->setText(item->bestAnswer_);
725733
answer_->setVisible(!item->bestAnswer_.isEmpty());
726-
answerTable_->setRowCount(item->vectorOfAnswers_.size());
734+
answerModel_->setRowCount(item->vectorOfAnswers_.size());
727735

728736
for (size_t y = 0; y < item->vectorOfAnswers_.size(); y++)
729737
{
730738
const auto& responses = item->vectorOfAnswers_;
731739
const QString answer = QString::fromStdString(responses[y].answer);
732740

733-
answerTable_->setItem(y, 0, new QTableWidgetItem(answer));
734-
QTableWidgetItem *iSharesItem = new QTableWidgetItem();
735-
iSharesItem->setData(Qt::DisplayRole, QString::number(responses[y].shares, 'f', 0));
741+
QStandardItem *answerItem = new QStandardItem(answer);
742+
answerItem->setData(answer);
743+
answerModel_->setItem(y, 0, answerItem);
744+
QStandardItem *iSharesItem = new QStandardItem(QString::number(responses[y].shares, 'f', 0));
745+
iSharesItem->setData(responses[y].shares);
736746
iSharesItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
737-
answerTable_->setItem(y, 1, iSharesItem);
738-
QTableWidgetItem *percentItem = new QTableWidgetItem();
747+
answerModel_->setItem(y, 1, iSharesItem);
748+
QStandardItem *percentItem = new QStandardItem();
739749

740750
if (item->totalShares_ > 0) {
741751
const double ratio = responses[y].shares / (double)item->totalShares_;
742-
percentItem->setData(Qt::DisplayRole, QString::number(ratio * 100, 'f', 2));
752+
percentItem->setText(QString::number(ratio * 100, 'f', 2));
753+
percentItem->setData(ratio * 100);
743754
percentItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
744755
}
745756

746-
answerTable_->setItem(y, 2, percentItem);
747-
answerTable_->horizontalHeader()->setSectionResizeMode(1, QHeaderView::ResizeMode::ResizeToContents);
748-
answerTable_->horizontalHeader()->setSectionResizeMode(2, QHeaderView::ResizeMode::ResizeToContents);
757+
answerModel_->setItem(y, 2, percentItem);
749758

750759
#ifdef QT_CHARTS_LIB
751760
QtCharts::QPieSlice *slice = new QtCharts::QPieSlice(answer, responses[y].shares);
@@ -754,6 +763,7 @@ void VotingChartDialog::resetData(const VotingItem *item)
754763
#endif
755764
}
756765

766+
answerModel_->setSortRole(Qt::UserRole+1);
757767
answerTable_->setSortingEnabled(true);
758768
}
759769

src/qt/votingdialog.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,8 @@ class VotingChartDialog
209209
#ifdef QT_CHARTS_LIB
210210
QtCharts::QChart *chart_;
211211
#endif
212-
QTableWidget *answerTable_;
212+
QTableView *answerTable_;
213+
QStandardItemModel *answerModel_;
213214
QStringList answerTableHeader;
214215
QLabel *answer_;
215216
};

0 commit comments

Comments
 (0)