Как получить доступ к значению QString из одного класса (оконный интерфейс) в другом классе? - PullRequest
0 голосов
/ 15 ноября 2018

Я собираюсь запрограммировать небольшое настольное приложение для захвата рабочего времени моих коллег по работе.Он должен быть адаптирован к нашим потребностям, поэтому коммерческое решение не вариант (+ у нас нет денег).

Я использую Qt (5.11.2) и C ++.У меня есть MainWindow (первый интерфейс окна), который использует автозаполнение, чтобы получить информацию (ID, имена, групповые лидеры, ...) из базы данных sqlite3 и заполнить QLineEdits.Эта часть работает просто отлично.Теперь я создал интерфейс второго окна, чтобы зафиксировать фактическое рабочее время сотрудника.Я хотел бы представить пользователю во втором окне имя и идентификатор сотрудника, чье рабочее время в будущем.Эта информация должна быть получена из первого класса окна.

Я попытался сделать переменную имени общедоступной в своем первом классе окна, но по какой-то причине я не могу получить доступ к переменной во втором классе окна, и ятакже пытались использовать геттеры и сеттеры, но безрезультатно.Когда я использую геттеры и сеттеры, я могу вручную вставить строку в сеттер, и она работает.Но я хотел бы получить значение строки из lineEdit из первого окна (см. Небольшой фрагмент кода)

QString tabname_temp = ui->lineEdit_Tabname->text(); // get name from lineEditf; from first window UI

Я хотел бы работать с этой переменной tabname_temp и использовать ее для отображения в меткес этим строковым значением во втором классе окна пользовательского интерфейса.

Методы получения и установки в первом классе окна выглядели так:

public:
    void setName(QString name);
    QString getName() const {return name;}

private:
    QString name;

Реализация setName выглядела так:

void MainWindow::setName(QString name){
    this->name = name;
}

Долгие часы гугл-фу были напрасны.Я уверен, что я упускаю что-то важное здесь.Я надеюсь, что я ясно дал понять, что я ищу.Пожалуйста, дайте мне знать, если и как я могу улучшить этот вопрос.

РЕДАКТИРОВАТЬ: Вот как я создаю второй интерфейс окна (mainwindow.h):

private:
    Ui::MainWindow *ui;
    WindowActivity *activityWindow; // second window

Это мой код изmainwindow.cpp:

void MainWindow::on_Btn_Activity_clicked()
{
    activityWindow = new WindowActivity(this);
    activityWindow->resize(700,700);
    activityWindow->show();
}

1 Ответ

0 голосов
/ 15 ноября 2018

Я пытался сделать переменную имени общедоступной в своем первом классе окна, но по какой-то причине я не смог получить доступ к переменной во втором классе окна

Это неправильный подход,MainWindow должен видеть (знать о) WindowActivity, а не наоборот.

Чтобы получить доступ к значению ui->lineEdit_Tabname в классе WindowActivity, выполните следующие действия:

  1. Добавление общедоступного setName метода к WindowActivity

    void setName(const QString &name);
    
  2. Вызов WindowActivity::setName после activityWindow = new WindowActivity(this);, как это

    activityWindow->setName(ui->lineEdit_Tabname->text());
    
...