С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
20 / 20 / 9
Регистрация: 23.09.2013
Сообщений: 329

Что значит конструкция при создании наследуемого класса от QMainWindow

25.03.2014, 16:59. Показов 3545. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста,

создал класс mainwindow, наследуемый от QMainWindow и в хедере:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
protected:
    void virtual paintEvent(QPaintEvent*);
 
private:
    Ui::MainWindow *ui;
 
};
Что здесь значат записи:
Code
1
2
private:
    Ui::MainWindow *ui;
и

Code
1
Q_OBJECT
?

Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2014, 16:59
Ответы с готовыми решениями:

Что значит * при создании переменных?
Я в с++ новичок, объясните по простому, зачем это? Например int *ptrvalue = new int; И ещё один вопрос возник по ходу дела, что значит...

Что значит элемент в строке при создании блокнота в Windows Form?
Смотрел как парень в видео создавая блокнот в Windows Form использует строку DialogResult rez...

Что значит эта конструкция?
Расскажите что это за конструкция double fm(double, int);

16
 Аватар для dmitre
10 / 10 / 3
Регистрация: 02.11.2013
Сообщений: 53
25.03.2014, 17:06
Q_OBJECT - макрос, который используется во всех формах, наследуемых от QObject. Без него не будут работать сигналы, слоты и т.д.

Ui::MainWindow *ui - думается, что ссылка класса "на себя", через которую идет доступ к виджетам на форме.

Если что не так - поправьте...
1
20 / 20 / 2
Регистрация: 27.01.2014
Сообщений: 232
25.03.2014, 17:12
C ui не все так просто. И вроде это далеко не ссылка на себя.
0
20 / 20 / 9
Регистрация: 23.09.2013
Сообщений: 329
25.03.2014, 17:14  [ТС]
Q_OBJECT - макрос, который используется во всех формах, наследуемых от QObject
А каким препроцессором он потом будет обрабатываться? Или в qt creator один препроцессор?

Ui::MainWindow *ui - думается, что ссылка класса "на себя", через которую идет доступ к виджетам на форме.
Если я правильно понимаю, то здесь идет пространство имен Ui, затем указтель на класс MainWindow... или нет?
0
20 / 20 / 2
Регистрация: 27.01.2014
Сообщений: 232
25.03.2014, 17:18
Указатель на класс? А что это?

Вы попробуйте добавить какое-нибудь поле в MainWindow. А потом обратиться к нему через ui->.
И в ui лежат элементы, которые добавляются через дизайнера.
0
20 / 20 / 9
Регистрация: 23.09.2013
Сообщений: 329
25.03.2014, 17:23  [ТС]
Указатель на класс? А что это?
Хорошо, переменная типа MainWindow*, это же можно сказать как указатель на объект типа MainWindow.

Получается, что через ui можно дальше обращаться к членам класса MainWindow, например в его конструкторе.
0
20 / 20 / 2
Регистрация: 27.01.2014
Сообщений: 232
25.03.2014, 17:25

Получается, что через ui можно дальше обращаться к членам класса MainWindow, например в его конструкторе.
Попробуйте же.
0
 Аватар для dmitre
10 / 10 / 3
Регистрация: 02.11.2013
Сообщений: 53
25.03.2014, 17:32
Цитата Сообщение от virtus Посмотреть сообщение
А каким препроцессором он потом будет обрабатываться? Или в qt creator один препроцессор?
Ну moc, дальше что?

Цитата Сообщение от edwvee Посмотреть сообщение
Вы попробуйте добавить какое-нибудь поле в MainWindow. А потом обратиться к нему через ui->.
И в ui лежат элементы, которые добавляются через дизайнера.
Ну ежу понятно, что если добавлять поля сразу в файле, то обращение через ui не потребуется
0
20 / 20 / 9
Регистрация: 23.09.2013
Сообщений: 329
25.03.2014, 17:32  [ТС]
Code
1
Попробуйте же.
В конструкторе обращаться можно, у меня визард создал .cpp, в котором:

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
C ui мне стало понятно. Спасибо.

А вот сама запись как работает не очень понимаю.

Не знает как этот конструктор работает?
0
20 / 20 / 2
Регистрация: 27.01.2014
Сообщений: 232
25.03.2014, 17:35
к самому ui и его некоторым методам да, а вы попробуйте в класс MainWindow добавить открытую переменную например int i;. А потом в конструкторе написать ui->i = 5; например
Ну moc, дальше что?
Есть же такая штука еще как uic. Которая как раз позволяет добавить в дизайнере на форму например QPushButton(пусть под именем qpb) и обращаться к ней в классе MainWindow, в данном случае, ui->qpb
0
20 / 20 / 9
Регистрация: 23.09.2013
Сообщений: 329
25.03.2014, 17:40  [ТС]
Code
1
Ну ежу понятно, что если добавлять поля сразу в файле, то обращение через ui не потребуется
Не очень понял, в каком файле?

