gpt4 book ai didi

c++ - Qt 将附加参数传递给插槽并保留发出的信号数据

转载 作者:太空宇宙 更新时间:2023-11-04 11:35:10 25 4
gpt4 key购买 nike

我已经在网上搜索了这个问题,并且我多次得到关于使用 QSignalMapper 的答案。 。但我的问题很清楚, QSignalMapper 自动删除最初发出的任何内容,并基本上用 nothing 替换它,加上通过 setMapping() 设置的新数据>。

这里的问题很简单。

我有一个解析 html 并更新包含文本数据的 vector 的 QNetworkAccessManager:

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,我知道索引,但不知道它附带的数据。

如何让 BOTH 正常工作(索引 + 数据)?

(类似于 mySlot(QNetworkReply *reply, int *index) ,但我们都知道那行不通)

非常感谢。

最佳答案

虽然它可能不是最好的,

  • sender()->setObjectName(const QString & name) 允许发送者自己命名。

  • 可以通过 sender()->ObjectName()

  • 从接收槽访问发送者的名字

记录在 http://qt-project.org/doc/qt-5/qobject.html#objectName-prop 上.

关于c++ - Qt 将附加参数传递给插槽并保留发出的信号数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23281809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com