Russian Qt Forum
Июнь 03, 2024, 18:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: получить доступ к свойствам не базового класса.  (Прочитано 6267 раз)
Жора
Гость
« : Июль 23, 2012, 15:49 »

ДОбрый день.

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


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

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

Спасибо. и извините за глупый вопрос.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июль 23, 2012, 15:54 »

EditWidget *widgetForm;
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Жора
Гость
« Ответ #2 : Июль 23, 2012, 15:57 »

Дело в том, что мне надо переменной widgetForm присваивать различные виджеты. и не хотелось бы для каждого виджета создавать сваю переменную.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Июль 23, 2012, 15:58 »

Дело в том, что мне надо переменной widgetForm присваивать различные виджеты. и не хотелось бы для каждого виджета создавать сваю переменную.

именно как ты хочешь - никак. Покажи код, тогда что-нибудь подскажут детальнее.
Записан
Жора
Гость
« Ответ #4 : Июль 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);
    }
Записан
mutineer
Гость
« Ответ #5 : Июль 23, 2012, 16:17 »

Код:
if(t == 1)
{
    EditWidget *edit = new EditWidget(this);
    Layout->addWidget(edit);

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

Тем же способом для остальных случаев
Записан
Жора
Гость
« Ответ #6 : Июль 23, 2012, 16:23 »

Спасибо большое.
Записан
mutineer
Гость
« Ответ #7 : Июль 23, 2012, 16:24 »

И прочитай про switch и другие особенности языка С++
Записан
Жора
Гость
« Ответ #8 : Июль 23, 2012, 16:33 »

А как можно произвести обратную операцию? То есть считать значения с формы?
Записан
mutineer
Гость
« Ответ #9 : Июль 23, 2012, 16:34 »

Из каких виджетов?
Записан
Жора
Гость
« Ответ #10 : Июль 23, 2012, 16:38 »

Сам уже придумал.

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

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

Спасибо, за помощь.
Записан
mutineer
Гость
« Ответ #11 : Июль 23, 2012, 16:42 »

Не надо использовать C-style cast. Что будет, если widgetForm указывает не на EditWidget, а на другой тип?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Июль 23, 2012, 16:42 »

qobject_cast <EditWidget*> (widgetForm)

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

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Жора
Гость
« Ответ #13 : Июль 23, 2012, 16:45 »

Какой подход не верен? Мой, Ваш, оба?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Июль 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 классы.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.082 секунд. Запросов: 22.