У меня есть QPushButton и слот, подключенный к его «нажато» сигнал так:Qt слот кнопочный вызывается дважды, хотя инвалиды
connect(&m_oBtnSnapshot, SIGNAL(pressed()), this,
SLOT(SnapshotClicked()));
Слот реализован так:
void
GUI::SnapshotClicked()
{
m_oBtnSnapshot.blockSignals(true);
m_oBtnSnapshot.setDisabled(true);
m_oBtnBenchmark.repaint();
m_oBtnBenchmark.update();
emit(DoSnapshotWork());
m_oBtnSnapshot.setDisabled(false);
m_oBtnSnapshot.blockSignals(false);
}
Итак, как вы можете видеть, я отключу кнопку, когда я ее нажму, и включите ее, когда все будет сделано. Предположим, что функция DoSnapshotWork() занимает 5 секунд ... Хотя это 5 секунд, кнопка отключена, но если я ее нажму, слот SnapshotClicked() будет вызываться потом. Почему отключение кнопки не мешает мне щелкнуть ее?
i alread попытался отключить сигнал при входе в слот и снова подключить его, но ничего не помогло.
Почему? существует ли разница между нажатием и нажатием? я сделал это точно так же, как вы сказали, но пока кнопка отключена, я все еще могу «щелкнуть» ее. Он отключен, но выдается сигнал DoSnapshotWork(). – Hafnernuss
Я понял это сейчас. как-то я пропустил флаг Qt :: QueuedConnection при подключении слота DoSnapshotWork() к другому потоку (где графический интерфейс и нажатие кнопки). Я не знаю почему, но это почему-то вызвало вызов слота дважды. Спасибо за подсказку! – Hafnernuss
'press()' пропускается, когда вы нажимаете левую кнопку мыши в области кнопок (и каждый раз вы вводите эту область позже, не отпуская кнопку мыши). 'clicked()' высвобождается, когда вы отпускаете левую кнопку мыши в области кнопки, после нажатия левой кнопки в нее. Вы можете написать простое приложение, чтобы почувствовать разницу. P.S: вас очень приветствуют :) – Amartel