1 Востаннє редагувалося Teg Miles (15.11.2023 19:27:49)

Тема: Qt6 доступ до змінної з іншого класу

На початку програми потрібно завантажити зміст текстових файлів до змінної.
Ця змінна знаходиться в окремому класі.
Як отримати доступ до цієї змінної з інших класів, не викликаючи нове завантаження?
У wxWidgets, наприклад, аналог main реалізовано як клас, успадкований від wxApp.
А ще є допоміжна функція wxGetApp, яка дає доступ до будь-якої публічної функції чи змінної,
що знаходиться в такому класі main. Так я отримував там доступ із будь-якого іншого класу
до змінних, що завантажуються на початку програми. Не розумію як це робиться в Qt.

2

Re: Qt6 доступ до змінної з іншого класу

Щось таке можна зробити:

#include <QApplication>
#include "MyDataLoader.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MyDataLoader loader;
    //MyDataLoader - класс, що завантажує текст з файлу 
    //його метод /*QString*/ loadData() повертає цей текст

    //створюємо власну property
    a.setProperty("textData", QVariant{ loader.loadData() });

    return a.exec();
}


//Класс десь в окремій одиниці трансляції, що потребує данних з файлу

#include <QApplication>
class SomeClass
{
  private:
        QString value;

  public:
    SomeClass(){
        value=qApp->property("textData").toString(); //забираємо текст
    }
};
Подякували: Teg Miles1

3

Re: Qt6 доступ до змінної з іншого класу

А взагалі такі питання зазвичай вирішуються передаванням необхідних данних у конструкторі чи сетерами/геттерами за допомогою вказівників чи посилань (або за значенням, що підходить не завжди)

Подякували: Teg Miles1

4

Re: Qt6 доступ до змінної з іншого класу

asdf написав:

А взагалі такі питання зазвичай вирішуються передаванням необхідних данних у конструкторі чи сетерами/геттерами за допомогою вказівників чи посилань (або за значенням, що підходить не завжди)

Передав вказівник на клас завантаження файлів до конструктора головного вікна і додав explicit.
Решта вікон відкривається з головного вікна, тому можна передавати цей вказівник далі.