crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Классы форм и наледование ui
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Maksus Дата 9.5.2009, 13:07
 
Цитата(SABROG @ 9.5.2009, 10:11) *
У варианта "с указателем" есть плюс - можно отложить на время создание дочерних элементов, но при этом пользоваться сигналами и слотами.
Скажем вывести диалог авторизации и при правильном ответе начать формировать главную форму.

Спасибо! Какие еще есть плюсы и минусы разных методов?
SABROG Дата 9.5.2009, 10:11
  У варианта "с указателем" есть плюс - можно отложить на время создание дочерних элементов, но при этом пользоваться сигналами и слотами.
Скажем вывести диалог авторизации и при правильном ответе начать формировать главную форму.
Kagami Дата 9.5.2009, 8:23
  Ну с одной стороны это правильно - реализуется принцип инкапсуляции. Если нужен доступ - либо пишем соответствующий метод, либо через сигналы/слоты. Необходимость что-то менять извне формы возникает очень редко и легко решается этими двумя способами.
Maksus Дата 9.5.2009, 1:47
 
Цитата(defnull @ 9.5.2009, 0:38) *
На мой взгляд лучше всего наследование.. тоесть:

class MainWindow : public QMainWindow, public Ui::MainWindow
{
...
};

в конструкторе потом просто setup(this) и в принципе всё... через this обращаться к любому элементу UI-шки... ну по крайней мере мне так удобнее=)

Да но обратиться к элементам экземпляра такого класса извне неудается, даже когда идет public наследование по обоим предкам (Creator формирует наследование public QWidget, private Ui::Form
defnull Дата 9.5.2009, 0:38
  На мой взгляд лучше всего наследование.. тоесть:

class MainWindow : public QMainWindow, public Ui::MainWindow
{
...
};

в конструкторе потом просто setup(this) и в принципе всё... через this обращаться к любому элементу UI-шки... ну по крайней мере мне так удобнее=)
Maksus Дата 8.5.2009, 23:55
 
Цитата(Kagami @ 8.5.2009, 23:38) *
Применив телепатию, понял следующее. Вопрос заключается в том, какой подход лучше - описанный в книге Жасмин Бланшет:
Раскрывающийся текст
#include "ui_newdlg.h"
class NewDlg : public QDialog, public Ui::NewDlg
{
...
};

или подход, который предлагается QtCreater'ом при создании нового проекта:
Раскрывающийся текст
#include "ui_mainwindow.h"
class MainWindow : public QMainWindow
{
...
private:
    Ui::MainWindow *ui;
};

да, да, да :) плюс есть еще третий, как ваш второй, только ui создается статически.

Речь не идет о новом проекте в Creator, там выбора нет, да и все елементы доступны через *ui.

Попробуйте в чистый проект от Creator добавить форму класса (там есть такой выбор, и это не тоже самое, что просто форма). И тогда если нажмете more в мастере то увидите те самые варинты о которых выше написано. Собсно вопрос в том, какой вариант лучше и как же всетаки получить доступ к элементам этого новосозданного класс (с формой) и базового, основного (main).

из базового, основного (main).
Kagami Дата 8.5.2009, 23:38
  Применив телепатию, понял следующее. Вопрос заключается в том, какой подход лучше - описанный в книге Жасмин Бланшет:
Раскрывающийся текст
#include "ui_newdlg.h"
class NewDlg : public QDialog, public Ui::NewDlg
{
...
};

или подход, который предлагается QtCreater'ом при создании нового проекта:
Раскрывающийся текст
#include "ui_mainwindow.h"
class MainWindow : public QMainWindow
{
...
private:
    Ui::MainWindow *ui;
};
SABROG Дата 8.5.2009, 23:25
 
Цитата(Maksus @ 9.5.2009, 0:16) *
именно классов, а не просто форм


Что такое "просто форма" и что такое "класс формы"?

Я знаю лишь, что любой виджет, даже созданный через дизайнер - является классом. А у любого класса есть поля со свойствами и дочерними элементами. Но что-то мне подсказывает, что затык с пониманием произошел из-за ui компилятора, который делает всю работу за кадром (это к теме о ui_*.h файлах).
Maksus Дата 8.5.2009, 23:16
  Немогу понять как осуществляется доступ к элементам (виджетам) дочернего окна созданного с помощью Классов форм (именно классов, а не просто форм). Какой способ встраивания Ui и для каких случаев лучше выбрать aggregation, aggregation as pointer или multiple inheritance? В документации ничего нет про это, а в книгах более старые версии Qt тогда еще небыло QtCreator`а и готовых классов форм.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 1:14