2017-02-16 9 views
0

Привет, хороший ppl из SO!Безопасен ли подкласс подкласса QAbstractItemModel?

Сегодня я задавал себе вопрос о том, что я пытался реализовать.

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

Сейчас я реализовал класс модели (производный от QAbstractTableModel), которые представляют собой QList тезисов строк сообщений и собирался отобразить их на виджет в моем окне терминала (DataWidgetMapper считается).

Но это меня поразило, а что, если разные части моего приложения пытались добавить в то же время новые сообщения?
Возможно ли это?
Выполняет BeginInsertRow, связанный с безопасным хранением тезисов?


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

Я немного новый парень в мире Qt.

Заранее спасибо :)

+0

Вы пробовали прочитать документацию? – tambre

+0

@tambre Конечно, я сделал. Это в основном все, что я делал на прошлой неделе. Я просто не нашел ничего утешительного в вопросе безопасности потоков. Но я признаю, что за столь короткое время я так много читал, не все мне кажется ясным. – Drenghel

+0

http://doc.qt.io/qt-5/model-view-programming.html#an-editable-model Уверен, что это полезно, но это не успокаивает моих забот – Drenghel

ответ

2

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

+0

Спасибо за ваш ответ. Наверное, я разобрался. Я сам не реализовал ни одного потока, поэтому, я думаю, у меня не возникнут проблемы – Drenghel

+0

Тогда вы совершенно в безопасности. :) Тем не менее, это хороший вопрос и хорошо думать об этих вещах. – goug

+0

Спасибо, я чувствовал себя немного глупо :) – Drenghel