crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> определение размеров виджета при использовании QPicture
Litkevich Yuriy
  опции профиля:
сообщение 26.12.2009, 1:00
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Пытаюсь рисовать на виджете с использованием QPicture.
void PictureViewer::paintEvent(QPaintEvent*)
{
    QPainter painter;
    if (pic){
        painter.begin(this);
        painter.drawPicture(QPoint(0, 0), *pic);
        painter.end();
    }
    
}
здесь pic - указатель на QPicture.

QPicture я загружаю из файла. На основе QPicture::boundingRect().size(), загруженного рисунка, изменяю размер виджета.
Однако рисунок рисовался с отступом от краёв исходного виджета (рисовальщика) по этому получаю такое:
Прикрепленное изображение
, если увеличить размеры виджета мышкой, то видно весь рисунок:
Прикрепленное изображение


Вопрос:
Как определить отступ сверху и слева от края виджета, до рисунка.

Была мысль спросить у рисовальщика (QPainter'а) минимальную координату, где он побывал, но такого метода я не нашёл.

На всякий случай проект прикрепил: Прикрепленный файл  PictureViewer.zip ( 3.89 килобайт ) Кол-во скачиваний: 168

Файлы:
painter1.log
painter2.log
тестовые, для загрузки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Kagami
  опции профиля:
сообщение 26.12.2009, 9:27
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 601
Регистрация: 2.2.2009
Пользователь №: 523

Спасибо сказали: 101 раз(а)




Репутация:   9  


Юра, ты меня удивляешь. Есть же функции QWIdget::map*().
Так как у тебя рисовальщик лежит в компоновке и он становится его родительским виджетом, то самый простой способ - вызвать у рисовальщика mapToParent(QPoint(0,0)) - не подходит. Вариантов есть два. Либо хранить в рисовальщике указатель на объект Window и использовать mapTo(window, QPoint(0,0)), либо перебирать родительские виджеты в цикле, пока не дойдем до последнего:
   QWidget* topParent = parentWidget();
   while (topParent->parentWidget())
      topParent = topParent->parentWidget();
а затем mapTo(topParent, QPoint(0,0)).

Сообщение отредактировал Kagami - 26.12.2009, 9:33
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Litkevich Yuriy   определение размеров виджета при использовании QPicture   26.12.2009, 1:00
- - Kagami   Юра, ты меня удивляешь. Есть же функции QWIdget::m...   26.12.2009, 9:27
- - Litkevich Yuriy   Kagami, не понял. Я рисую с координат (0, 0) самог...   26.12.2009, 12:49
- - Kagami   Ты про компоновку забываешь - window -> mainLay...   26.12.2009, 14:00
- - Litkevich Yuriy   Меня не интерисует виджет window. При изменении ра...   26.12.2009, 15:01
- - Kagami   Юр, что бы до конца прояснить ситуацию, при создан...   26.12.2009, 19:26
- - Litkevich Yuriy   Цитата(Kagami @ 26.12.2009, 22:26) они ри...   26.12.2009, 20:03
- - Kagami   Чуть-чуть покопался в исходниках QPicture. Заметил...   26.12.2009, 21:30
- - Litkevich Yuriy   Цитата(Kagami @ 27.12.2009, 0:30) Надо по...   26.12.2009, 23:04
- - Kagami   Кстати, а почему бы тебе не выводить рисунок со см...   26.12.2009, 23:16
- - Litkevich Yuriy   Цитата(Kagami @ 27.12.2009, 2:16) Кстати,...   26.12.2009, 23:20
- - Kagami   У меня вроде нормально. По сравнению с перыми вари...   26.12.2009, 23:49
- - Litkevich Yuriy   Подумать конечно можно, если смещать ровно на отст...   27.12.2009, 1:45


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 2.5.2024, 16:26