Here's the final working solution... Line 3 is the key... our parent class has a handle to a QTableView (m_pTrackTableView)
{
const Qt::SortOrder sortOrder = ((MixxxView *)this->parent())->m_pTrackTableView->horizontalHeader()->sortIndicatorOrder();
// Do the strings look like they are BPM counts?
const QString bpmPattern
= "^[0-9]+\\.[0-9]+$";
if (sourceModel
()->data
( left
).
toString().
trimmed().
indexOf(QRegExp(bpmPattern
)) == 0 && sourceModel
()->data
( right
).
toString().
trimmed().
indexOf(QRegExp(bpmPattern
)) == 0) { double leftBPM = sourceModel()->data( left ).toString().trimmed().toDouble();
double rightBPM = sourceModel()->data( right ).toString().trimmed().toDouble();
if (leftBPM == 0.0 && sortOrder == Qt::AscendingOrder) rightBPM = -1 * rightBPM;
if (rightBPM == 0.0 && sortOrder == Qt::AscendingOrder) leftBPM = -1 * leftBPM;
// qDebug() << "BPM Comparasion leftBPM =" << leftBPM << "rightBPM =" << rightBPM;
return leftBPM < rightBPM;
}
....
bool SortFilterProxyModel::lessThan( const QModelIndex &left, const QModelIndex &right ) const
{
const Qt::SortOrder sortOrder = ((MixxxView *)this->parent())->m_pTrackTableView->horizontalHeader()->sortIndicatorOrder();
// Do the strings look like they are BPM counts?
const QString bpmPattern = "^[0-9]+\\.[0-9]+$";
if (sourceModel()->data( left ).toString().trimmed().indexOf(QRegExp(bpmPattern)) == 0
&& sourceModel()->data( right ).toString().trimmed().indexOf(QRegExp(bpmPattern)) == 0) {
double leftBPM = sourceModel()->data( left ).toString().trimmed().toDouble();
double rightBPM = sourceModel()->data( right ).toString().trimmed().toDouble();
if (leftBPM == 0.0 && sortOrder == Qt::AscendingOrder) rightBPM = -1 * rightBPM;
if (rightBPM == 0.0 && sortOrder == Qt::AscendingOrder) leftBPM = -1 * leftBPM;
// qDebug() << "BPM Comparasion leftBPM =" << leftBPM << "rightBPM =" << rightBPM;
return leftBPM < rightBPM;
}
....
To copy to clipboard, switch view to plain text mode
Bookmarks