Классы форм и наледование ui |
Здравствуйте, гость ( Вход | Регистрация )
Классы форм и наледование ui |
Maksus |
8.5.2009, 23:16
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 14.4.2009 Пользователь №: 679 Спасибо сказали: 0 раз(а) Репутация: 0 |
Немогу понять как осуществляется доступ к элементам (виджетам) дочернего окна созданного с помощью Классов форм (именно классов, а не просто форм). Какой способ встраивания Ui и для каких случаев лучше выбрать aggregation, aggregation as pointer или multiple inheritance? В документации ничего нет про это, а в книгах более старые версии Qt тогда еще небыло QtCreator`а и готовых классов форм.
|
|
|
SABROG |
8.5.2009, 23:25
Сообщение
#2
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
именно классов, а не просто форм Что такое "просто форма" и что такое "класс формы"? Я знаю лишь, что любой виджет, даже созданный через дизайнер - является классом. А у любого класса есть поля со свойствами и дочерними элементами. Но что-то мне подсказывает, что затык с пониманием произошел из-за ui компилятора, который делает всю работу за кадром (это к теме о ui_*.h файлах). |
|
|
Kagami |
8.5.2009, 23:38
Сообщение
#3
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Применив телепатию, понял следующее. Вопрос заключается в том, какой подход лучше - описанный в книге Жасмин Бланшет:
Раскрывающийся текст
или подход, который предлагается QtCreater'ом при создании нового проекта: Раскрывающийся текст
|
|
|
Maksus |
8.5.2009, 23:55
Сообщение
#4
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 14.4.2009 Пользователь №: 679 Спасибо сказали: 0 раз(а) Репутация: 0 |
Применив телепатию, понял следующее. Вопрос заключается в том, какой подход лучше - описанный в книге Жасмин Бланшет: Раскрывающийся текст
или подход, который предлагается QtCreater'ом при создании нового проекта: Раскрывающийся текст
да, да, да плюс есть еще третий, как ваш второй, только ui создается статически. Речь не идет о новом проекте в Creator, там выбора нет, да и все елементы доступны через *ui. Попробуйте в чистый проект от Creator добавить форму класса (там есть такой выбор, и это не тоже самое, что просто форма). И тогда если нажмете more в мастере то увидите те самые варинты о которых выше написано. Собсно вопрос в том, какой вариант лучше и как же всетаки получить доступ к элементам этого новосозданного класс (с формой) и базового, основного (main). из базового, основного (main). |
|
|
defnull |
9.5.2009, 0:38
Сообщение
#5
|
Студент Группа: Участник Сообщений: 49 Регистрация: 1.5.2008 Пользователь №: 165 Спасибо сказали: 0 раз(а) Репутация: 1 |
На мой взгляд лучше всего наследование.. тоесть:
class MainWindow : public QMainWindow, public Ui::MainWindow { ... }; в конструкторе потом просто setup(this) и в принципе всё... через this обращаться к любому элементу UI-шки... ну по крайней мере мне так удобнее=) |
|
|
Maksus |
9.5.2009, 1:47
Сообщение
#6
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 14.4.2009 Пользователь №: 679 Спасибо сказали: 0 раз(а) Репутация: 0 |
На мой взгляд лучше всего наследование.. тоесть: class MainWindow : public QMainWindow, public Ui::MainWindow { ... }; в конструкторе потом просто setup(this) и в принципе всё... через this обращаться к любому элементу UI-шки... ну по крайней мере мне так удобнее=) Да но обратиться к элементам экземпляра такого класса извне неудается, даже когда идет public наследование по обоим предкам (Creator формирует наследование public QWidget, private Ui::Form |
|
|
Kagami |
9.5.2009, 8:23
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 601 Регистрация: 2.2.2009 Пользователь №: 523 Спасибо сказали: 101 раз(а) Репутация: 9 |
Ну с одной стороны это правильно - реализуется принцип инкапсуляции. Если нужен доступ - либо пишем соответствующий метод, либо через сигналы/слоты. Необходимость что-то менять извне формы возникает очень редко и легко решается этими двумя способами.
|
|
|
SABROG |
9.5.2009, 10:11
Сообщение
#8
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
У варианта "с указателем" есть плюс - можно отложить на время создание дочерних элементов, но при этом пользоваться сигналами и слотами.
Скажем вывести диалог авторизации и при правильном ответе начать формировать главную форму. Сообщение отредактировал SABROG - 9.5.2009, 10:14 |
|
|
Maksus |
9.5.2009, 13:07
Сообщение
#9
|
Студент Группа: Новичок Сообщений: 18 Регистрация: 14.4.2009 Пользователь №: 679 Спасибо сказали: 0 раз(а) Репутация: 0 |
У варианта "с указателем" есть плюс - можно отложить на время создание дочерних элементов, но при этом пользоваться сигналами и слотами. Скажем вывести диалог авторизации и при правильном ответе начать формировать главную форму. Спасибо! Какие еще есть плюсы и минусы разных методов? |
|
|
Текстовая версия | Сейчас: 25.4.2024, 20:23 |