如何从 GUI 写入结构

How to write to struct from a GUI

使用 Qt,我试图通过来自 gui 的输入写入我的结构。

我的target.h文件:

struct Target{
    double heading;
    double speed;
};

我的客户:

#include <target.h>

struct Target myship;

myship.heading = 0;
myship.speed = 0;

我使用QDial 作为标题示例。我可以将 QDial 的值写入文本文件,但我想利用结构。

我想知道的是如何访问 mainwindow.cpp 中的结构,以便我可以写入该结构?

我发现我可以像这样在 mainwindow.cpp 中访问我的 Target 结构:

Target.heading

但找不到 "myship"。我本以为我可以做到

myship.heading...

Target.myship.heading...

但两者都不起作用。当我做 Target.heading 它给了我错误

expected unqualified-id before '.' token

我的最终目标是让我的 gui(在本例中为 QDial)写入结构,然后让我的 gui(QLabel)显示写入的内容。如前所述,我有 read/write 使用文本文件,但我目前只写出一个值,这不符合我的要求。

我是 Qt 和一般结构的新手,所以我猜我遗漏了一些非常微不足道的东西,或者我的理解完全不正确。

您在 myship 变量定义中使用的 struct 前缀是 C-ism。它不属于 C++。您应该将 myship 定义为:

Target myship;

此外,由于现在是 2016 年,您应该使用 C++11 的所有功能来让您的生活更轻松。 non-static/non-const class/struct 成员的初始化非常有帮助并且避免了在使用结构时的样板。因此,更喜欢:

// target.h
#include <QtCore>
struct Target {
  double heading = 0.0;
  double speed = 0.0;
};
QDebug operator(QDebug dbg, const Target & target);

// target.cpp
#include "target.h"
QDebug operator(QDebug dbg, const Target & target) {
  return dbg << target.heading << target.speed;
}

// main.cpp
#include "target.h"
#include <QtCore>

int main() {
  Target ship;
  qDebug() << ship;
}

请注意,您应该将自己的 headers 作为 #include "header.h" 而不是 #include <header.h>。后者为系统保留 headers.

Without Qt:

#include <iostream>
struct Target {
  double heading = 0.0;
  double speed = 0.0;
};

int main() {
  Target ship;
  std::cout << ship.heading << " " << ship.speed << std::endl;
}