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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: static_cast  (Прочитано 2529 раз)
makar182
Гость
« : Август 23, 2014, 18:51 »

И снова здравствуйте Улыбающийся Давно назревал данный вопрос по приведению типов. В теории понятно, а на практике...

При написании делегата, в setEditorData( ) я делаю приведение типа для QWidget *editor, полученного от createEditor( ). Вопрос вот в чем - зачем приводить объект класса QSpinBox к классу QSpinBox?

Код:
QWidget *delegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QSpinBox *editor = new QSpinBox(parent);
    editor->setMinimum(0);
    editor->setMaximum(100);
    return editor;
}

void delegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    int value = index.model()->data(index, Qt::EditRole).toInt();
    QSpinBox *spinBox = static_cast<QSpinBox*>(editor);
    spinBox->setValue(value);
}
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Август 23, 2014, 18:58 »

потому что метод setEditorData имеет параметром QWidget (т.е. абсолютно любой виджет). нельзя же написать editor->setValue(value);
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
makar182
Гость
« Ответ #2 : Август 23, 2014, 19:10 »

потому что метод setEditorData имеет параметром QWidget (т.е. абсолютно любой виджет). нельзя же написать editor->setValue(value);

А почему мы не используем dynamic_cast? Я так понимаю, потому, что мы работаем в данном примере только с QSpinBox, потому нет необходимости?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Август 23, 2014, 19:24 »

А почему мы не используем dynamic_cast? Я так понимаю, потому, что мы работаем в данном примере только с QSpinBox, потому нет необходимости?
Да.
В setEditorData передается виджет создаваемый в createEditor, а т.к. там создается только объект QSpinBox, то нет смысла проверять.
Записан
makar182
Гость
« Ответ #4 : Август 23, 2014, 19:49 »

Спасибо за помощь господа!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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