1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| /*! Classe pour effectuer le travail (tri) dans un thread travailleur. */
class Sorter : public QObject {
Q_OBJECT
public:
Sorter(QObject *parent = 0)
:QObject(parent)
{
qRegisterMetaType< QVector<int> >("QVector<int>");
connect(this,SIGNAL(sortingRequested( QVector<int>)),this,SLOT(sortAsync( QVector<int>)));
}
public slots:
/*! Trie de manière asyncrhone un vecteur dans le thread travailleur. */
void sortAsync(const QVector<int> &list)
{
//si on est pas dans le bon thread, on bouge l'appel dans le thread
if(thread() != QThread::currentThread () )
{
sortingRequested(list);
return ;
}
QVector<int> v_sorted = v;
qSort(v_sorted);
emit vectorSorted(v_sorted);
}
signals:
/*! Signal interne utilisé pour communiquer avec le thread travailleur. */
void sortingRequested(const QVector<int> &list);
/*! Signal émis quand le vecteur est trié. */
void vectorSorted(const QVector<int> &list);
}; |
Partager