Russian Qt Forum
Ноябрь 22, 2024, 16:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как из модели списка испустить сигнал?  (Прочитано 1555 раз)
softminister
Новичок

Offline Offline

Сообщений: 2


Просмотр профиля
« : Май 24, 2021, 10:54 »

В главном окне приложения есть QTableView, данные рисуются в модели. В модели в функции data (для вывода данных) происходят расчеты для вывода и, если условие выполняется, то надо совершить событие (конкретно - запуск файла). Идея - испустить сигнал в модели, поймать его в главном окне и выполнить событие.

В модели делаю проверку и испускаю сигнал в главное окно:

Код:
QVariant AlarmsModel::data( const QModelIndex& index, int role ) const
{

  if //
    emit runAlarm(alarm);

}

где runAlarm(alarm) определен в хедере:

Код:
signals:
    void runAlarm(struct Alarm alarm);

И на этом ошибка на строку "emit runAlarm(alarm)":

Код:
D:\...\alarmsmodel.cpp:182: error: passing 'const AlarmsModel' as 'this' argument discards qualifiers [-fpermissive]
..\...\alarmsmodel.cpp: In member function 'virtual QVariant AlarmsModel::data(const QModelIndex&, int) const':
..\...\alarmsmodel.cpp:182:44: error: passing 'const AlarmsModel' as 'this' argument discards qualifiers [-fpermissive]
                         emit runAlarm(alarm);
                                            ^

О чем говорит эта ошибка? Что не так?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Май 25, 2021, 12:17 »

сигнал - неконстантная функция (внутри нее объест можно поменять через его АПИ), ее нельзя вызывать из константной (которая как бы говорит, что объект не меняется, пока мы в функции).

вообще, это плохой дизайн, так как data() должна работать очень быстро (и за O(1) от размера данных) так как она вызывается часто и много.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 22.