方法一:思路很好。值得學(xué)習(xí)
前兩天有人問(wèn)我關(guān)于如題所示的問(wèn)題,具體就是說(shuō):現(xiàn)在他想做一個(gè)按鈕,當(dāng)click它時(shí):只刪除編輯框中的一個(gè)文字,而當(dāng)常按press時(shí):則連續(xù)的刪除文字,此后一旦release,則立即停止刪除問(wèn)題。 關(guān)于如何刪除一個(gè)文字,這個(gè)很好實(shí)現(xiàn),這里把重點(diǎn)放在:如何區(qū)分這兩種狀態(tài)上。
我在實(shí)現(xiàn)時(shí):只用了一個(gè)定時(shí)器。總體為:當(dāng)?shù)谝淮蝡ress時(shí)間達(dá)到0.5s時(shí)開始連續(xù)刪除,如果按壓的時(shí)間不足0.5s即release,則只刪除一個(gè)文字; 而連續(xù)刪除文字時(shí):是每隔0.1s刪除一個(gè),一旦中途release了,則立即停止刪除文字。
代碼如下,可以直接拿來(lái)用,當(dāng)然,你需要自己手動(dòng)實(shí)現(xiàn)刪除編輯框中一個(gè)文字的函數(shù)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:
設(shè)置QPushButton的autoRepeat的屬性,只要設(shè)為true就可以連續(xù)刪除了,而且刪除的時(shí)間間隔也可以設(shè)定。