Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如果仍在运行,请关闭上一个插槽_Qt_Signals Slots - Fatal编程技术网

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;
}