Извините за мой вопрос о новичке. но я несколько раз работаю над 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.
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++ (и объектно-ориентированного программирования), чтобы ознакомиться с концепциями инкапсуляции, ссылки и т.д.
Browser
, не гарантирует, что экземпляр Device
живет так же долго, как Browser
, то независимо от того, есть ли у вас указатель или ссылка, вы смотрите на висячую сущность.
Интерфейс моего браузера определяется:
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();