当signal and slot需要传送额外参数的时候该怎么办呢?
void MainWindow::update_data(QStringList const &data)
{
int const size = data.size();
for(int i = 0; i != size; ++i)
{
QNetworkReply *reply = theme_get_->request_html(data[i]);
connect(reply, SIGNAL(finished()), this, SLOT(update_message_number()));
}
}
void MainWindow::update_message_number()
{
auto result = theme_get_->read_html(qobject_cast<QNetworkReply *>(sender()) );
if(!result.first) qDebug() << result.second;
int const number = parser_.get_anime_live_message_number(result.second);
anime_live_model_->set_current_message_number(/*index of the row*/, number);
}
我需要多传一笔参数(int),可是Qt signal and slot是base on text的,不可能直接把参数绑进去
我试过QSignalMapper,可是他无法得到另外一笔参数--reply
我尝试把资料存在map中,可是此解法相当丑陋
void MainWindow::update_data(QStringList const &data)
{
int const size = data.size();
for(int i = 0; i != size; ++i)
{
QNetworkReply *reply = theme_get_->request_html(data[i]);
connect(reply, SIGNAL(finished()), this, SLOT(update_message_number()));
mapper.insert(std::make_pair(reply, i) );
}
}
void MainWindow::update_message_number()
{
auto result = theme_get_->read_html(qobject_cast<QNetworkReply *>(sender()) );
if(!result.first) qDebug() << result.second;
int const number = parser_.get_anime_live_message_number(result.second);
if(mapper.find(sender()) != mapper.end() )
anime_live_model_->set_current_message_number(mapper[sender()], number);
else
QTimer::single_shot(500, this, SLOT(update_message_number(number ) ) ); //如果map没有更新,会重复呼叫
}
请问有没有其他办法可以解决这个问题?
真希望Qt5快点出来,Qt5的signal and slot机制改了不少
...全文
相关推荐
Qt信号和槽
- **语法**: ```cpp QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot())); ```#### 三、信号与槽的关键点
QsLog源码(库+demo 亲测可用)
/Slot机制Qt的Signal/Slot机制在QsLog中发挥了重要作用,它使得日志信息能够轻松地与GUI组件交互。
Qt connect传参方式及lambda函数传参方式演示
Lambda函数的应用Lambda表达式为信号与槽提供了更大的灵活性,尤其是处理参数或执行额外操作时。
NR 中的DMRS.pdf
序列的初始化涉及到slot位置、slot内的symbol位置,以及高层参数如scramblingID(用于区分不同小区的序列)和cellID。
PyQT5 emit 和 connect的用法详解
这种新的连接方式更加直观,更符合Python的编程风格,同时也减少了类型转换和额外的字符串定义。信号和槽之间的连接变得更加清晰,使得代码更易理解和维护。


