我在网上搜索了这个问题,并且我反复提到了使用 QSignalMapper 的答案。但我的问题非常明确, QSignalMapper 会自动删除最初发出的内容,并以 nothing 替换它,加上通过 setMapping()设置的新数据。
这里的问题很简单。
我有一个QNetworkAccessManager,它解析html并更新包含文本数据的向量:
void DataManager::startHttpRequest(QString url, int index)
{
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
//QSignalMapper* signalMapper = new QSignalMapper(this);
//connect(manager,SIGNAL(finished(QNetworkReply*)), signalMapper,SLOT(map()));
//signalMapper->setMapping(manager, index);
//connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(insertUpdate(int)));
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishHttpRequest(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl(url)));
qDebug() << index;
}
以下是请求完成后会发生的情况,正常方式:
void DataManager::finishHttpRequest(QNetworkReply *reply)
{
QString html = QString(reply->readAll()).simplified();
QString info;
int start = html.indexOf("<span id=\"SalePrice\" >");
if(start != -1)
{
QString price = html.mid(start + 23, 30);
int end = price.indexOf("</span>");
info = price.mid(0, end - 1);
qWarning() << price.mid(0, end - 1);
}
else
{
info = "NA";
}
// Do more stuff
}
使用正常的信号和插槽方式,我无法知道我正在更新的矢量的索引,
或者,
如果我使用 QSignalMapper ,我 知道 索引,但不知道随附的数据。
如何 BOTH 工作(索引+数据)?
(类似于mySlot(QNetworkReply *reply, int *index)
,但我们都知道这不起作用)
非常感谢提前。
答案 0 :(得分:1)
虽然它可能不是最好的,
sender()->setObjectName(const QString & name)
允许发件人为自己命名。
可以通过sender()->ObjectName()
如http://qt-project.org/doc/qt-5/qobject.html#objectName-prop所述。