Russian Qt Forum

Qt => Вопросы новичков => Тема начата: makar182 от Август 23, 2014, 18:51



Название: static_cast
Отправлено: 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);
}


Название: Re: static_cast
Отправлено: kambala от Август 23, 2014, 18:58
потому что метод setEditorData имеет параметром QWidget (т.е. абсолютно любой виджет). нельзя же написать editor->setValue(value);


Название: Re: static_cast
Отправлено: makar182 от Август 23, 2014, 19:10
потому что метод setEditorData имеет параметром QWidget (т.е. абсолютно любой виджет). нельзя же написать editor->setValue(value);

А почему мы не используем dynamic_cast? Я так понимаю, потому, что мы работаем в данном примере только с QSpinBox, потому нет необходимости?


Название: Re: static_cast
Отправлено: Old от Август 23, 2014, 19:24
А почему мы не используем dynamic_cast? Я так понимаю, потому, что мы работаем в данном примере только с QSpinBox, потому нет необходимости?
Да.
В setEditorData передается виджет создаваемый в createEditor, а т.к. там создается только объект QSpinBox, то нет смысла проверять.


Название: Re: static_cast
Отправлено: makar182 от Август 23, 2014, 19:49
Спасибо за помощь господа!