如何在另一个类中使用一个类?

时间:2014-09-15 20:58:47

标签: c++ qt

我正在开发一个Qt应用程序,而且我对C ++很陌生。我正在尝试做的是创建一个类作为变量,然后使用其他类中的内容。

我的结构和我尝试做的事情,由 - >表示和< - :

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "settings.h"

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow {
    Q_OBJECT

    public:
        -->BHSettings settings(qApp->applicationDirPath() + "/settings.ini");--<

        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();

    private:
        Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

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

void MainWindow::doSomething() {
    -->settings.loadSettings();<--
}

settings.h

#ifndef BHSETTINGS_H
#define BHSETTINGS_H

#include <QSettings>

class BHSettings : public QSettings {
    public:
        QString theme;

        BHSettings(QString settingsFilePath);
        void loadSettings();
        void saveSettings();
        void saveSettings();
};

#endif // BHSETTINGS_H

settings.cpp

#include "settings.h"

BHSettings::BHSettings(QString settingsFilePath) : QSettings(settingsFilePath, QSettings::IniFormat) {
    loadSettings();
    saveSettings();
}

void BHSettings::loadSettings() {
    theme = getTheme();
}

void BHSettings::saveSettings() {
    setValue("General/Theme", theme);
}

QString BHSettings::getTheme() {
    return value("General/Theme", "default").toString();
}

我完全迷失了如何做到这一点。关于如何定义另一个类以使用其方法的一些指导将是很好的。

3 个答案:

答案 0 :(得分:1)

你有一个很好的开始,但由于你的BHSettings类有一个非默认的构造函数,为了将它作为成员变量,你应该将它初始化为构造函数的初始化列表

MainWindow::MainWindow(QWidget *parent) : 
  QMainWindow(parent), 
  ui(new Ui::MainWindow), 
  settings(qApp->applicationDirPath() + "/settings.ini")  <--
{
  ui->setupUi(this);
}

你不能在类声明中将它初始化为内联声明或者你正在做的事情。

另请注意,每次实例化BHSettings

时,这都会导致您的设置对象被初始化(即MainWindow的对象构造)

答案 1 :(得分:1)

在没有初始化代码的情况下在类定义中声明成员。

   BHSettings settings;

在类的构造函数中添加初始化代码。

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent), ui(new Ui::MainWindow),
    settings(qApp->applicationDirPath() + "/settings.ini")
{
    ui->setupUi(this);
}

您可以使用:

void MainWindow::doSomething() {
    settings.loadSettings();
}

如果您在该功能之前不需要设置。如果有意义的话,你也可以在构造函数中调用它。

答案 2 :(得分:1)

在MainWindow类中,定义变量:

public:
    BHSettings settings; 

在构造函数中初始化这个memeber:

MainWindow::MainWindow(QWidget *parent) : ... , settings(qApp->applicationDirPath() + "/settings.ini") 
{
...
}