Qt 如果仍在运行,请关闭上一个插槽
我有一个搜索字段,可以触发数据库搜索Qt 如果仍在运行,请关闭上一个插槽,qt,signals-slots,Qt,Signals Slots,我有一个搜索字段,可以触发数据库搜索 connect(searchField,SIGNAL(textChanged(QString)),this,SLOT(searchSong(QString)) 但是数据库搜索比键入下一个搜索条件花费的时间更长 插槽已排队,但我不想要这个。发送新信号时,需要取消并重新启动上一个插槽 我该怎么做呢?你走错了路。您需要做的是创建一个标志,指示是否存在挂起的请求,如果在调用searchSong时存在,则取消它并启动一个新请求: *.h private: bo
connect(searchField,SIGNAL(textChanged(QString)),this,SLOT(searchSong(QString))代码>
但是数据库搜索比键入下一个搜索条件花费的时间更长
插槽已排队,但我不想要这个。发送新信号时,需要取消并重新启动上一个插槽
我该怎么做呢?你走错了路。您需要做的是创建一个标志,指示是否存在挂起的请求,如果在调用searchSong时存在,则取消它并启动一个新请求:
*.h
private:
bool is_busy;
*.cpp
// constructor
FooClass::FooClass(foo_paramenters):
BaseClass(args), is_busy(false)
{
// some code
connect(searchField, &QLineEdit::textChanged, this, &FooClass::searchSong);
}
void FooClass::searchSong(const QString & text){
if(is_busy)
cancel_request();
is_busy = true;
send_request(text);
}
void FooClass::receive_answer_from_request(){
// some code
is_busy = false;
}