Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Жора от Июль 23, 2012, 15:49



Название: получить доступ к свойствам не базового класса.
Отправлено: Жора от Июль 23, 2012, 15:49
ДОбрый день.

QWidget* widgetForm;
widgetForm = new EditWidget(this);


EditWidget-наследник QWidget;

Как получить доступ к свойствам и методам EditWidget.
когда пишу widgetForm-> паолучаю доступ только к свойствам и методам QWidget.

Спасибо. и извините за глупый вопрос.


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Пантер от Июль 23, 2012, 15:54
EditWidget *widgetForm;


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Жора от Июль 23, 2012, 15:57
Дело в том, что мне надо переменной widgetForm присваивать различные виджеты. и не хотелось бы для каждого виджета создавать сваю переменную.


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Alex Custov от Июль 23, 2012, 15:58
Дело в том, что мне надо переменной widgetForm присваивать различные виджеты. и не хотелось бы для каждого виджета создавать сваю переменную.

именно как ты хочешь - никак. Покажи код, тогда что-нибудь подскажут детальнее.


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Жора от Июль 23, 2012, 16:11
Да тут и кода собственно говоря особо и нету.
*.h
Код:
class EditWidget: public QWidget, public Ui::EditWidget
{
    Q_OBJECT
public: QWidget* widgetForm;
...
}


*.cpp
Код:


if(t == 1)
    {
       widgetForm = new EditWidget(this);
       Layout->addWidget(widgetForm);
       
       // Здесь хочу записать значение в Edit на форме EditWidget
       // но не знаю как получить доступ к элементам EditWidget       
    }
    else if(t == 2)
    {
        widgetForm = new EditWidget2(this);
        Layout->addWidget(widgetForm);
    }


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: mutineer от Июль 23, 2012, 16:17
Код:
if(t == 1)
{
    EditWidget *edit = new EditWidget(this);
    Layout->addWidget(edit);

    //Тут делаешь с edit что тебе надо
   
    widgetForm = edit;
}

Тем же способом для остальных случаев


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Жора от Июль 23, 2012, 16:23
Спасибо большое.


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: mutineer от Июль 23, 2012, 16:24
И прочитай про switch и другие особенности языка С++


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Жора от Июль 23, 2012, 16:33
А как можно произвести обратную операцию? То есть считать значения с формы?


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: mutineer от Июль 23, 2012, 16:34
Из каких виджетов?


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Жора от Июль 23, 2012, 16:38
Сам уже придумал.

EditWidget* tempWidget;
tempWidget = (EditWidget*)widgetForm;

Так же можно делать?

Спасибо, за помощь.


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: mutineer от Июль 23, 2012, 16:42
Не надо использовать C-style cast. Что будет, если widgetForm указывает не на EditWidget, а на другой тип?


Название: Re: получить доступ к свойствам не базового к
Отправлено: Пантер от Июль 23, 2012, 16:42
qobject_cast <EditWidget*> (widgetForm)

Учи с++. Такой подход неверен.


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Жора от Июль 23, 2012, 16:45
Какой подход не верен? Мой, Ваш, оба?


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Igors от Июль 23, 2012, 16:47
Сам уже придумал.

EditWidget* tempWidget;
tempWidget = (EditWidget*)widgetForm;

Так же можно делать?
Можно, но это (дружно) осуждается. В С++ принято делать с контролем
Код
C++ (Qt)
tempWidget = dynamic_cast <EditWidget*> (widgetForm);
 
А в Qt своя мода
Код
C++ (Qt)
tempWidget = qobject_cast <EditWidget*> (widgetForm);
 
Вообще, Жора, если опыта в языке маловато, лучше не лезть в многочисленные Qt классы.


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Пантер от Июль 23, 2012, 16:47
Подход, при котором приходится что-то во что-то кастить.


Название: Re: получить доступ к свойствам не базового класса.
Отправлено: Жора от Июль 23, 2012, 16:53
Спасибо. Будем набираться опыта.