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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Delegate в QTableView  (Прочитано 10202 раз)
qtист
Гость
« : Сентябрь 01, 2009, 16:15 »

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

Надо чтоб QTextEdit появился сразу - редектироваться ячейка не будет,там просто
будет печататься текст.
Как это побороть Плачущий
Записан
Rcus
Гость
« Ответ #1 : Сентябрь 01, 2009, 16:45 »

openPersistentEditor/setIndexWidget/whatever
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Сентябрь 01, 2009, 16:46 »

Нужно переопределить paintEvent у делегата. Поищи по форуму, уже не раз все разжевывалось.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qtист
Гость
« Ответ #3 : Сентябрь 02, 2009, 10:46 »

Я дико извиняюсь,но чё-то не смог найти Плачущий.
А можно ещё раз разжевать и выплюнуть? Рот на замке
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Сентябрь 02, 2009, 11:39 »

Допустим, http://www.prog.org.ru/topic_7848_0.html
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
qtист
Гость
« Ответ #5 : Сентябрь 03, 2009, 16:10 »

Получилось через openPersistentEditor Строит глазки

Вдогонку сопутствующий вопрос:
вывожу в QTextEdit некоторый блок информации - блок показывается с начала,
как сделать,чтоб была видна сразу последняя строка(типа был сделан автоматически скроллинг)?
Записан
spectre71
Гость
« Ответ #6 : Сентябрь 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);
...
...
}



 

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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