Russian Qt Forum

Qt => Вопросы новичков => Тема начата: softminister от Май 24, 2021, 10:54



Название: Как из модели списка испустить сигнал?
Отправлено: softminister от Май 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);
                                            ^

О чем говорит эта ошибка? Что не так?


Название: Re: Как из модели списка испустить сигнал?
Отправлено: Авварон от Май 25, 2021, 12:17
сигнал - неконстантная функция (внутри нее объест можно поменять через его АПИ), ее нельзя вызывать из константной (которая как бы говорит, что объект не меняется, пока мы в функции).

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