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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: интерфейс, логика и общие данные  (Прочитано 5777 раз)
Senia_Bezrubashkin
Гость
« : Октябрь 05, 2013, 18:01 »

Данные используются, и в интерфейсе пользователя (отображаются в текстовом поле), и в логике приложения (производятся вычисления)... логика и интерфейс разнесены по разным классам. Как разрешить ситуацию с общими данными?... Отдельно в заголовочном файле определить и линковать к каждому из классов? Или есть еще какой способ?
Заранее спасибо.
Записан
Senia_Bezrubashkin
Гость
« Ответ #1 : Октябрь 09, 2013, 12:51 »

Есть два класса:
Код:
class Widget : public QWidget
class Thread : public QThread
Из первого во второй передаю данные (слот Widget'а вызывает слот Thread'а и обрабатывает их):
Код:
void Widget::slotFind(const QModelIndex &index)
{
    QDir dir = QDir(model.filePath(index));
    emit signal_consider(dir);

    QObject::connect(this, SIGNAL(signal_consider(const QDir &)), thread,
                                    SLOT(slot_consider(const QDir &)));
    thread->start();
}
Как вернуть данные обратно... в основной поток? И второй вопрос... после клика на директории должен вызываться слот, но ничего не происходит. После второго клика слот отрабатывает как надо. После третьего клика слот отрабатывает два раза, после четвертого - три и т.д. Что не так делаю?
Заранее спасибо.
Записан
mutineer
Гость
« Ответ #2 : Октябрь 09, 2013, 13:07 »

после клика на директории должен вызываться слот, но ничего не происходит. После второго клика слот отрабатывает как надо. После третьего клика слот отрабатывает два раза, после четвертого - три и т.д. Что не так делаю?
Заранее спасибо.
Коннект производишь в обработчике клика, скорее всего

Если клик на директории - это вызов slotFind, а нужный слот это slot_consider, то ошибка еще и в том, что сигнал высылается до его присоединения к слоту
« Последнее редактирование: Октябрь 09, 2013, 13:15 от mutineer » Записан
Senia_Bezrubashkin
Гость
« Ответ #3 : Октябрь 09, 2013, 13:45 »

Коннект производишь в обработчике клика, скорее всего
Да, слот slotFind обработчик клика:
Код:
QObject::connect(treeView_1, SIGNAL(clicked(const QModelIndex &)), this,
                     SLOT(slotFind(const QModelIndex &)));
и в нем сигнал для slot_consider'а эмичу. А что с ним не так? Сигнал поставил после коннекта... срабатывает вроде сразу, но все равно с каждым следующим кликом увеличивается число вызовов слота.
« Последнее редактирование: Октябрь 09, 2013, 13:51 от Senia_Bezrubashkin » Записан
mutineer
Гость
« Ответ #4 : Октябрь 09, 2013, 13:53 »

Потому что сколько раз сигнал со слотом соединишь, столько раз слот и вызовется на одну высылку сигнала
Записан
Senia_Bezrubashkin
Гость
« Ответ #5 : Октябрь 09, 2013, 14:00 »

Потому что сколько раз сигнал со слотом соединишь, столько раз слот и вызовется на одну высылку сигнала
Так у меня одно соединение.
Записан
mutineer
Гость
« Ответ #6 : Октябрь 09, 2013, 14:02 »

Потому что сколько раз сигнал со слотом соединишь, столько раз слот и вызовется на одну высылку сигнала
Так у меня одно соединение.

Ты при каждом клике вызываешь connect, поэтому количество соединений увеличивается
Записан
Senia_Bezrubashkin
Гость
« Ответ #7 : Октябрь 09, 2013, 14:53 »

disconnect() разрешил ситуацию... сенкс.
Записан
mutineer
Гость
« Ответ #8 : Октябрь 09, 2013, 14:54 »

Жуть. Почему бы не соединиться только одни раз, вне этого слота?
Записан
Senia_Bezrubashkin
Гость
« Ответ #9 : Октябрь 09, 2013, 15:01 »

индекс не могу получить вне слота который обрабатывает клик.
Записан
mutineer
Гость
« Ответ #10 : Октябрь 09, 2013, 15:18 »

Для коннекта индекс не нужен
Записан
Senia_Bezrubashkin
Гость
« Ответ #11 : Октябрь 09, 2013, 15:32 »

но мне нужен сигнал, который эмитится с переменной dir, а она формируется на основе конкретного индекса.
Записан
mutineer
Гость
« Ответ #12 : Октябрь 09, 2013, 15:33 »

Ну так emit делай в слоте, а коннект один раз вне слота
Записан
Senia_Bezrubashkin
Гость
« Ответ #13 : Октябрь 09, 2013, 15:43 »

Ну так emit делай в слоте, а коннект один раз вне слота
Ну, так и сделал...
Записан
mutineer
Гость
« Ответ #14 : Октябрь 09, 2013, 15:47 »

А первый твой вопрос лично мне непонятен
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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