2015-05-25 2 views
0

Я делаю подборщик цветов на основе Qt 5.4.1. Он работает следующим образом: когда пользователь нажал один QToolButton, он показывает QColorDialog. Я использую сигнал «выпущенный()» QToolButton. Теперь проблема заключается в том, что когда я закрываю QColorDialog, сигнал release() запускается снова. Но когда я меняю его на QPushButton, проблема исчезла.QToolButton выпустил() сигнал, запущенный дважды

У моей панели инструментов нет меню. Интересно, спроектирован ли QToolButton как этот номер, или это просто ошибка? Потому что по другой причине я не могу использовать QPushButton. Итак, есть ли какой-то рабочий стол, чтобы сделать работу с инструментами?


Update:

Я попытался поместить только код ниже в выпущенном слот:

static int n = 0; 
qDebug() << Q_FUNC_INFO << ++n; 
return; 

счетчик увеличивается 2 каждый клик. Поэтому он не должен иметь ничего с QColorDialog.

+1

Я не мог воспроизвести это поведение. Не могли бы вы отредактировать вопрос и добавить пример кода? Какой сигнал кнопки вы используете, чтобы открыть диалоговое окно цвета? –

+0

@ RafaelMonteiro: Я использую статическую функцию QColorDialog :: getColor() в слоте выпущенного() сигнала, может это вызвать проблему? – diverger

+0

Я пробовал это, и он работал (с QToolButton и QPushButton). Выпущенный() сигнал вызывался только один раз, отображая диалог цвета. Вы пытались использовать сигнал clicked() вместо сигнала release()? –

ответ

1

Наконец-то я нашел причину. Я никогда не замечал, что Qt имеет возможность автоматически подключать сигналы и слоты . То есть QMetaObject :: connectSlotsByName(). Я случайно дать моему Slot имя как

void on_<object name>_<signal name>(<signal parameters>); 

стиль, это просто стиль, что «QMetaObject :: connectSlotsByName()» необходимо. Таким образом, Qt автоматически подключает сигнал() к моему слоту. И я их вручную подключаю. В Qt дважды подключите сигнал, он будет срабатывать дважды, даже отправитель и получатель будут одинаковыми !!!!

Смежные вопросы