could not convert ‘0’ from ‘int’ to ‘std::vector<_UNCONFIRMED_RECORDMSG>::iterator& {aka __gnu_cxx::__normal_iterator<_UNCONFIRMED_RECORDMSG*, std::vector<_UNCONFIRMED_RECORDMSG> >&}
时间: 2024-01-20 21:02:26 浏览: 62
这个错误信息通常出现在将整数类型的 0 赋值给迭代器类型的变量时。例如:
```cpp
std::vector<int> vec;
std::vector<int>::iterator iter = 0;
```
上述代码中,将整数类型的 0 赋值给了 `std::vector<int>::iterator` 类型的变量 `iter`,这是不正确的。因为迭代器是一个指针类型,不能将整数类型的 0 直接赋值给它。
如果需要将迭代器初始化为指向容器中的某个位置,应该使用容器的成员函数来获取迭代器。例如:
```cpp
std::vector<int> vec;
std::vector<int>::iterator iter = vec.begin(); // 获取容器起始位置的迭代器
```
如果需要将迭代器初始化为一个空值,应该使用 `nullptr` 而不是整数类型的 0。例如:
```cpp
std::vector<int>::iterator iter = nullptr;
```
总之,将整数类型的 0 赋值给迭代器是不正确的,应该使用容器的成员函数获取迭代器,或者使用 `nullptr` 来初始化一个空的迭代器。
相关问题
qt5的mvc模型视图代理实现,其中model有9列数据,最多20行数据,数据总页数不超过20页。列数据依次为:点号,信息描述,遥信位,动作时间,复归时间,验收时间,确认状态,确认/取消,通道类型,其中1,2,3,8,9列数据初始化有数据,其他列为空。第8列数据是ico图标。初始化的时候只加载第一页数据。当有下一页数据来的时候,清除当前页的数据和内存,当前页数据某行数据改变时,颜色置高亮,更新当前行的空的其他数据,其中第8列数据更改图标,请思考一下,给出代码用例
以下是一个简单的Qt5的MVC模型视图代理实现,其中model有9列数据,最多20行数据,数据总页数不超过20页。这个实现使用了一个自定义委托来处理第8列数据的图标。同时,它在用户点击表格中的某一行时更新了选中行的空的其他数据。你可以根据实际情况进行修改和调整。
```cpp
// mymodel.h
#ifndef MYMODEL_H
#define MYMODEL_H
#include <QAbstractTableModel>
#include <QList>
#include <QIcon>
class MyModel : public QAbstractTableModel
{
Q_OBJECT
public:
MyModel(QObject *parent = nullptr);
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
bool setData(const QModelIndex &index, const QVariant &value, int role) override;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
private:
struct RowData {
int pointNum;
QString infoDesc;
bool yxBit;
QString actionTime;
QString resetTime;
QString verifyTime;
bool confirmStatus;
bool confirmCancel;
QString channelType;
QIcon icon;
};
QList<RowData> m_data;
void init();
signals:
void dataChanged(int row);
public slots:
void nextPage();
};
#endif // MYMODEL_H
// mymodel.cpp
#include "mymodel.h"
MyModel::MyModel(QObject *parent)
: QAbstractTableModel(parent)
{
init();
}
void MyModel::init()
{
// 初始化数据
for (int i = 0; i < 20; ++i) {
RowData data;
data.pointNum = i + 1;
data.infoDesc = QString("Description %1").arg(i + 1);
data.yxBit = i % 2 == 0;
data.actionTime = "2022-01-01";
data.resetTime = "2022-01-02";
data.verifyTime = "2022-01-03";
data.confirmStatus = i % 3 == 0;
data.confirmCancel = false;
data.channelType = QString("Channel %1").arg(i % 4 + 1);
data.icon = QIcon(":/icons/icon1.png");
m_data.append(data);
}
}
int MyModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent)
return m_data.count();
}
int MyModel::columnCount(const QModelIndex &parent) const
{
Q_UNUSED(parent)
return 9;
}
QVariant MyModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() >= m_data.count() || index.row() < 0)
return QVariant();
if (role == Qt::DisplayRole || role == Qt::EditRole) {
const RowData &data = m_data.at(index.row());
switch (index.column()) {
case 0:
return data.pointNum;
case 1:
return data.infoDesc;
case 2:
return data.yxBit ? "ON" : "OFF";
case 3:
return data.actionTime;
case 4:
return data.resetTime;
case 5:
return data.verifyTime;
case 6:
return data.confirmStatus ? "Confirmed" : "Unconfirmed";
case 7:
return data.confirmCancel ? "Cancelled" : "Confirmed";
case 8:
return data.channelType;
default:
break;
}
}
if (role == Qt::DecorationRole && index.column() == 8) {
const RowData &data = m_data.at(index.row());
return data.icon;
}
return QVariant();
}
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (index.isValid() && role == Qt::EditRole) {
RowData &data = m_data[index.row()];
switch (index.column()) {
case 2:
data.yxBit = value.toBool();
break;
case 6:
data.confirmStatus = value.toBool();
break;
case 7:
data.confirmCancel = value.toBool();
break;
default:
break;
}
emit dataChanged(index.row());
return true;
}
return false;
}
QVariant MyModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (role != Qt::DisplayRole)
return QVariant();
if (orientation == Qt::Horizontal) {
switch (section) {
case 0:
return "Point Number";
case 1:
return "Info Description";
case 2:
return "YX Bit";
case 3:
return "Action Time";
case 4:
return "Reset Time";
case 5:
return "Verify Time";
case 6:
return "Confirm Status";
case 7:
return "Confirm/Cancel";
case 8:
return "Channel Type";
default:
break;
}
}
return QVariant();
}
void MyModel::nextPage()
{
// 清除当前页的数据和内存
beginResetModel();
m_data.clear();
// 加载下一页数据
for (int i = 0; i < 20; ++i) {
RowData data;
data.pointNum = i + 21;
data.infoDesc = QString("Description %1").arg(i + 21);
data.yxBit = i % 3 == 0;
data.actionTime = "2022-01-04";
data.resetTime = "2022-01-05";
data.verifyTime = "2022-01-06";
data.confirmStatus = i % 4 == 0;
data.confirmCancel = false;
data.channelType = QString("Channel %1").arg(i % 5 + 1);
data.icon = QIcon(":/icons/icon2.png");
m_data.append(data);
}
// 通知视图更新
endResetModel();
}
```
自定义委托的实现:
```cpp
// icondelegate.h
#ifndef ICONDELEGATE_H
#define ICONDELEGATE_H
#include <QStyledItemDelegate>
class IconDelegate : public QStyledItemDelegate
{
Q_OBJECT
public:
IconDelegate(QObject *parent = nullptr);
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
};
#endif // ICONDELEGATE_H
// icondelegate.cpp
#include "icondelegate.h"
IconDelegate::IconDelegate(QObject *parent)
: QStyledItemDelegate(parent)
{
}
void IconDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (index.column() == 8) {
QIcon icon = qvariant_cast<QIcon>(index.data());
if (!icon.isNull()) {
QRect rect = option.rect;
QSize size = icon.actualSize(QSize(rect.width(), rect.height()));
int x = rect.x() + (rect.width() - size.width()) / 2;
int y = rect.y() + (rect.height() - size.height()) / 2;
icon.paint(painter, QRect(x, y, size.width(), size.height()));
}
} else {
QStyledItemDelegate::paint(painter, option, index);
}
}
QSize IconDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (index.column() == 8) {
QIcon icon = qvariant_cast<QIcon>(index.data());
if (!icon.isNull()) {
return icon.actualSize(QSize(option.rect.width(), option.rect.height()));
}
}
return QStyledItemDelegate::sizeHint(option, index);
}
```
使用这些类的主代码:
```cpp
// main.cpp
#include <QApplication>
#include <QTableView>
#include <QHeaderView>
#include "mymodel.h"
#include "icondelegate.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyModel model;
QTableView tableView;
IconDelegate delegate;
tableView.setModel(&model);
tableView.setItemDelegate(&delegate);
tableView.verticalHeader()->hide();
tableView.setAlternatingRowColors(true);
tableView.setSelectionBehavior(QAbstractItemView::SelectRows);
tableView.setSelectionMode(QAbstractItemView::SingleSelection);
tableView.resizeColumnsToContents();
tableView.resizeRowsToContents();
QObject::connect(&model, &MyModel::dataChanged, [&](int row) {
for (int i = 0; i < model.columnCount(); ++i) {
if (i == 2 || i == 6 || i == 7)
continue;
QModelIndex index = model.index(row, i);
if (!index.isValid())
continue;
model.setData(index, QVariant(QString("Row %1, Column %2").arg(row + 1).arg(i + 1)), Qt::EditRole);
}
});
QObject::connect(&tableView, &QTableView::clicked, [&](const QModelIndex &index) {
if (index.isValid()) {
for (int i = 0; i < model.columnCount(); ++i) {
if (i == 2 || i == 6 || i == 7)
continue;
QModelIndex idx = model.index(index.row(), i);
if (!idx.isValid())
continue;
model.setData(idx, QVariant(QString("Row %1, Column %2 (Selected)").arg(index.row() + 1).arg(i + 1)), Qt::EditRole);
}
}
});
tableView.show();
return a.exec();
}
```
以上就是一个简单的Qt5的MVC模型视图代理实现,其中model有9列数据,最多20行数据,数据总页数不超过20页。列数据依次为:点号,信息描述,遥信位,动作时间,复归时间,验收时间,确认状态,确认/取消,通道类型,其中1,2,3,8,9列数据初始化有数据,其他列为空。第8列数据是ico图标。初始化的时候只加载第一页数据。当有下一页数据来的时候,清除当前页的数据和内存,当前页数据某行数据改变时,颜色置高亮,更新当前行的空的其他数据,其中第8列数据更改图标。
deepcounting
Deepcounting是结合了Yolov5和Deepsort算法,用于实现行人计数的功能。它可以统计摄像头内出现过的总人数,并且可以对穿越自定义黄线的行人进行计数。
Deepsort算法在Sort算法的基础上增加了级联匹配(Matching Cascade)和新轨迹的确认(confirmed)。Tracks被分为确认态(confirmed)和不确认态(unconfirmed),新产生的Tracks属于不确认态。不确认态的Tracks需要与Detections连续匹配一定次数(默认为3次)才能转化为确认态。而确认态的Tracks需要与Detections连续失配一定次数(默认为30次)才会被删除。整个算法的工作流程如下:
在一个大的循环中,对每个人的位置进行遍历,通过上述的分析和算法步骤,可以更好地理解Deepcounting的工作原理和计数效果。
总结来说,Deepcounting是一个基于Yolov5和Deepsort算法的行人计数系统,通过图像处理和轨迹匹配技术来实现对行人数量的统计和计数。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)