QT4: Как получить доступ к объекту, находящемуся в главном окне, из другого класса? - PullRequest
1 голос
/ 26 февраля 2011

Если я в mainwindow.cpp, то я могу получить каждый объект с ним:

this->ui->textBox ...

Что если есть другой класс (myclass2.cpp) и я хотел бы получить значениеTextboxes.Но они на моем главном окне.Я не могу использовать это-> ui-> textBox

Какой способ получить доступ к объектам?

Спасибо

1 Ответ

4 голосов
/ 26 февраля 2011

В общем, это не проблема, специфичная для Qt.Есть несколько способов сделать это:

  1. Предоставить метод на mainwindow, который инкапсулирует то, что вы хотите, и вызывать его из myclass2.

    // In mainwindow.cpp:
    QString mainwindow::valueOfTheTextEditYouAreInterestedIn() const
    {
         return ui->textBox->toPlainText();
    }
    

    У этого есть много преимуществ: чистый дизайн, легко изменить позже, и очень самодокументирование, и это лишь некоторые из них.Чтобы это работало, вашему myclass2 объекту все же потребуется указатель на главное окно.Тогда вы бы назвали это так:

    // In myclass2.cpp:
    {
        // we're in some function of myclass2
        QString value = theMainWindow->valueOfTheTextEditYouAreInterestedIn();
    
        // Use the value...
    }
    
  2. Предоставьте средство доступа для редактирования текста.Это не очень хорошая идея, потому что тогда myclass2 может изменить редактирование текста, не mainwindow зная об этом.Однако это будет выглядеть так:

    QTextEdit *getTheInterestingTextEdit()
    {
         return ui->textBox;
    }
    

    Это можно сделать более приемлемым, возвращая постоянный указатель, так что myclass2 сможет читать, но не изменять значения редактируемого текста:

    const QTextEdit *getTheInterestingTextEdit() const
    {
         return ui->textBox;
    }
    

    Qt предоставляет еще один способ сделать то же самое, но вам не нужно писать собственный метод для него:

    // In myclass2.cpp:
    QTextEdit *textBox = theMainWindow->findChild<QTextEdit *>("textBox");
    

    , где mainwindow - указательв объект главного окна, который нужно каким-то образом получить myclass2, а "textBox" - это имя объекта Qt, которое вы дали интересному текстовому полю в Designer.И это будет работать только в том случае, если объект редактирования текста является дочерним виджетом объекта главного окна, что и должно быть в этом случае.Тем не менее, вы можете столкнуться с проблемами, если в целом будете полагаться на эту технику.

  3. Вы всегда можете сделать myclass2 другом mainwindow.Это так много не рекомендуется, что я не собираюсь публиковать какой-то код.: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...