Название: QTableView досрочно обрезает строки многострочного текста в ячейках Отправлено: Sasha от Июль 14, 2015, 14:33 Здравствуйте,
Есть ячейка таблицы допустим с текстом "qqqwww rrr\nzzz" Если по ширине в ячейке не вмещается первая строка "qqqwww rrr", то она обрезается (+ в конце рисуется троеточие). И, самое главное, что вторая строчка "zzz" тоже не рисуется. Как с этим бороться? Я выяснил что: 1) если задать в ячейке стиль wrap, то всё нормально рисуется до упора, т.е. до самого низа, и только там обрезается. Но недостаток в том, что не всегда хорошо, когда 1 строчка разделяется на несколько строк. К тому же, если слово в первой строчке тоже не вмещается, то возникает та же проблемма с досрочным обрезанием. Как следствие неудаётся запретить переносы слов, заменив все пробелы на неблокированные пробелы. 2) если пойти в недры qt, то там будет цикл по строчкам, в котором, при первом же обрезании стоит break. 3) если в делегате разделить текст построчно на N строк и потом вызвать рисование ячейки N раз каждый раз давая на вход текст в котором все строки кроме i-ой пустые (для примера выше, на 1-ой итерации будет "qqqwww rrr\n", на второй "\nzzz"), то почти хорошо, кроме того, что по вертикали строки слипаются, т.к. кроме обрезания происходит ещё и центровка необрезанного текста. Как ещё можно обойти эту особенность? И вообще досрочное обрезание - это глюк или Название: Re: QTableView досрочно обрезает строки многострочного текста в ячейках Отправлено: Igors от Июль 14, 2015, 15:47 Схожие проблемы в QListWidget решал своим делегатом, используя QTextLayout (там есть пример как рисовать многострочный QLabel). Нужно учесть (в перекрытом sizeHint) что если строка слишком длинная, то обрезать ее придется (напр 5 строк максимум)
Название: Re: QTableView досрочно обрезает строки многострочного текста в ячейках Отправлено: Sasha от Июль 14, 2015, 17:15 Схожие проблемы в QListWidget решал своим делегатом, используя QTextLayout (там есть пример как рисовать многострочный QLabel). В недрах Qt, кстати, они через QTextLayout и рисуют в конечном итоге, но не хотелось сильно отдаляться от стандартного рисования ячейки. Нужно учесть (в перекрытом sizeHint) что если строка слишком длинная, то обрезать ее придется (напр 5 строк максимум) Это я не понял. Почему нужно обрезать?Название: Re: QTableView досрочно обрезает строки многострочного текста в ячейках Отправлено: Igors от Июль 15, 2015, 08:43 В недрах Qt, кстати, они через QTextLayout и рисуют в конечном итоге, но не хотелось сильно отдаляться от стандартного рисования ячейки. К сожалению, рисуют не так как (мне) нужно. Конечно лучше было бы добиться того же нужными опциями/флагами, но я такой возможности не нашелЭто я не понял. Почему нужно обрезать? Ну вот в айтем QListWidget попал текст аж страница. Если ничего не делать, выходит громадная ячейка с wrap. Как там с таблицей - смотрите по обстановке Название: Re: QTableView досрочно обрезает строки многострочного текста в ячейках Отправлено: Sasha от Июль 15, 2015, 16:07 Это я не понял. Почему нужно обрезать? Ну вот в айтем QListWidget попал текст аж страница. Если ничего не делать, выходит громадная ячейка с wrap. Как там с таблицей - смотрите по обстановке Название: Re: QTableView досрочно обрезает строки многострочного текста в ячейках Отправлено: Sasha от Июль 15, 2015, 17:55 В общем сделал так, как не хотел делать с самого начала - предварительно подготовил строку:
Код Но это может однажды перестать правильно работать |