QRect относительно главного окна |
Здравствуйте, гость ( Вход | Регистрация )
QRect относительно главного окна |
512es |
25.3.2011, 3:37
Сообщение
#1
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Имеется окно, в нём виджет.
В виджете ещё один виджет (делегат). Имеется QRect этого делегата, но все его координаты относительно виджета. Вопрос: Как получить QRect делегата по отношению к главному окну?? |
|
|
Алексей1153 |
25.3.2011, 9:10
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
можно использовать функцию QWidget::
для получения нужной точки верхнего левого угла: виджет->mapTo(главное_окно, угол_прямоугольника_в_координатах_виджета) , а затем выполнить QRect::moveTo() Сообщение отредактировал Алексей1153 - 25.3.2011, 9:11 |
|
|
512es |
25.3.2011, 14:57
Сообщение
#3
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Спасибо. Но всё равно немного не понятно..
Запутался я чего то..
То есть чтобы получить правильные координаты мне надо сделать: parent->mapTo(mainWnd,option.rect.topLeft()); Где parent это тот самый parent из функции createEditor? Почему то в createEditor он равен QWidget(0x820110, name = "qt_scrollarea_viewport") И как мне получить доступ к нему в функции updateEditorGeometry? Глобальные переменные в этом классе компилятор мне не даёт создавать, ругаясь на "assignment of data-member in read-only structure", чего я ещё не до конца понял.. Всё это пытаюсь сделать для того, чтобы больших размеров делегат в таблице не был ограничен таблицей а появлялся над всем приложением. Может можно как нибудь это покрасивее сделать? В плане кода.. |
|
|
Алексей1153 |
26.3.2011, 11:50
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
как-то так
(не компилировал, естественно) |
|
|
512es |
26.3.2011, 16:05
Сообщение
#5
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
как-то так
Не.. К сожалению так не получается. Ведь editor->parentWidget() = mainWnd а editor->parent() это QObject mainWnd, и у него нет метода mapTo() Вижу пока лишь один выход.. Передавать указатель на виджет (таблицу) при создании делегата. Не, не получается. Не знаю как получить из tableView его qt_scrollarea_viewport. Хотя можно было бы проще сделать, если бы добавить новую переменную в класс, которую можно изменять. Не пойму почему возникает "assignment of data-member in read-only structure" =( тот parent который qt_scrollarea_viewport, появляется только в createEditor() и никак не могу скопировать указать на него никуда, или получить этот указатель из tableView |
|
|
512es |
26.3.2011, 16:36
Сообщение
#6
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Пробовал искать вот так:
Находит сразу 3 штуки. Один из них нужный, но как его выбрать? А ещё вот так:
Вот так находит правильный, но не всегда. Если вызвать делегат на первой строке таблицы, то результат будет другой. Ещё пробовал снимать атрибут const в:
Так позволяет присваивать значения переменным, но программа крашится при первом же вызове делегата. |
|
|
512es |
26.3.2011, 22:26
Сообщение
#7
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Итак, как всегда отвечаю сам себе =)
Выбрав viewport с самой большой площадью я получил указатель на нужный виджет. Но решение не красивое.. Почти сразу же нашёл способ гораздо красивее и проще. Оставляем в createEditor() парента по дефолту. А уже в updateEditorGeometry меняем его на главное окно. Вот так:
Сообщение отредактировал 512es - 26.3.2011, 22:48 |
|
|
Алексей1153 |
27.3.2011, 15:37
Сообщение
#8
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
512es |
27.3.2011, 17:21
Сообщение
#9
|
Участник Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: 0 |
Не пойму почему возникает "assignment of data-member in read-only structure" =( а когда возникает ? Когда внутри функции createEditor() пытаюсь присвоить значение любой внешней переменной, в т.ч. и указателям. Потому и не нашёл другого пути как вытащить оттуда указатель на парент. |
|
|
Алексей1153 |
28.3.2011, 7:54
Сообщение
#10
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
512es, так у тебя функция createEditor() имеет спецификатор const
|
|
|
Текстовая версия | Сейчас: 28.12.2024, 7:25 |