方法一:思路很好。值得学习
前两天有人问我关于如题所示的问题,具体就是说:现在他想做一个按钮,当click它时:只删除编辑框中的一个文字,而当常按press时:则连续的删除文字,此后一旦release,则立即停止删除问题。 关于如何删除一个文字,这个很好实现,这里把重点放在:如何区分这两种状态上。
我在实现时:只用了一个定时器。总体为:当第一次press时间达到0.5s时开始连续删除,如果按压的时间不足0.5s即release,则只删除一个文字; 而连续删除文字时:是每隔0.1s删除一个,一旦中途release了,则立即停止删除文字。
代码如下,可以直接拿来用,当然,你需要自己手动实现删除编辑框中一个文字的函数DeleteOneCharacterInEditor()。
timer1 = = new QTimer(this);
QObject::connect(timer1, SIGNAL(timeout ()),
this, SLOT(DeleteOneCharacter()));
QObject::connect(iDeleteButton, SIGNAL(pressed()),this , SLOT(PressDelete()));
QObject::connect(iDeleteButton, SIGNAL(released ()),this, SLOT(ReleaseDelete()));
//-----------------------------------------------------------------------------------------
void test::PressDelete()
{
press = 1;
timer1->setSingleShot(
true);
timer1->start(500);
}
void
test::DeleteOneCharacter()
{
if(mEditor)
{
DeleteOneCharacterInEditor();
}
press = 0;
timer1->start(100);
}
void test::ReleaseDelete()
{
timer1->stop();
if(press == 1)
{
if(mEditor) {
DeleteOneCharacterInEditor();
}
}
方法2:
设置QPushButton的autoRepeat的属性,只要设为true就可以连续删除了,而且删除的时间间隔也可以设定。