c++ - 使用 QString 或字符串调用结构对象

标签 c++ qt struct

我想从结构对象中获取结果。

所有项目.h

#ifndef ALLITEMS_H
#define ALLITEMS_H
#include <QString>
class allitems
{
public:
    allitems();
    struct magazalar{
        QString rev;
    }kfc;
};
#endif // ALLITEMS_H

项目.cpp

#include "allitems.h"
allitems::allitems()
{
    kfc.rev="2";
}

现在我想从另一个cpp文件中获取kfc.rev的结果

void MainWindow::clicked(){
    allitems aaa;
    QPushButton *xx=(QPushButton *)sender();
    //xx->objectName() returns "kfc"
    qDebug()<<aaa.(xx->objectName()).rev;
}

我想通过单击按钮调用 kfc.rev。当我单击按钮时,按钮对象名是 kfc 我可以作为结果,但我无法实现从按钮对象名调用结构数据

有解决办法吗?

最佳答案

你不能那样做:

qDebug()<<aaa.(xx->objectName()).kat;

它不是有效的 C++,这个:(xx->objectName()) 必须在编译时知道,而不是在运行时。如果你想让它在运行时工作,你需要使用映射,或者 if 语句:

这里你可以使用简单的if-s:

if (xx->objectName() == "kfc")
 qDebug()<<aaa.kfc.kat;
//else if (xx->objectName() == "some_other_kfc")
// qDebug()<<aaa.some_other_kfc.kat;

但我不认为它是最好的设计,通常你将一个按钮与一个知道要修改哪个结构的点击处理程序相关联——它不需要从按钮实例中获取这些知识。

关于c++ - 使用 QString 或字符串调用结构对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47990386/

相关文章:

qt - 如何交叉编译不同平台的Qt应用程序

c++ - QXmlStreamWriter 和西里尔文

c - union 内存分配::存储比分配内存更多的内容

c - 相同数据类型的结构体和数组有什么区别?

c - 从文件读取数据到结构体中 (C)

c++ - 在现代 C++ 中获取参数的最有效方法?

c++ - Arduino:将 String hex "#FFFFFF"转换为 3 int

c++ - 使用 unsigned int 与检查是否为负

c++ - 链表中的无限循环

c++ - 为什么即使我设置了它的 repeat = false,定时器也能工作这么多次?