crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в connect - сделать вызов одноразовым
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kwisp Дата 8.10.2009, 11:10
 
Цитата(AD @ 8.10.2009, 12:02) *
Не путай меня! :) По-моему, это "путь из Москвы в Париж через Нью-Йорк"! :)

отвечу словами героя "нашей раши"
- не очкуй, славик, я сто раз так делал. :)
ну если серьезно я же написал что бредовая идея. просто взять готовое и не заморачиваться. :)

Цитата(AD @ 8.10.2009, 12:02) *
А примерчик можно? Непонятно значение этого флага, если в конце слота значение обнуляется

наверное я не умею объяснять.
псевдокод
Раскрывающийся текст
class A: public QObject{
Q_OBJECT
    public:
    A():QObject(),m_doSlot(0)
    {
        connect(object1,SIGNAL(s()),this,SLOT(slSlot()));
    }

    private:
        m_doSlot;

    void slSlot()
    {
        if(m_doSlot) return;
        // делай что надо
        m_doSlot = true;
    }
};


Цитата(AD @ 8.10.2009, 12:02) *
Что за sender()?

вот тут ты меня испугал.
QObject::sender();
AD Дата 8.10.2009, 11:02
 
Цитата(kwisp @ 8.10.2009, 11:57) *
слушай такая бредовая идея.
... соединить triggered() с transmite()
а
transmite с prevEventAction
то можно попробовать управлять вызовом prevEventAction с помощью blockSignals


blockSignals естественно объекта Transmitter
:)

:blink: Не путай меня! :) По-моему, это "путь из Москвы в Париж через Нью-Йорк"! :)

Цитата(kwisp @ 8.10.2009, 11:57) *
если ты имеешь ввиду управление флагом.
то не сложно.
пусть в классе есть установленный изначально в флаг=0
в слоте проверяешь если 0, то выполняешь слот, если 1 то выходишь из слота, в конце слота устанавливаешь в 1.

перед первым выполнением флаг будет в 0, после первого в 1.
если надо чтоб следующий вызов слота сработал устанавливаешь флаг в 0.

ну естественно можно еще sender использовать чтоб знать что сработало соединение а не простой вызов слота как метода.

ммм. А примерчик можно? Непонятно значение этого флага, если в конце слота значение обнуляется. Что за sender()? Заранее спасибо.
kwisp Дата 8.10.2009, 10:57
  слушай такая бредовая идея.
е если завести объект класса
class Transmitter: public QObject {
Q_OBJECT
signals:
void transmite();
};

и соединить triggered() с transmite()
а
transmite с prevEventAction
то можно попробовать управлять вызовом prevEventAction с помощью blockSignals


blockSignals естественно объекта Transmitter
:)

Цитата(AD @ 8.10.2009, 11:43) *
Как именно это сделать?

если ты имеешь ввиду управление флагом.
то не сложно.
пусть в классе есть установленный изначально в флаг=0
в слоте проверяешь если 0, то выполняешь слот, если 1 то выходишь из слота, в конце слота устанавливаешь в 1.

перед первым выполнением флаг будет в 0, после первого в 1.
если надо чтоб следующий вызов слота сработал устанавливаешь флаг в 0.

ну естественно можно еще sender использовать чтоб знать что сработало соединение а не простой вызов слота как метода.
AD Дата 8.10.2009, 10:43
 
Цитата(BRE @ 8.10.2009, 11:01) *
В примитиве можно connect/disconnect делать в специальных функциях, где использовать флаги.

А есть поэлегантнее способ? Или это единственная возможность?

Цитата(kwisp @ 8.10.2009, 11:39) *
AD,
можно в слоте prevEventAction проверять кто sender и отсоединять прям там.
лучше соединить один раз а флагом регулировать выполнять слот или нет.

Как именно это сделать?
kwisp Дата 8.10.2009, 10:39
  AD,
можно в слоте prevEventAction проверять кто sender и отсоединять прям там.

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

BRE Дата 8.10.2009, 10:01
 
Цитата(AD @ 8.10.2009, 10:45) *
connect(act, SIGNAL(triggered()), this, SLOT(prevEventAction()))

Вот есть такой connect. Как сделать так, чтобы этот вызов делался один раз? Ну то-есть необходимо определить, что уже соединение слота и сигнала совершено и вторично делать не следует! Но конечно же, чтобы была возможность, после отсоединения (disconnect) подсоединить еще раз!

В примитиве можно connect/disconnect делать в специальных функциях, где использовать флаги.

void Obj::myConnect()
{
    if( !m_alreadyConnect )
    {
        connect(act, SIGNAL(triggered()), this, SLOT(prevEventAction()));
        m_alreadyConnect = true;
    }
}

void Obj::myDisconnect()
{
    if( m_alreadyConnect )
    {
        disconnect(act, SIGNAL(triggered()), this, SLOT(prevEventAction()));
        m_alreadyConnect = false;
    }
}

AD Дата 8.10.2009, 9:45
 
connect(act, SIGNAL(triggered()), this, SLOT(prevEventAction()))

Вот есть такой connect. Как сделать так, чтобы этот вызов делался один раз? Ну то-есть необходимо определить, что уже соединение слота и сигнала совершено и вторично делать не следует! Но конечно же, чтобы была возможность, после отсоединения (disconnect) подсоединить еще раз!
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 10.7.2025, 12:24