Qt中的继承不允许我参考?

时间:2016-10-26 20:40:36

标签: c++ qt

所以我在Qt项目中有一个h文件和一个cpp文件。我必须在我的头文件中声明一些qstrings,我想在我的cpp文件中引用它们,但我似乎无法访问它,有人可以解释原因或正确的方法吗?

#ifndef PROFILE_H
#define PROFILE_H

#include <QMainWindow>
#include "login.h"
#include "searchnote.h"
#include "note.h"
#include <QDebug>

namespace Ui {
class Profile;    
}

class Profile : public QMainWindow
{
    Q_OBJECT

public:
    explicit Profile(QWidget *parent = 0);
    ~Profile();

private slots:
    void on_actionAdd_Note_triggered();

private:
    Ui::Profile *ui;

private:
    QString name;
    QString major;
    QString school;
    Note myNoteList;    
};

#endif // PROFILE_H


#include "profile.h"
#include "ui_profile.h"    

Profile::Profile(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Profile)
{
    ui->setupUi(this);
}

Profile::~Profile()
{
    delete ui;
}

void Profile::on_actionAdd_Note_triggered()
{
    SearchNote openSearch;          //will send us the searchNote gui
    openSearch.setModal(true);
    openSearch.exec();    
}

void myNoteListAdd(QString newName){
    myNoteList.add();                //the cpp file doesnt recognize this object        
}

2 个答案:

答案 0 :(得分:1)

myNoteListAdd是一个独立的函数,myNoteListProfile类的私有数据成员。 只有同一个类的成员函数(通常也称为方法)才能访问这些私有数据成员

答案 1 :(得分:0)

您可能希望myNoteListAdd成为Profile的成员函数,即

class Profile : public QMainWindow
{
    Q_OBJECT

public:
    explicit Profile(QWidget *parent = 0);
    ~Profile();

private slots:
    void on_actionAdd_Note_triggered();
    **void myNoteListAdd(QString newName);**
private:
    Ui::Profile *ui;

private:
    QString name;
    QString major;
    QString school;
    Note myNoteList;    
};

实施为:

void Profile::myNoteListAdd(QString newName){
    myNoteList.add(newName);                // assuming you want to add newName to myNoteList
}

否则,您需要某种形式来访问成员myNoteList,方法是将其公开或具有getter成员。在任何一种情况下,您都需要一个配置文件的实例,即:

class Profile : public QMainWindow
{
    Q_OBJECT

public:
    explicit Profile(QWidget *parent = 0);
    ~Profile();

   //either this:
    Note myPublicNoteList;   
    // or this 
    Note getNoteList() { return myNoteList; }

private slots:
    void on_actionAdd_Note_triggered();        
private:
    Ui::Profile *ui;

private:
    QString name;
    QString major;
    QString school;

};

然后在你的.cpp

void myNoteListAdd(QString newName)
{
  Profile p = new Profile(); // or some other mechanism to get a Profile
  //then either
  p.myPublicNoteList.add(newName);
  // or 
  p->getNoteList().add(newName);
}