Как получить доступ к переменным, определенным и назначенным другим API

0

Извините за мой вопрос о новичке. но я несколько раз работаю над C++, и мне хотелось бы управлять некоторыми сведениями, связанными с устройством. цель состоит в том, чтобы получить имя устройства в переменных и всех других классах для доступа к этой переменной.

Я определил устройство класса:

class Device {
public:
    int value;
    ...
}

в моем main.cpp,

int main (...)
{
    Device MyDevice;

    MyDevice.value = 10;
    Browse ui;
    ui.show();
}

в browser.cpp, я хотел бы получить MyDevice.value и отобразить его. Я не уверен, как это сделать. browser.cpp - это код cpp, который отображает некоторую информацию, поддерживаемую пользовательским интерфейсом в Qt. текущий ui отображается с помощью ui.show() api.

  • 0
    Я бы подключил сигнал от устройства к слоту в вашем классе Browse. Это Qt способ сделать это, предполагая, что значение в вашем объекте Device изменится.
Теги:
qt

2 ответа

1

value должно быть private членом устройства, иначе вы будете подвергать личные данные класса Device своим клиентам. Хотя ваш код будет работать, это считается плохой практикой программирования, которая нарушает принцип инкапсуляции. Когда вы сделаете свое value частным членом данных, чтобы клиенты вашего класса Device getValue доступ к нему, вы должны getValue метод getter, например getValue который возвращает value. Когда у вас есть это место, вы должны смоделировать свой браузер, чтобы принять ссылку на объект Device. Вы можете сделать это в конструкторе Browser или выполнить это через функцию-член Browser. Как только ваш Browser узнает об экземпляре вашего Device, он может вызвать getValue для извлечения value чтобы он мог отображать его в пользовательском интерфейсе. Таким образом, ваш код будет выглядеть примерно так:

class Device {
public:
   int getValue() const {
     return m_value;
   }
private:
   int m_value;
};

class Browser {
public:
   Browser(const Device& device) :
   m_device(device) {

   }
   void displayValue() {
     someWidget.show(m_device.getValue());
   }
private:
  const Device& m_device;
};

Я бы начал с хорошей книги начинающих на C++ (и объектно-ориентированного программирования), чтобы ознакомиться с концепциями инкапсуляции, ссылки и т.д.

  • 0
    В этом случае я предпочитаю использовать параметр указателя, поскольку он предотвращает передачу временного объекта, который выйдет из области видимости. Почему не ваш геттер const?
  • 0
    Хорошая мысль о том, что получатель является постоянным Отредактировал мой ответ соответственно. Как помогает указатель? Если код, который создает Browser , не гарантирует, что экземпляр Device живет так же долго, как Browser , то независимо от того, есть ли у вас указатель или ссылка, вы смотрите на висячую сущность.
0

Интерфейс моего браузера определяется:

browser.cpp

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

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

и Browser.h

namespace Ui {
class FileBrowserMainWindow;
}

class FileBrowser : public QMainWindow
{
    Q_OBJECT

public:
    explicit BrowserMainWindow(QWidget *parent = 0);
    ~FileBrowserMainWindow();
    Ui::FileBrowserMainWindow *ui;

private:
    const Device& m_device;
};

Я не совсем понимаю, как получить значение в Browser.h/cpp

Я называю этот интерфейс в main.cpp в главном

FileBrowserMainWindow ui;
//Ui::FileBrowserMainWindow ui;
ui.show();
  • 1
    Вы должны отредактировать свой вопрос, чтобы добавить больше информации.
  • 0
    Святой курит! Вы отредактировали мой ответ, чтобы он включал ваш вопрос !! Извините, здесь есть много неправильных вещей, вам нужно изучить основы C ++, чтобы получить некоторое представление, прежде чем погрузиться в кодирование.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню