如何将Qt类中声明的结构传递给同一类的函数?

How to pass a struct declared in a Qt's class to the same class's function?

本文关键字:一类 函数 Qt 声明 结构      更新时间:2023-10-16
#ifndef FF_H
#define FF_H
#include <QtQuick/QQuickPaintedItem>
#include "qpainter.h"
#include <QQuickItem>
#include <QQuickWindow>
class Draw_on_qimage : public QQuickPaintedItem
{
    Q_OBJECT
public:
    virtual void paint(QPainter *);
    Draw_on_qimage(QQuickPaintedItem *parent = 0);
public slots:
    void setbb_list(QList<bounding_box_struct> bb_list)
    {
        for (int h = 0; h < bb_list.size(); h++)
        {
            bounding_box_struct obj;
            obj.x = bb_list[h].x;
            m_bb_list.push_back(obj);
        }
        emit bb_listChanged(m_bb_list);
    }
protected:
    virtual void componentComplete ();
private:
    struct bounding_box_struct
    {   int x;
        int y;
        int w;
        int h;
        std::string vehicle_type;
    };
    Q_PROPERTY(QList<bounding_box_struct> bb_list
               READ bb_list
               WRITE setbb_list
               NOTIFY bb_listChanged)
    QList<bounding_box_struct> m_bb_list;
signals:
    void bb_listChanged(QList<bounding_box_struct> bb_list);
};
#endif // FF_H

bb_list必须是Q_PROPERTY

我会遇到以下错误:

error: ‘bounding_box_struct’ was not declared in this scope
     void setbb_list(QList<bounding_box_struct> bb_list)
                           ^
error: request for member ‘size’ in ‘bb_list’, which is of non-class type ‘int’
         for (int h = 0; h < bb_list.size(); h++)
                                     ^
error: invalid types ‘int[int]’ for array subscript
             obj.x = bb_list[h].x;
                              ^

您必须在使用结构之前定义结构。因此,将其放在课堂上。

此外,如果您有使用这种类型的公共方法,则也应该公开。

还要注意,如果将方法实现放在类定义之外,则必须完全符合返回类型的结构,但这是参数的可选:

struct MyClass {
    struct Inner {};
    Inner doThis(Inner i);
    Inner doThat(Inner i) { return i; } // Not qualified
};
MyClass::Inner MyClass::doThis(Inner i) { return i; }
// ^ required                   ^ Can be qualified