Название: Проблема с функцией класса MainWindow, вызванной из другого Отправлено: ogogon от Октябрь 09, 2021, 15:39 Коллеги, подскажите, пожалуйста, в чем моя проблема. Полагаю, что она элементарна, но я всю жизнь писал на кернигановском C и в C++ пока еще не чувствую себя уверенно.
Ситуация такая - у меня есть публичная функция в классе MainWindow, она читает из SQLite записи, и одно их поле докидывает в расположенный в главном окне combobox, как айтемы. Перед этим очищает его от старых. Комбобокс адресуется как Код: ui->comboBoxMy Теперь проблема - когда я вызываю функцию из ее же класса MainWindow, все работает просто расчудесно, все что надо убирается, все что надо - добавляется. Комбобокс показывает текущее состояние таблицы в SQlite. Но если я вызываю функцию из других классов, то работа с СУБД идет нормально, (считанное дублируется в qDebug), а вот содержимое комбобокса не изменяется. Функцию я вызываю так: Код: MainWindow mw; Подскажите, пожалуйста, что я делаю не так? Ogogon. Название: Re: Проблема с функцией класса MainWindow, вызванной из другого Отправлено: tux от Октябрь 09, 2021, 15:48 Вам нужно не создать ещё один экземпляр вашего MainWindow, а найти его в приложении. А затем уже вызывать myFunc.
Или передать в те классы, которые эту функцию будут использовать, указатель на MainWindow. Название: Re: Проблема с функцией класса MainWindow, вызванной из другого Отправлено: ogogon от Октябрь 10, 2021, 00:05 Вам нужно не создать ещё один экземпляр вашего MainWindow, а найти его в приложении. А затем уже вызывать myFunc. Благодарю. К сожалению, я не совсем понял, как это нужно делать практически. Мой опыт борьбы с C++ пока не велик.Или передать в те классы, которые эту функцию будут использовать, указатель на MainWindow. Как мне "найти MainWindow" из другого класса? Как в класс, который реализует окно, запускаемое по сигналу интерфейса через приватный слот, передать указатель на MainWindow? Полагаю, что вызов публичной функции из другого класса - достаточно типовая необходимость. Наверное, для этого в C++ есть какие-то корректные механизмы? Ogogon. Название: Re: Проблема с функцией класса MainWindow, вызванной из другого Отправлено: ogogon от Октябрь 10, 2021, 07:59 Вам нужно не создать ещё один экземпляр вашего MainWindow, а найти его в приложении. А затем уже вызывать myFunc. Я сделал следующим образом и у меня заработало.В файл main.cpp я включил указатель на класс MainWindow: Код: Mainwindow *mw; В файл заголовков main.h добавил информацию о нем: Код: extern Mainwindow *mw; В конструкторе класса MainWindow в файле mainmindow,cpp начал заносить туда указатель: Код: mw = this; Далее, вызвал из другого класса: Код: mw->myFunc(); Подскажите, пожалуйста, корректно ли такое решение? Ogogon, Название: Re: Проблема с функцией класса MainWindow, вызванной из другого Отправлено: Igors от Октябрь 10, 2021, 08:12 Наверное, для этого в C++ есть какие-то корректные механизмы? Плюсы ничего не навязывают, можно просто использовать глобальную переменнуюКод: // mainwindow.cpp Тогда из др окна Код: // win1.cpp Код И обеспечить корректность m_instance в конструкторе/деструкторе Код Тогда использование Код
Да, увидел Ваш последний пост, но не стал ничего менять, так даже лучше :) |