Russian Qt Forum
Ноябрь 25, 2024, 02:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Доступ к элементам страницы стэка виджета  (Прочитано 5052 раз)
QKrot
Гость
« : Апрель 23, 2010, 20:38 »

Простой код выдаёт простую ошибку
Код
C++ (Qt)
mrScaleWidget* sw = mw.stackedWidget->widget(0);
qDebug() << sw->menuLabel->text();
error: invalid conversion from 'QWidget*' to 'mrScaleWidget*'

При такой конструкции программа при компиляции сразу вылетает
Код
C++ (Qt)
mrScaleWidget* sw = (mrScaleWidget *)mw.stackedWidget->widget(0);
qDebug() << sw->menuLabel->text();

Так вообще правомерно обращаться к атрибутам виджета стэка ? menuLabel -public атрибут. Всё вроде нормально.
Записан
alexman
Гость
« Ответ #1 : Апрель 23, 2010, 20:42 »

Вы уверены, что по индексу 0 лежит mrScaleWidget*?
Записан
QKrot
Гость
« Ответ #2 : Апрель 23, 2010, 20:56 »

Виджет класса mrScaleWidget я поместил на самую первую страницу стэка. Он унаследован от QWidget. Поэтому я ожидаю, что mw.stackedWidget->widget(0) вернет QWidget-указатель, указывающий на mrScaleWidget как производный класс.
Записан
alexman
Гость
« Ответ #3 : Апрель 23, 2010, 20:59 »

Эту функцию использовали int QStackedWidget::addWidget ( QWidget * widget )? Что вернула функция?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #4 : Апрель 23, 2010, 21:02 »

а) не юзайте сишый каст
б) для наследников куобжект юзайте qobject_cast
в) напечатайте имя класса/его тип через метаинформацию (если дебаггер не юзаете)
Записан
sendevent
Гость
« Ответ #5 : Апрель 23, 2010, 21:05 »

mrScaleWidget* sw = (mrScaleWidget *)mw.stackedWidget->widget(0);
static|qobject_cast прожевывает?
хедер с mrScaleWidget подключен явно?
Записан
alexman
Гость
« Ответ #6 : Апрель 23, 2010, 21:21 »

а) не юзайте сишый каст
А в чем проблема?
Записан
QKrot
Гость
« Ответ #7 : Апрель 23, 2010, 21:40 »

Очевидно я новичок  Улыбающийся .
Такой код работает правильно
Код
C++ (Qt)
mrScaleWidget* sw = mw.widget;
qDebug() << sw->menuLabel->text();
widget - имя, которое назначил Designer экземпляру mrScaleWidget.
Однако я не понял, почему на странице стэка разместился объект page типа QWidget, а ниже по иерархии widget класса mrScaleWidget. По идеи page должен быть типа mrScaleWidget. Видимо это результат преобразования QWidget к пользовательскому классу mrScaleWidget.
Записан
sendevent
Гость
« Ответ #8 : Апрель 23, 2010, 21:45 »

а) не юзайте сишый каст
А в чем проблема?

сишное приведение сначала все равно попытается использовать static_cast, если не получится - молча сделает reinterpret_cast, да и дело с концом. хотя если не статик_скастилось - стоит задуматься, что хочешь получить и что для этого делаешь.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #9 : Апрель 23, 2010, 23:58 »

уишку выложи
по-моему у тебя там лайаут лишний
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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