方法一:思路很好。值得學習
前兩天有人問我關于如題所示的問題,具體就是說:現在他想做一個按鈕,當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就可以連續刪除了,而且刪除的時間間隔也可以設定。