QTimer singleShot使用激活器

时间:2012-03-21 16:44:48

标签: c++ qt

我的问题如下: 我有调用此

的QPushbutton *
void Reflex::buttonClicked(){

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

当单一拍摄过程我想对senderButton做一些改变,但我无法弄清楚我应该怎么做。

1 个答案:

答案 0 :(得分:1)

的可能性:

1)(此选项更为OO,维护更加明智) 子类QButton有一个看起来像这样的信号:

void delayedClick(QPushButton *);

现在,覆盖void QPushButton :: mousePressEvent(QMouseEvent * e)[虚拟保护]并启动计时器以在超时时发出delayedCLick信号。

最后,将此连接到关于按钮的任何关心,你就完成了。

2)(使用你得到的) 使用您向我们展示的内容,您可以将单击的按钮保存为成员变量(在Reflex中)并引用它作为响应以执行您的任务。

来自QT文档的说明: 警告:此函数[sender()]违反了面向对象的模块化原则。但是,当许多信号连接到单个插槽时,访问发送器可能很有用。

IE:尽可能避免。子类化很容易。