在一個函式中,如何理解我在Qmap中創建的Qtimer物件發出的信號,如何在槽函式中找到信號來自哪個物件。
我在代碼 SQL.h 上創建了 Qmap
public slots:
void experiment();
void run();
private:
QMap<QString,QTimer*> job;
我使用 Qtimer 創建 QMap 值和鍵。SQL.cpp
void SQL::experiment()
{
QTimer *timer=new Qtimer();
job.insert("dd",timer);
QTimer *timer1=new Qtimer();
job.insert("ss",timer1);
job.value("dd")->start();
job.value("dd")->setInterval)(5000);
job.value("ss")->start();
job.value("ss")->setInterval)(10000);
connect(job.value("dd"),SIGNAL(timeout()),this,SLOT(run()));
connect(job.value("ss"),SIGNAL(timeout()),this,SLOT(run()));
}
在這個slot中,我怎么知道Qmap中的哪個Qtimer當時接收到了信號呢?
void SQL::run()
{
//job.value(key) // how to understand key
}
我以為我可以將 sender() 與 Qmapiterator 一起使用,但我不知道怎么做。你能幫我嗎?
uj5u.com熱心網友回復:
老方法是使用QSignalMapper. 您還可以將鍵設定為計時器物件的動態屬性,這樣您就可以通過QObject::sender(). 但是,今天您可能應該只使用 lambda。
首先,更改運行槽以獲取所需的任何引數:
void SQL::run(const QString &key)
{
QTimer *timer = job.value(key);
}
然后,只需使用 lambda 即可輕松傳遞所需的引數
QString name="ff";
connect(job.value(name), &QTimer::timeout, this, [this, name]() {
run(name);
});
// name is capture by value above,
// so changing name variable later does not
// affect the value captured by the lambda
附帶說明一下,除非出于某種原因確實必須這樣做,否則不應使用 oldSIGNAL()和macros。SLOT()使用“新”(10 歲)連接語法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/463650.html
上一篇:基于單詞匹配的格式字串