Добавлено через 5 минут
к самому ui и его некоторым методам да, а вы попробуйте в класс MainWindow добавить открытую переменную например int i;. А потом в конструкторе написать ui->i = 5;
так обратиться не получается. Это да. Не просто ссылка на самого себя...
0
 Аватар для dmitre
10 / 10 / 3
Регистрация: 02.11.2013
Сообщений: 53
25.03.2014, 17:45
Цитата Сообщение от edwvee Посмотреть сообщение
к самому ui и его некоторым методам да, а вы попробуйте в класс MainWindow добавить открытую переменную например int i;. А потом в конструкторе написать ui->i = 5; например

Есть же такая штука еще как uic. Которая как раз позволяет добавить в дизайнере на форму например QPushButton(пусть под именем qpb) и обращаться к ней в классе MainWindow, в данном случае, ui->qpb
uic читает xml, который создан в креаторе.
O_OBJECT обрабатывается с помощью moc.
0
20 / 20 / 9
Регистрация: 23.09.2013
Сообщений: 329
25.03.2014, 17:46  [ТС]
Про Q_Object можно тут хорошо написано:

http://http://stackoverflow.co... ed-this-ma
0
 Аватар для dmitre
10 / 10 / 3
Регистрация: 02.11.2013
Сообщений: 53
25.03.2014, 17:48
Цитата Сообщение от virtus Посмотреть сообщение
Code
1
Ну ежу понятно, что если добавлять поля сразу в файле, то обращение через ui не потребуется
Не очень понял, в каком файле?

Добавлено через 5 минут
В файле класса-наследника QMainWindow, а не через дизайнер интерфейса
0
20 / 20 / 2
Регистрация: 27.01.2014
Сообщений: 232
25.03.2014, 17:49
Вот я тоже не совсем понимаю что означает эта запись с неймспейсом. Мои догадки:
1.Сам по себе код означает нэймспэйс ui c пустым классом c таким же именем как у рассматриваемого виджета.
Возможно это делается автоматом так, что все классы ui у всех виджетов были уникальны(то есть Ui::имя класса виджета, которое само по себе уникально).
2. ui предоставляет доступ к тому, что есть на форме в дизайнере. И еще у ui есть методы, которые нигде не были определены в коде. Видимо в этом вся суть.

Я прав?
И вопрос к знатокам: можно ли как-то добавлять в ui виджеты динамически? Я просто не совсем понимаю где было бы правильно в классе главного виджета динамически добавляемые виджеты.
0
 Аватар для dmitre
10 / 10 / 3
Регистрация: 02.11.2013
Сообщений: 53
25.03.2014, 17:53
Цитата Сообщение от edwvee Посмотреть сообщение
Вот я тоже не совсем понимаю что означает эта запись с неймспейсом. Мои догадки:
1.Сам по себе код означает нэймспэйс ui c пустым классом c таким же именем как у рассматриваемого виджета.
Возможно это делается автоматом так, что все классы ui у всех виджетов были уникальны(то есть Ui::имя класса виджета, которое само по себе уникально).
2. ui предоставляет доступ к тому, что есть на форме в дизайнере. И еще у ui есть методы, которые нигде не были определены в коде. Видимо в этом вся суть.

Я прав?
И вопрос к знатокам: можно ли как-то добавлять в ui виджеты динамически? Я просто не совсем понимаю где было бы правильно в классе главного виджета динамически добавляемые виджеты.
Можно, но нудно и долго.
Надо взять (или создать) layout формы и через layoutname->addWidget(qpb), где qpb - имя QPushButton/
Как-то так
1
20 / 20 / 2
Регистрация: 27.01.2014
Сообщений: 232
25.03.2014, 17:56
А, точно я ведь и забыл про то, что все равно лучше все в лэйаутах делать. Надо будет попробовать.

Вообще почитать бы где-нибудь про этот ui.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2014, 17:56
Помогаю со студенческими работами здесь

Что значит эта конструкция
Здравствуйте. return (h<0) ? (h + a) : h; Впервые вижу такую строку. Что на значит. Спасибо.

Что значит конструкция в документации Java
Всем привет. Подскажите, пожалуйста, что значит конструкция в документации: java.util Class HashMap<K,V> java.lang.Object...

QTcpServer выдвет ошибку при создании сервера в классе, наследуемого от QObjetc
tcpServer->listen(QHostAddress::Any, nPort) = false, почему? Тоже самое, внедренное в QWidget работает, т.е. пример из Шлее.М ...

Как при помощи указателя на базовый класс обратится к полю наследуемого класса?
Всем привет! столкнулся с такой проблемой. У меня есть массив указателей на базовый виртуальный класс,и например я присваиваю указателю на...

Что значит эта конструкция "<String>"?
Встретил код с угловыми скобками new Vector.&lt;String&gt;; и пришел в замешательство. Объясните пожалуйста, что значит, делает и где...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru