|
|
|
JohanMT |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 12.2.2016 Репутация: нет Всего: нет |
Привет всем! Появилась некоторая проблема со вставкой кнопки.
Есть колонка с n-количеством строк. В каждую ячейку этой колонки необходимо вставить кнопку,которая будет отвечать за удаление строки в таблице, но при этом что бы ячейка была редактируемая. Кнопка должна располагаться с правой стороны ячейки (AlignRight), а текст должен располагаться по центру (AlignCenter). setCellWidget не то делает естественно. Думал о нескольких решениях проблемы, но не на одну как-то не нашел решения: 1. Создать 4-ую колонку, где будут располагаться эти кнопки в строках. И убрать левую границу ячейки 2. Создать делегат, в который вставить компоновщик, в котором содержаться QLineEdit и QPushButton Либо если есть предложения, то с удовольствием бы выслушал =) И от примеров бы не отказался. |
|||
|
||||
reider |
|
|||
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 18.11.2013 Репутация: нет Всего: нет |
тут делегат нужно использовать однозначно
|
|||
|
||||
JohanMT |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 12.2.2016 Репутация: нет Всего: нет |
А можешь тогда подсказать какую хотя бы функцию переопределять. Как его вообще реализовать. Псевдо-код может какой нибудь накидать, потому как сколько не пытался реализовать делегат для этих ячеек, что то ничего путного не выходило
|
|||
|
||||
reider |
|
|||
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 18.11.2013 Репутация: нет Всего: нет |
||||
|
||||
JohanMT |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 12.2.2016 Репутация: нет Всего: нет |
reider, мне кажется что это не совсем то.
createEditor - создает виджет для редактирования setEditorData - устанавливает значение в виджет для редактирования setModelData - передает в модель то что записали в редакторе Тут делегат для отображении редактора ячейки. Мне редактор обычный подойдет, мне само отображение в ячейке изменить нужно |
|||
|
||||
math64 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Нужно изменить отображение ячейки - void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) и обработку клика мыши по ячейке. Такого метода у делегата нет, нужно делать через eventFilter()
Добавлено через 8 минут и 49 секунд Можно использовать CheckStateRole - если не используется. При установке флажка строка удаляется. Внешний вид флажка можно поменять. |
|||
|
||||
JohanMT |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 12.2.2016 Репутация: нет Всего: нет |
math64, да, я уже тут догадался переопределять paint. Стиль он зараза стандартный использует...как мне его заставить мой stylesheet использовать? Вот так переопределил:
Это сообщение отредактировал(а) JohanMT - 16.2.2016, 18:46 |
|||
|
||||
Amp |
|
|||
Опытный Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
Что у тебя в стилях прописано? Если стили именно для QPushButton (например "QPushButton {background-color: pink}"), то drawControl их проигнорирует, т.к. делегат имеет другой тип. В такой ситуации можно попробовать скопировать стили кнопки в стиль для конкретного item-а у QTableWidget. Например сделать это через псевдоселекторы ::item или через селекторы по какому-нибудь специально выставленному через setProperty атрибуту. Пробовал с помощью styleObject = new QPushButton() в QStyleOption как-то повлиять на QStyleSheetStyle::drawControl, но не вышло. |
|||
|
||||
JohanMT |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 12.2.2016 Репутация: нет Всего: нет |
Что-то не выходит у меня. Вот так?
Это я в дизайнере конкретной таблице прописываю. В итоге меняется все item-ы, а кнопка как была серой, так и осталась |
||||
|
|||||
Amp |
|
||||||
Опытный Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 7 Всего: 17 |
Добрался до отладчика, проверил варианты и просто стилями решить не вышло. Вышло костылями через styleObject.
1. Нужна фейковая невидимая кнопка QPushButton. Я ее создал один раз примерно в том же месте, где и делегат. В качества родителя у кнопки указал tablewidget, а в качестве родительского объекта у делегата - кнопку:
2. Далее, в paintEvent делегата, сделал следующие вещи:
В стилях как обычно:
|
||||||
|
|||||||
JohanMT |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 12.2.2016 Репутация: нет Всего: нет |
Amp, Спасибо! Получилось наконец-то. Без костылей че то мне кажется тут никак... уже все перебровал
Это сообщение отредактировал(а) JohanMT - 18.2.2016, 18:27 |
|||
|
||||
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |