crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Ошибка invalid conversion from `QWidget*' to `QComboBox*'
kvak
  опции профиля:
сообщение 16.9.2010, 11:47
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 51
Регистрация: 5.5.2010
Пользователь №: 1690

Спасибо сказали: 1 раз(а)




Репутация:   0  


Имеется:
QComboBox *oe_units;
*PM - объекта собственного класса
*TABLE_ELITE - таблица QTableWidget, которая является данным класса, который представляет объект PM

Не рабоатает вот такая нструкция:
oe_units = PM->TABLE_ELITE->cellWidget(e, f);

Код ошибки:
code\order.cpp:104: error: invalid conversion from `QWidget*' to `QComboBox*'

Задача получить через функцию cellWidget, выполненную для таблицы, которая принадлежит классу,
представленному объектом PM, указатель на тот самый виджет. К этому времени в этой ячейке с адресом
(e, f) находится виджет QComboBox.
Так как функция cellWidget возвращает указатель полученного виджета, то по идее мой указатель oe_units
должен после выполнения инструкции указывать на тот самый виджет. Сам виджет QComboBox не приватный.

В чем тут может быть ошибка ? Правильная ли сама инструкция ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 16.9.2010, 11:50
Сообщение #2


фрилансер
******

Группа: Участник
Сообщений: 2886
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


приведи тип указателя (на свой страх и риск - следи, чтобы там был указатель именно на комбу)
oe_units = (QComboBox*)PM->TABLE_ELITE->cellWidget(e, f);


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
molchanoviv
  опции профиля:
сообщение 16.9.2010, 11:52
Сообщение #3


Старейший участник
****

Группа: Сомодератор
Сообщений: 597
Регистрация: 18.7.2008
Из: Саратов
Пользователь №: 238

Спасибо сказали: 41 раз(а)




Репутация:   5  


проверь не стоит ли у тебя в oe_units = new QComboBox вместо QComboBox QWidget?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 16.9.2010, 11:55
Сообщение #4


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


oe_units = qobject_cast<QComboBox*>(PM->TABLE_ELITE->cellWidget(e, f));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.9.2010, 12:24
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Алексей1153 @ 16.9.2010, 12:50) *
oe_units = (QComboBox*)PM->TABLE_ELITE->cellWidget(e, f);

извини, позанудствую. )
такое приведение типов не только в Qt не рекомендовано - даже в С++ не рекомендуют.
*. не наглядно и трудночитаемое приведение
*. ты не знаешь какой _cast за ни прячется.
*. что будет в случае неудачного приведения? - страх и риск?
*. ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 16.9.2010, 12:49
Сообщение #6


фрилансер
******

Группа: Участник
Сообщений: 2886
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(kwisp @ 16.9.2010, 15:24) *
*. не наглядно и трудночитаемое приведение
*. ты не знаешь какой _cast за ни прячется.
*. что будет в случае неудачного приведения? - страх и риск?
*. ...

всё - чушь (ИМХО). Во-первых, гораздо нагляднее, чем синтаксис каста. А потом, я всегда знаю, что у меня в МОЕЙ программе где делается :) Вот с чужими модулями, тут я согласен, неплохо прокастовать и проверить на ноль. Но это тоже когда-нибудь не спасёт :D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.9.2010, 13:43
Сообщение #7


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Алексей1153 @ 16.9.2010, 13:49) *
всё - чушь (ИМХО).

тогда молчу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 16.9.2010, 14:09
Сообщение #8


фрилансер
******

Группа: Участник
Сообщений: 2886
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

Спасибо сказали: 215 раз(а)




Репутация:   34  


Цитата(kwisp @ 16.9.2010, 16:43) *
тогда молчу.

дык, зачем молчать, я могу быть и не прав :) Доводы я бы послушал
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.9.2010, 14:45
Сообщение #9


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Алексей1153 @ 16.9.2010, 15:09) *
я могу быть и не прав

доказать тебе это, все равно что заставить меня сейчас приводить доводы ;)
так что проехали ...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.9.2010, 14:48
Сообщение #10


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kwisp @ 16.9.2010, 16:24) *
даже в С++ не рекомендуют
kwisp прав, вот стиль описанный в Си++:
char ch = 0x01;
int = int(ch);
т.е. приведение типа через конструктор типа, вместо Сишного:
char ch = 0x01;
int = (int)ch;


Ну и cast_* само собой
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V   1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 20.9.2019, 0:23