Я хочу отображать данные в реальном времени с помощью QCustomPlot в С++. поэтому я делаю это:
в заголовочном файле:
class QtGuiApplication : public QMainWindow
{
Q_OBJECT
public:
QtGuiApplication(QWidget *parent = Q_NULLPTR);
private:
Ui::QtGuiApplicationClass ui;
//plot
QCustomPlot* plot_;
std::thread thread_Displayer_;
bool thread_run_flag_ = false;
void thread_Displayer_fn();
};
и в исходном файле я использую кнопку для запуска потока и... вот так:
void QtGuiApplication::btn_Display_clicked()
{
if (thread_run_flag_)
{
ui.btn_Dispaly->setText("Display");
thread_run_flag_ = false;
if (thread_Displayer_.joinable())
{
thread_Displayer_.join();
}
}
else
{
thread_run_flag_ = false;
if (thread_Displayer_.joinable())
{
thread_Displayer_.join();
}
ui.btn_Dispaly->setText("Stop");
thread_run_flag_ = true;
thread_Displayer_ = std::thread(&QtGuiApplication::thread_Displayer_fn,
this);
}
}
void QtGuiApplication::thread_Displayer_fn()
{
double y_max_ = 0;
double y_min_ = 0;
while (thread_run_flag_)
{
QVector<double> x(16384), y(16384);
for (int i = 0; i<16384; ++i)
{
x[i] = i;
y[i] = x[i];
if (y[i] > y_max_)
y_max_ = y[i];
if (y[i] < y_min_)
y_min_ = y[i];
}
plot_->yAxis->setRange(y_min_, y_max_);
plot_->graph(0)->setData(x, y);
plot_->replot();
}
}
но эта ошибка возникает, когда я запускаю код:
"невозможно отправлять события объектам, принадлежащим другому потоку"
Как я могу это решить?
emit
сигнал отthread_Displayer_fn()
и подключить его к функции в вашем основном графическом интерфейсе, которая получает данные и обновляет график. - person apalomer   schedule 27.02.2018