Подклассы QThread
- это неправильный способ создания потоков в Qt. QObject
предоставляет функцию moveToThread
, которая позволяет просто изменять сродство потока объекта и его дочерних элементов.
Изменяет сходство потоков для этого объекта и его дочерних элементов.
объект не может быть перемещен, если у него есть родитель. Обработка событий будет
продолжить в targetThread.
Чтобы переместить объект в основной поток, используйте QApplication :: instance () для
получить указатель на текущее приложение, а затем использовать
QApplication :: thread () для получения потока, в котором находится приложение
живет.
То, что вам нужно сделать, это унаследовать от QObject
вместо QThread
и изменить функцию запуска для перемещения объектов B в другие потоки.
Пример кода (не проверено)
class B : public QObject {
Q_OBJECT
public:
void run() {
}
};
class A : public QObject {
Q_OBJECT
public:
void run() {
b1Thread = new QThread;
b2Thread = new QThread;
b1.moveToThread(b1Thread);
b2.moveToThread(b2Thread);
b1.run();
b2.run();
}
protected:
B b1, b2;
private:
QThread* b1Thread, b2Thread; // Delete them in the destructor.
};
Вы можете создать потоки в main.cpp
и передать их классу B
в качестве аргументов.
Обратите внимание на следующее относительно moveToThread
эта функция может только «выдвинуть» объект из текущего потока в
другой поток, он не может «вытянуть» объект из любого произвольного потока
к текущей теме.