Как транслировать определенную c QString в QListView - PullRequest
0 голосов
/ 05 мая 2020

Проблема: Я пытаюсь транслировать указанный c QString на QListView, как показано ниже. Поэтому, если я указал c измерений, я их вижу, и они публикуются в QListView, но если измерений нет, я хотел бы транслировать конкретную c строку «Нет широковещательных данных»

В настоящее время происходит:

error

Ожидаемый результат в случае, если никакие меры не приняты:

correct

Ниже фрагмент кода, который я использую для решения конкретной проблемы c:

qnode.hpp

class QNode : public QThread {
Q_OBJECT

public:
    QNode(int argc, char** argv, const std::string &name );
    virtual ~QNode();

    QStringListModel* getMinDistanceModelQuad3() { return &minDistanceModelQuad3; }

protected:
    QStringListModel minDistanceModelQuad3;

};

#endif /* NODE_HPP_ */

listener.h

class Listener : public QNode {
    Q_OBJECT
public:
    Listener(int argc, char** argv);
    ~Listener();

private:
    void minimumDistanceQuad3Callback(const lidar_boat_detection::min_distance::ConstPtr& msg);
    ros::Subscriber min_distance_quad3_sub;
    QString distanceBroadcasted = "";
};

listener. cpp <- Если сообщения публикуются или данные не транслируются </p>

Listener::Listener(int argc, char** argv ) :
    QNode(argc,argv,"qlistener")
    {}

Listener::~Listener() {}

void Listener::ros_comms_init() {
    ros::NodeHandle n;

    // SUBSCRIBERS for distance calculation
    min_distance_quad3_sub = n.subscribe("min_distance_quad3", 10, &Listener::minimumDistanceQuad3Callback, this);
}

void Listener::minimumDistanceQuad3Callback(const lidar_boat_detection::min_distance::ConstPtr& msg)
{
  if(distanceBroadcasted.isEmpty()) {
    std::stringstream logging_msg;
    logging_msg << "[ INFO]"
        << " No Broadcasted data ";
    QVariant new_row(QString(logging_msg.str().c_str()));
    minDistanceModelQuad3.setData(minDistanceModelQuad3.index(0),new_row);
  } else {
    ROS_INFO("Minimum Distance Quad 3: [%f]", msg->distance);
    minDistanceModelQuad3.insertRows(0,1);
    std::stringstream logging_msg;
    logging_msg << "[ INFO]"
        << " Minimum Distance Quad 3: " << msg->distance;
    QVariant new_row(QString(logging_msg.str().c_str()));
    minDistanceModelQuad3.setData(minDistanceModelQuad3.index(0),new_row);
  }
}

Я изучаю эту проблему некоторое время и не уверен, что это неправильное поведение связано с неправильным использованием свойства QVariant. Также я думаю, что правильно добавляю правильное сообщение, но, несмотря на это, кажется, что QListView получает измерения вместо строки «Нет широковещательной передачи данных». Я не уверен, что делаю что-то не так с if - else l oop.

Спасибо, что указали правильное направление для решения этой проблемы.

...