Russian Qt Forum
Ноябрь 26, 2024, 09:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Что такое ui ?  (Прочитано 11615 раз)
QtProger
Гость
« : Октябрь 23, 2009, 19:56 »

Вопрос заключается в следующем: чтобы обратиться к какому-нибудь виджету на форме, надо писать перед его именем ui, примерно так:
ui->plainTextEdit->toPlainText()
Что такое ui и откуда он взялся ?
Записан
zenden
Гость
« Ответ #1 : Октябрь 23, 2009, 21:03 »

Кликаем по слову ui.
Нажимаем F2. Вуаля!!  Подмигивающий
Записан
QtProger
Гость
« Ответ #2 : Октябрь 23, 2009, 21:17 »

Кликаем по слову ui.
Нажимаем F2. Вуаля!!  Подмигивающий

Спасибо ! Не знал про такую крутую функцию F2

Не пойму, как это в классе можно объявить объект этого класса Непонимающий

Код
C++ (Qt)
class MyWidget : public QWidget
{
   Q_OBJECT
 
public:
   MyWidget(QWidget *parent = 0);
   ~MyWidget();
 
   public slots:
   void MyOpenClick();
   void MySaveClick();
 
private:
   Ui::MyWidget *ui; //эта строчка похоже меня доконает
};
Записан
BRE
Гость
« Ответ #3 : Октябрь 23, 2009, 21:25 »

Не пойму, как это в классе можно объявить объект этого класса Непонимающий
А это объект другого класса.  Подмигивающий
Посмотри файл ui_mywidget.h
Записан
zenden
Гость
« Ответ #4 : Октябрь 23, 2009, 21:31 »


    Ui::MyWidget *ui; //эта строчка похоже меня доконает
};

Выбираем Ui, нажимаем F2  и видим волшебное слово namespace.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #5 : Октябрь 23, 2009, 22:07 »

Цитировать
Не пойму, как это в классе можно объявить объект этого класса
так делать можно! Это наиболее простой способ создать связанный список (обычно так делают в структурах, но класс почти ничем от неё не отличается)

Цитировать
Ui::MyWidget *ui; //эта строчка похоже меня доконает
Здесь нет упоминания этого же класса. Здесь объявлен указатель с именем ui на класс MyWidget находящийся в пространстве имён Ui (который в свою очередь определён в автоматически создаваемом файле)
Записан

Юра.
zenden
Гость
« Ответ #6 : Октябрь 23, 2009, 22:34 »

так делать можно! Это наиболее простой способ создать связанный список (обычно так делают в структурах, но класс почти ничем от неё не отличается)

Автор темы прав, объект создать нельзя, можно использовать указатель или ссылку на объект.

всё, молчу, Капитан Очевидность вас покидает  Смеющийся
Записан
QtProger
Гость
« Ответ #7 : Октябрь 24, 2009, 10:24 »

Код
C++ (Qt)
namespace Ui
{
   class MyWidget;
}
 
class MyWidget : public QWidget
{
   Q_OBJECT
 
public:
   MyWidget(QWidget *parent = 0);
   ~MyWidget();
 
   public slots:
   void MyOpenClick();
   void MySaveClick();
 
private:
   Ui::MyWidget *ui;
};

Зачем нужно делать namespace Ui, и в классе создавать указатель на объект этого класса ? Нафиг это нужно ?
Записан
BRE
Гость
« Ответ #8 : Октябрь 24, 2009, 10:51 »

Зачем нужно делать namespace Ui, и в классе создавать указатель на объект этого класса ? Нафиг это нужно ?
Повторюсь, посмотри файл ui_mywidget.h, который генерируется утилитой uic из файла mywidget.ui
Записан
QtProger
Гость
« Ответ #9 : Октябрь 24, 2009, 12:13 »

Повторюсь, посмотри файл ui_mywidget.h, который генерируется утилитой uic из файла mywidget.ui

Посмотрел, нашел там класс Ui_MyWidget, в котором содержатся все виджеты на форме. А также там нашел:

Код
C++ (Qt)
namespace Ui {
   class MyWidget: public Ui_MyWidget {};
} // namespace Ui

А в файле mywidget.cpp:

Код
C++ (Qt)
namespace Ui
{
   class MyWidget;
}

Зачем два раза писать класс MyWidget в пространстве имен Ui ? Непонимающий

Записан
BRE
Гость
« Ответ #10 : Октябрь 24, 2009, 12:19 »

Посмотрел, нашел там класс Ui_MyWidget, в котором содержатся все виджеты на форме. А также там нашел:

Код
C++ (Qt)
namespace Ui {
   class MyWidget: public Ui_MyWidget {};
} // namespace Ui

А в файле mywidget.cpp:

Код
C++ (Qt)
namespace Ui
{
   class MyWidget;
}

Зачем два раза писать класс MyWidget в пространстве имен Ui ? Непонимающий
Первое написание - это определение самого класса, второе - его forward declaration.
Записан
QtProger
Гость
« Ответ #11 : Октябрь 24, 2009, 12:53 »

Я так понимаю, что MyWidget и Ui::MyWidget - это совершенно разные классы. Я правильно понял ?
Записан
BRE
Гость
« Ответ #12 : Октябрь 24, 2009, 12:56 »

Я так понимаю, что MyWidget и Ui::MyWidget - это совершенно разные классы. Я правильно понял ?
Да
Записан
QtProger
Гость
« Ответ #13 : Октябрь 24, 2009, 13:22 »

Я так понимаю, что MyWidget и Ui::MyWidget - это совершенно разные классы. Я правильно понял ?
Да

Если так, то это почти все проясняет. Но вот одна загвоздка....
(см. http://www.prog.org.ru/index.php?topic=11011.msg67007#msg67007)
Навожу курсор мыши на класс MyWidget в пространстве имен Ui:

Код
C++ (Qt)
namespace Ui
{
   class MyWidget;
}

Нажимаю F2 и оказываюсь тут:

Код
C++ (Qt)
class MyWidget : public QWidget
{
   Q_OBJECT
 
public:
   MyWidget(QWidget *parent = 0);
   ~MyWidget();
 
   public slots:
   void MyOpenClick();
   void MySaveClick();
 
private:
   Ui::MyWidget *ui;
};

Что это значит ?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #14 : Октябрь 24, 2009, 14:23 »

>>Что это значит ?
скорее всего, алгоритм анализа в IDE несовершенен
Записан

Юра.
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.319 секунд. Запросов: 23.