使用QString或string调用结构对象

时间:2017-12-27 10:21:04

标签: c++ qt struct

我想从struct的对象中获取结果。

allitems.h

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

item.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。当我点击按钮按钮objectname是kfc我可以采取结果,但我无法实现从按钮对象名称调用结构数据

有什么想法解决它?

2 个答案:

答案 0 :(得分:3)

你不能这样做:

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

它无效C ++,这个:(xx->objectName())必须在编译时知道,而不是在运行时。如果要在运行时使其工作,则需要使用map或if语句:

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

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

但我不认为它是最好的设计,通常你会联系一个按钮,一个单击处理程序知道要修改哪个结构 - 而且它不需要从按钮实例中获取这些知识。

答案 1 :(得分:0)

使用sender()通常会导致代码异味,并表示您应该做其他事情。

在现代C ++中,您可以在连接按钮时轻松生成必要的代码。我们假设aaaMainWindow的成员:

MainWindow::MainWindow(QWidget * parent) : QMainWindow(parent) {
  auto const clicked = &QPushButton::clicked;
  connect(ui->kfc, clicked, [this]{ qDebug() << this->aaa.kfc.rev; });
  //more connect statements here...
}