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

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

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

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

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

Код
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
protected:
    void virtual paintEvent(QPaintEvent*);

private:
    Ui::MainWindow *ui;

};
Что здесь значат записи:
Код
private:
    Ui::MainWindow *ui;
и

Код
Q_OBJECT
?

Спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
25.03.2014, 16:59
Ответы с готовыми решениями:

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено через 5 минут
к самому ui и его некоторым методам да, а вы попробуйте в класс MainWindow добавить открытую переменную например int i;. А потом в конструкторе написать ui->i = 5;
так обратиться не получается. Это да. Не просто ссылка на самого себя...
0
10 / 10 / 3
Регистрация: 02.11.2013
Сообщений: 53
25.03.2014, 17:45 12
Цитата Сообщение от 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  [ТС] 13
Про Q_Object можно тут хорошо написано:

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

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

Я прав?
И вопрос к знатокам: можно ли как-то добавлять в ui виджеты динамически? Я просто не совсем понимаю где было бы правильно в классе главного виджета динамически добавляемые виджеты.
0
10 / 10 / 3
Регистрация: 02.11.2013
Сообщений: 53
25.03.2014, 17:53 16
Цитата Сообщение от 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 17
А, точно я ведь и забыл про то, что все равно лучше все в лэйаутах делать. Надо будет попробовать.

Вообще почитать бы где-нибудь про этот ui.
0
25.03.2014, 17:56
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
25.03.2014, 17:56
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru