2013-02-19 3 views
0

Я хочу повторно реализовать функцию запуска, создав свой собственный класс QThread.ui защищен, но как его использовать в переопределенной функции Qthread run()

Я создал это,

class MyThread : public QThread 
{ 
public: 
    void run(); 
}; 

void MyThread::run() 
{ 
    gui w; 
    w.listen_device(w.ui->comboBox->currentIndex()); 
    exec(); 
} 

Я не могу использовать QPaint вне основного потока, так что я даю значение в качестве аргумента в моей функции listen_device.

Я знаю, что ui от gui защищен, так как я могу получить это значение?

Спасибо.

+1

Это больше, чем просто краска, которая не может быть в фоновом потоке. QWidgets не может быть создан в фоновом потоке вообще. Если ваши виджеты создаются в конструкторе 'gui', вам нужно будет пересмотреть свой дизайн. Сохраняйте только логику в фоновом потоке и испускайте сигналы. В основном потоке вы можете поймать эти сигналы и обновить представление. – cgmb

ответ

1

создать общедоступный метод в gui класса, который будет возвращать ui->comboBox->currentIndex();

public: 
    int gui::getCurrentIndex() // or whatever 
    { 
    return ui->comboBox->currentIndex(); 
    } 

не сабами QThread, использовать moveToThread() на QObject вместо этого.