Я хочу создать простой виджет Qwt, содержащий только циферблат. Значение, отображаемое на циферблате (т. Е. Положение диска), должно обновляться в соответствии с некоторыми входными данными, которые я собираю из отдельного потока.Qwt Realtime Dial
я могу генерировать свой диск в главном классе окна, и я могу создать и запустить свой сбор данных в отдельном потоке в пределах основного класса окна, как это:
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
{
// create the dial
QDial* pDial = new QDial;
// create the data class to capture data from an external source
DataClass* pData = new DataClass;
// start the data class thread
pData->Start();
// I can get the latest value of data at any instant like this:
int x = pData->GetData();
// I need to connect the data value to the dial, so that the
// dial always displays the value of the data capture device.
}
Что я могу вставить, так что GetData() постоянно вызывается для обновления значения, отображаемого на циферблате?
*** Я забыл блокировку мьютекса и т. Д. Для указателя pDial, но это, конечно, необходимо. *** Я бы избегал мьютекса, используя сигналы и слоты. – drescherjm
Почему? Разве я не хочу защищать общие переменные, пока я пишу им в отдельный поток? – user12066
С помощью сигналов и слотов вы исключаете переменные, которые совместно используются в потоках. В этом случае вы должны сделать 'DataClass :: SetValue (int x)' слот. И класс, который обновляет значение, выдаст сигнал (подключенный к этому 'SetValue (int)), который устанавливает значение. Qt обнаруживает, что задействовано более 1 потока и отправляет сигнал с использованием очередного соединения. – drescherjm