QTimer singleShot используйте активатор - PullRequest
0 голосов
/ 21 марта 2012

Моя проблема заключается в следующем: у меня есть QPushbutton *, который вызывает это

void Reflex::buttonClicked(){

QObject* senderObject = sender();
QPushButton* senderButton = qobject_cast<QPushButton*>(senderObject);
if (senderButton->text() == " "){
    .
    .
    .
    QTimer::singleShot(1000, senderButton, SLOT(repair()));
}

И когда в одиночном режиме я хочу внести некоторые изменения в senderButton, но я не могу понять, как мне это сделать.

1 Ответ

1 голос
/ 22 марта 2012

Возможности:

1) (Эта опция более OO и намного более разумна в обслуживании) Подкласс QButton должен иметь сигнал, который выглядит примерно так:

void delayedClick (QPushButton *);

Теперь переопределите void QPushButton :: mousePressEvent (QMouseEvent * e) [virtual protected] и запустите таймер для выдачи сигнала delayedCLick по таймауту.

Наконец, подключите это к тому, что заботится о кнопке, и все готово.

2) (Используя то, что у вас есть) Используя то, что вы нам показали, вы можете просто сохранить нажатую кнопку как переменную-член (в Reflex) и ссылаться на нее в ответ на выполнение ваших задач.,

Примечание из документации QT: Предупреждение: эта функция [sender ()] нарушает объектно-ориентированный принцип модульности.Тем не менее, получение доступа к отправителю может быть полезно, когда к одному слоту подключено много сигналов.

IE: по возможности избегать.Это довольно легко сделать подклассы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...