Russian Qt Forum

Qt => Общие вопросы => Тема начата: QtProger от Октябрь 23, 2009, 19:56



Название: Что такое ui ?
Отправлено: QtProger от Октябрь 23, 2009, 19:56
Вопрос заключается в следующем: чтобы обратиться к какому-нибудь виджету на форме, надо писать перед его именем ui, примерно так:
ui->plainTextEdit->toPlainText()
Что такое ui и откуда он взялся ?


Название: Re: Что такое ui ?
Отправлено: zenden от Октябрь 23, 2009, 21:03
Кликаем по слову ui.
Нажимаем F2. Вуаля!!  ;)


Название: Re: Что такое ui ?
Отправлено: QtProger от Октябрь 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; //эта строчка похоже меня доконает
};


Название: Re: Что такое ui ?
Отправлено: BRE от Октябрь 23, 2009, 21:25
Не пойму, как это в классе можно объявить объект этого класса ???
А это объект другого класса.  ;)
Посмотри файл ui_mywidget.h


Название: Re: Что такое ui ?
Отправлено: zenden от Октябрь 23, 2009, 21:31

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

Выбираем Ui, нажимаем F2  и видим волшебное слово namespace.


Название: Re: Что такое ui ?
Отправлено: lit-uriy от Октябрь 23, 2009, 22:07
Цитировать
Не пойму, как это в классе можно объявить объект этого класса
так делать можно! Это наиболее простой способ создать связанный список (обычно так делают в структурах, но класс почти ничем от неё не отличается)

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


Название: Re: Что такое ui ?
Отправлено: zenden от Октябрь 23, 2009, 22:34
так делать можно! Это наиболее простой способ создать связанный список (обычно так делают в структурах, но класс почти ничем от неё не отличается)

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

всё, молчу, Капитан Очевидность вас покидает  ;D


Название: Re: Что такое ui ?
Отправлено: QtProger от Октябрь 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, и в классе создавать указатель на объект этого класса ? Нафиг это нужно ?


Название: Re: Что такое ui ?
Отправлено: BRE от Октябрь 24, 2009, 10:51
Зачем нужно делать namespace Ui, и в классе создавать указатель на объект этого класса ? Нафиг это нужно ?
Повторюсь, посмотри файл ui_mywidget.h, который генерируется утилитой uic из файла mywidget.ui


Название: Re: Что такое ui ?
Отправлено: QtProger от Октябрь 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 ? ???



Название: Re: Что такое ui ?
Отправлено: BRE от Октябрь 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.


Название: Re: Что такое ui ?
Отправлено: QtProger от Октябрь 24, 2009, 12:53
Я так понимаю, что MyWidget и Ui::MyWidget - это совершенно разные классы. Я правильно понял ?


Название: Re: Что такое ui ?
Отправлено: BRE от Октябрь 24, 2009, 12:56
Я так понимаю, что MyWidget и Ui::MyWidget - это совершенно разные классы. Я правильно понял ?
Да


Название: Re: Что такое ui ?
Отправлено: QtProger от Октябрь 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;
};

Что это значит ?


Название: Re: Что такое ui ?
Отправлено: lit-uriy от Октябрь 24, 2009, 14:23
>>Что это значит ?
скорее всего, алгоритм анализа в IDE несовершенен


Название: Re: Что такое ui ?
Отправлено: QtProger от Октябрь 24, 2009, 14:45
скорее всего, алгоритм анализа в IDE несовершенен

На IDE надо грешить в самую последнюю очередь.