2017-02-13 6 views
1

Я пытаюсь узнать о потоковой обработке и основах C++ и QT. У меня есть метод кнопки MainWindow, которые по существу запустить поток, и хранить значение Ui текста поле со списком:QT C++ - Использование класса MainWindow QString в классе потоков

void MainWindow::on_Request_Raw_Button_clicked(bool checked) 
{ 
    if(checked) 
    { 
     // Store the current request into var. 
     curr_request = ui->comboBox_2->currentText(); 
     qDebug() << curr_request << " started.\n"; 

     mThread->start(); 
    } 
    else 
    { 
     qDebug() << "Stopped.\n"; 
     mThread->Stop = true; 
    } 
} 

И в нить разговора, когда он работает, я хочу использовать элемент данных в MainWindow, в частности, curr_request.

test_thread::test_thread(QObject *parent) : QThread(parent) 
{ 

} 

void test_thread::run() 
{ 
    this->Stop = false; 
    QMutex mutex; 
    while(true) 
    { 
     qDebug() << "I started.\n"; 
     if(this->Stop) { 
      break; 
      mutex.unlock(); 
     } 
     /* Do stuff here */ 
     qDebug() << "Test: " << curr_request; 
     QString temp = curr_request; 

     mutex.unlock(); 
     emit temp; 

     this->usleep(900000); 
    } 
} 

В моей mainwindow.h

public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 
    test_thread *mThread; 
    QString curr_request = ""; 

Мой поток включает в себя файл mainwindow.h. Я получаю сообщение об ошибке: Недопустимое использование нестатического элемента данных 'curr_request'.

+0

И как это связано с C? Не спам-теги! – Olaf

+0

* Я пытаюсь узнать о потоковом * - [этой статье] (https://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation /) - отличное место для начала. – TheDarkKnight

ответ

0

С curr_request является членом вашего класса MainWindow, вы должны получить к нему доступ через объект MainWindow, например.

MainWindow mainWindow; 
mainWindow.curr_request = "something"; 

Или что-то вроде этого:

MainWindow* pMainWindow = QCoreApplication::instance()->findChild<MainWindow>(); 
QString temp = pMainWindow->curr_request; 

Помните, что это, возможно, не потокобезопасной и может или не может привести к состоянию гонки, в зависимости от того, как получить доступ к экземпляру.

(Источник: Несколько аналогичный вопрос был задан here, где эта возможность была прокомментирована).

 Смежные вопросы

  • Нет связанных вопросов^_^