我已经在网上搜索了此问题,并且反复获得有关的用法的答案QSignalMapper 的用法。但是我的问题很清楚, QSignalMapper 会自动清除最初发出的所有内容,并用代替,再加上通过 setMapping()设置的新数据来代替它。
这里的问题很简单。
我有一个QNetworkAccessManager可以解析html并更新包含文本数据的 vector :
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
}
使用正常的信号和时隙方式,我将无法知道我要更新的 vector 的索引,
要么,
如果我使用的是 QSignalMapper ,则我知道索引,但不知道其附带的数据。
如何使和一起工作(索引+数据)?
(类似
mySlot(QNetworkReply *reply, int *index)
,但我们都知道那是行不通的)提前谢谢了。
最佳答案
虽然可能不是最好的,
sender()->setObjectName(const QString & name)
允许发送者自行命名。 sender()->ObjectName()
如http://qt-project.org/doc/qt-5/qobject.html#objectName-prop所记录。