Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: qtист от Сентябрь 01, 2009, 16:15



Название: Delegate в QTableView
Отправлено: qtист от Сентябрь 01, 2009, 16:15
Создал QTableView - в одном из столбце должен быть QTextEdit(без редактирования)
Делаю через
ui.tableView->setItemDelegateForColumn(1,new ItemDelegatePing(this));
Но он появляется,если пытаюсь редактировать эту ячейку.

Надо чтоб QTextEdit появился сразу - редектироваться ячейка не будет,там просто
будет печататься текст.
Как это побороть :'(


Название: Re: Delegate в QTableView
Отправлено: Rcus от Сентябрь 01, 2009, 16:45
openPersistentEditor/setIndexWidget/whatever


Название: Re: Delegate в QTableView
Отправлено: Пантер от Сентябрь 01, 2009, 16:46
Нужно переопределить paintEvent у делегата. Поищи по форуму, уже не раз все разжевывалось.


Название: Re: Delegate в QTableView
Отправлено: qtист от Сентябрь 02, 2009, 10:46
Я дико извиняюсь,но чё-то не смог найти :'(.
А можно ещё раз разжевать и выплюнуть? :-X


Название: Re: Delegate в QTableView
Отправлено: Пантер от Сентябрь 02, 2009, 11:39
Допустим, http://www.prog.org.ru/topic_7848_0.html


Название: Re: Delegate в QTableView
Отправлено: qtист от Сентябрь 03, 2009, 16:10
Получилось через openPersistentEditor ::)

Вдогонку сопутствующий вопрос:
вывожу в QTextEdit некоторый блок информации - блок показывается с начала,
как сделать,чтоб была видна сразу последняя строка(типа был сделан автоматически скроллинг)?


Название: Re: Delegate в QTableView
Отправлено: spectre71 от Сентябрь 03, 2009, 19:27
Создал QTableView - в одном из столбце должен быть QTextEdit(без редактирования)
Делаю через
ui.tableView->setItemDelegateForColumn(1,new ItemDelegatePing(this));
Но он появляется,если пытаюсь редактировать эту ячейку.

Надо чтоб QTextEdit появился сразу - редектироваться ячейка не будет,там просто
будет печататься текст.
Как это побороть :'(


1) Зачем нужен QTextEdit(без редактирования)??
2) Может проще нарисовать рамочку?(или что-то типа того)
3) Делаем свой делегат и переопределяем
virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index )
4) Если требуется отрисовка именно QTextEdit, да еще в текущем стиле, похоже(не полностью уверен) нужно рисовать фрейм:

Код
C++ (Qt)
 
class TMyDelegate : public QStyledItemDelegate
{
   Q_OBJECT
public:
 TMyDelegate (TAbstractItemModel* Model, QObject *parent = 0);
 virtual ~TMyDelegate ();
 
 virtual void paint(QPainter* painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
};
 
...
...
...
 
void TMyDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
 
 if (index.column != 1) {
   QStyledItemDelegate::paint(painter, option, index);
   return;
 }
...
...
 QStyle* style = QApplication::style();    
 QStyleOptionViewItemV4 opt = option;
 initStyleOption(&opt, index);
...
...
 style->drawControl(QStyle::CE_ShapedFrame, option, painter);
...
...
}