Проблема: Я пытаюсь транслировать указанный c QString
на QListView
, как показано ниже. Поэтому, если я указал c измерений, я их вижу, и они публикуются в QListView
, но если измерений нет, я хотел бы транслировать конкретную c строку «Нет широковещательных данных»
В настоящее время происходит:
![error](https://i.imgur.com/AdkYXvV.png)
Ожидаемый результат в случае, если никакие меры не приняты:
![correct](https://i.imgur.com/25qCDwf.png)
Ниже фрагмент кода, который я использую для решения конкретной проблемы 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.
Спасибо, что указали правильное направление для решения этой проблемы.