2012-03-21 69 views
0

我的问题是这样的: 我有QPushbutton *调用此QTimer singleShot使用激活

void Reflex::buttonClicked(){ 

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

而当singleshot PROC我想要在senderButton一些变化,但我找不出如何我应该这样做。

+1

难道你不应该在你正在调用的'repair()'方法中执行它吗? – Gui13 2012-03-21 16:49:07

+0

在'senderButton'或'this'(哪种类型是'Reflex')中插槽'repair'真的吗? – alexisdm 2012-03-21 18:51:32

+0

以及我应该更好地解释..它不是修复方法只是一个吸名字选择它只是一个程序..修复是在这个。 基本上需要等待1秒,并修改senderButton。 – FaNaT 2012-03-21 20:46:05

回答

1

可能性:

1)(此选项更OO,和更理智维持) 子类QButton有看起来像这样的信号:

无效delayedClick(QPushButton *);

现在,重写void QPushButton :: mousePressEvent(QMouseEvent * e)[virtual protected]并让它启动一个定时器,在超时时发出delayedCLick信号。

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

2)(使用你所拥有的) 使用你到目前为止给我们展示过的东西,你可以将点击的按钮保存为一个成员变量(在Reflex中),并引用它以响应你的任务。

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

IE:AVOID如果可能的话。做子类很容易。