crossplatform.ru

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

> setindexwidget у QTableView, setindexwidget у QTableView
bikineev
  опции профиля:
сообщение 11.12.2011, 20:49
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 18.11.2011
Пользователь №: 3009

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




Репутация:   0  


Здравствуйте. Помещаю в QTableView с помощью setindexwidget кнопки, но когда начинаю редактировать какую-либо ячейку, кнопки исчезают. Как решить данную проблему.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
bikineev
  опции профиля:
сообщение 13.12.2011, 0:29
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 18.11.2011
Пользователь №: 3009

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




Репутация:   0  


Для того чтобы кнопки были видны всегда нужно переопределять метод paint? Каким образом можно сделать это?


Сейчас попробовал таким образом
class PushButtonDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    PushButtonDelegate(QWidget* pobj) : QItemDelegate(pobj), _state (QStyle::State_Enabled){}
    QWidget *createEditor(QWidget *parent,
                          const QStyleOptionViewItem &option,
                          const QModelIndex &index) const
    {
        return new QPushButton(parent);
    }
    void paint(QPainter *painter,
               const QStyleOptionViewItem &option,
               const QModelIndex &index) const
    {
        const QStandardItemModel* model =
                static_cast<const QStandardItemModel*>(index.model());
        QStandardItem* item = model->item(index.row());

        QString text = item->text();
        QRect rect = option.rect;

        QRect textRect( rect);
        textRect.setHeight( 30);
        painter->drawText(textRect,text);

        QRect buttonRect( rect);
        buttonRect.setY(textRect.y()+ 35);
        buttonRect.setHeight( 30);
        QStyleOptionButton button;
        button.rect = buttonRect;
        button.text = text;
        button.state = _state | QStyle::State_Enabled;

        QApplication::style()->drawControl
                (QStyle::CE_PushButton, &button, painter);
    }

    QSize sizeHint(const QStyleOptionViewItem &/*option*/,
                   const QModelIndex &/*index*/) const
    {
        //hard coding size for test purpose,
        //actual size hint can be calculated from option param
        return QSize(800,70);
    }
    bool editorEvent(QEvent *event,
                     QAbstractItemModel *model,
                     const QStyleOptionViewItem &option,
                     const QModelIndex &index)
    {
        if( event->type() == QEvent::MouseButtonPress ||
            event->type() == QEvent::MouseButtonRelease ) {
        } else {
            //ignoring other mouse event and reseting button's state
            _state = QStyle::State_Raised;
            return true;
        }

        QRect buttonRect( option.rect);
        buttonRect.setY(option.rect.y()+ 35);
        buttonRect.setHeight( 30);

        QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
        if( !buttonRect.contains( mouseEvent->pos()) ) {
            _state = QStyle::State_Raised;
            return true;
        }

        if( event->type() == QEvent::MouseButtonPress) {
            _state = QStyle::State_Sunken;
        } else if( event->type() == QEvent::MouseButtonRelease) {
            _state = QStyle::State_Raised;
            emit buttonClicked( index);
        }
        return true;
    }
signals:
    void buttonClicked(const QModelIndex &index);
private:
    QStyle::State  _state;

};

на этапе выполнения получаю SIGSEGV
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 23.11.2024, 15:30