Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] аналог QApplication::processEvents(), для сигналов и слотов 
:(
    Опции темы
anatox91
Дата 17.10.2011, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



у меня в классе виджета выполняются определенные действия в цикле, и в этом же классе на форме есть пару кнопок и надо чтобы при нажатии на них выполнялись слоты, допустим после каждой итерации цикла мне нужно как-то выполнить все слоты, которые были вызваны(были поставлены в очередь на выполнение)
и все это не прерывая цикла, желательно без потоков
QApplication::processEvents() очень хорошая вещь, то что нужно, но она выполняет только накопившиеся event'ы, а мне нужно тоже самое но для сигналов и слотов

вот кусок кода чтобы понять о чем речь
Код

void Emulator::on_playButton_clicked() {
    isPaused = false;
    isStopped = false;
    while(!isPaused || !isStopped || nextByte < instructions_set.size()) {
        decode_next(nextByte);
        curInstrNumber++;
        QApplication::processEvents();
        for(int i=0; i<delay; ++i) {
            Sleep(1000);
        }
    }
}

void Emulator::on_pauseButton_clicked() {
    isPaused = true;
}

void Emulator::on_stopButton_clicked() {
    isStopped = true;
    nextByte = 0;
}

void Emulator::on_stepButton_clicked() {
    if(isPaused || isStopped) {
        decode_next(nextByte);
        curInstrNumber++;
    }
}



допустим запускается play, и надо чтобы в течение выполнения можно было поставить на паузу или остановить выполнение


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
null56
Дата 17.10.2011, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 6
Всего: 12



Цитата

в этом же классе на форме есть пару кнопок и надо чтобы при нажатии на них выполнялись слоты, допустим после каждой итерации цикла мне нужно как-то выполнить все слоты, которые были вызваны(были поставлены в очередь на выполнение)


Цитата

и все это не прерывая цикла, желательно без потоков

без потоков никак, ибо у тебя один поток на всё, на обработку слотов, событий и цикла. postEvent ставит в очередь и сразу возвращает управление, если у тебя цикл будет бесконечным, даже она тебя не спасет, потому что надо вернуться в eventloop, чтобы выполнить твои события

ну это на сколкьо мне известно

Добавлено через 3 минуты и 9 секунд
что же касается твоего вопроса, то на сколько мне известно есть сигналы, которые тут же не выполняются, а откладываются до возврата в eventloop, как тебе и нужно
Код

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method, Qt::ConnectionType type = Qt::AutoConnection ) [static]

последний параметр
Цитата

enum Qt::ConnectionType
This enum describes the types of connection that can be used between signals and slots. In particular, it determines whether a particular signal is delivered to a slot immediately or queued for delivery at a later time.
Constant    Value    Description
Qt::AutoConnection    0    (default) If the signal is emitted from a different thread than the receiving object, the signal is queued, behaving as Qt::QueuedConnection. Otherwise, the slot is invoked directly, behaving as Qt::DirectConnection. The type of connection is determined when the signal is emitted.
Qt::DirectConnection    1    The slot is invoked immediately, when the signal is emitted.
Qt::QueuedConnection    2    The slot is invoked when control returns to the event loop of the receiver's thread. The slot is executed in the receiver's thread.
Qt::BlockingQueuedConnection    4    Same as QueuedConnection, except the current thread blocks until the slot returns. This connection type should only be used where the emitter and receiver are in different threads. Note: Violating this rule can cause your application to deadlock.
Qt::UniqueConnection    0x80    Same as AutoConnection, but the connection is made only if it does not duplicate an existing connection. i.e., if the same signal is already connected to the same slot for the same pair of objects, then the connection will fail. This connection type was introduced in Qt 4.6.
Qt::AutoCompatConnection    3    The default type when Qt 3 support is enabled. Same as AutoConnection but will also cause warnings to be output in certain situations. See Compatibility Signals and Slots for further information.

видимо тебе нужен
Qt::QueuedConnection

Добавлено через 6 минут и 10 секунд
хотя не, одно и тоже, что по умолчанию

Это сообщение отредактировал(а) null56 - 17.10.2011, 14:11
PM MAIL   Вверх
anatox91
Дата 17.10.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


программист-самоучка
**


Профиль
Группа: Участник
Сообщений: 699
Регистрация: 12.1.2008
Где: ++Украина.Крым++

Репутация: нет
Всего: 13



жалко, ладно придется чуть посложнее тогда сделать


--------------------

The code is the design ©

Sony VAIO VGN-FW480J

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0843 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.