crossplatform.ru

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

7 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
AD
  опции профиля:
сообщение 2.3.2009, 0:31
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Есть виджет, который расположен на другом виджете где-то несначала.
Как узнать его местоположение?
geometry().x(), geometry().y(), frameGeometry().x(), frameGeometry().y() - все выдают нули. Но виджет располагается далеко не в начале. Как узнать его положение?
Вот прилагаю рисунок. Обведенный виджет - это тот, чье расположение хочется узнать![attachment=463:geometry.JPG]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.3.2009, 8:12
Сообщение #2


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

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

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




Репутация:   94  


Цитата(AD @ 2.3.2009, 3:31) *
geometry().x()
а к какому объекту ты их применяешь? Размеры-то надо относительно чего-то узнавать, например другого виджета

я думаю тебе надо не геометрию объекта а позицию
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 2.3.2009, 9:13
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(Litkevich Yuriy @ 2.3.2009, 8:12) *
а к какому объекту ты их применяешь? Размеры-то надо относительно чего-то узнавать, например другого виджета

я думаю тебе надо не геометрию объекта а позицию

Относительно таб-вкладки узнать, а еще лучше относительно самого главного окна. pos().x(), pos().y() - тоже выдавали не те значения. Если не ошибаюсь, и их пробовал!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 2.3.2009, 9:30
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Раз ничего не работает, можешь приаттачить минимальный пример, который можно собрать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 2.3.2009, 10:23
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG @ 2.3.2009, 9:30) *
Раз ничего не работает, можешь приаттачить минимальный пример, который можно собрать?

Вечером могу кинуть данную формочку и сгенеренные файлики. Годится? Это будет не совсем минимальный, но напрямую то, что мне и необходимо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 2.3.2009, 10:43
Сообщение #6


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

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

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




Репутация:   94  


Цитата(AD @ 2.3.2009, 13:23) *
Это будет не совсем минимальный,
а ты вот лучше сделай минимальный, за одно может и увидишь ошибку.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.3.2009, 10:13
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Сорри, вчера не смог - надо было заняться аспирантурой (по философии контрольная). Сегодня вечером постараюсь выложить. Вопрос актуален еще!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.3.2009, 22:45
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Вот минимальный размер. Мне необходимо узнать координаты chartView!
Заранее благодарен за помощь.

Сообщение отредактировал AD - 4.3.2009, 11:19
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.3.2009, 22:47
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


А тебе координаты какие нужны? Глобальные или относительно какого-то виджета, клиентской области основного окна например?

Нехорошо слова из песни выкидывать:

LibraryBuilder.cpp:2:25: TabTopoView.h: No such file or directory
LibraryBuilder.cpp:3:27: TabMarineView.h: No such file or directory
LibraryBuilder.cpp:4:24: TabLibView.h: No such file or directory
LibraryBuilder.cpp:5:25: TabAMMSView.h: No such file or directory


Сообщение отредактировал SABROG - 3.3.2009, 22:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.3.2009, 22:56
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG @ 3.3.2009, 22:47) *
А тебе координаты какие нужны? Глобальные или относительно какого-то виджета, клиентской области основного окна например?

Нехорошо слова из песни выкидывать:

LibraryBuilder.cpp:2:25: TabTopoView.h: No such file or directory
LibraryBuilder.cpp:3:27: TabMarineView.h: No such file or directory
LibraryBuilder.cpp:4:24: TabLibView.h: No such file or directory
LibraryBuilder.cpp:5:25: TabAMMSView.h: No such file or directory

Относительно вкладки, скорее всего. Сложно сказать. Хочу, чтобы был в указанном месте! :))) На самом деле, относительно главного окна, скорее всего!

Сообщение отредактировал AD - 4.3.2009, 11:19
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.3.2009, 23:00
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


А куда еще 3 хедера потерял?

LibraryBuilder.cpp:2:27: TabMarineView.h: No such file or directory


Что-то минимальный пример нифига на минимальный не похож :)

Сообщение отредактировал SABROG - 3.3.2009, 23:03
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.3.2009, 23:07
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG @ 3.3.2009, 23:00) *
А куда еще 3 хедера потерял?
LibraryBuilder.cpp:2:27: TabMarineView.h: No such file or directory

Sorry

Минимальный, минимальный. Единственное - сгенерированные uic файлы оставил те же и файлы, сделанные дизайнером, те же кинул! :)

Сообщение отредактировал AD - 4.3.2009, 11:20
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.3.2009, 23:09
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Кинуть то кинул, но не все. Может сначала сам попытаешься свой конструктор собрать :)

bLibView.o release\moc_TabLibView.cpp
In file included from release\moc_TabLibView.cpp:10:
release\../TabLibView.h:5:27: ui_TabLibView.h: No such file or directory
In file included from release\moc_TabLibView.cpp:10:
release\../TabLibView.h:8: error: `Ui' has not been declared
release\../TabLibView.h:9: error: expected class-name before '{' token
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.3.2009, 23:13
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG @ 3.3.2009, 23:09) *
Кинуть то кинул, но не все. Может сначала сам попытаешься свой конструктор собрать :)

bLibView.o release\moc_TabLibView.cpp
In file included from release\moc_TabLibView.cpp:10:
release\../TabLibView.h:5:27: ui_TabLibView.h: No such file or directory
In file included from release\moc_TabLibView.cpp:10:
release\../TabLibView.h:8: error: `Ui' has not been declared
release\../TabLibView.h:9: error: expected class-name before '{' token

откуда ты его взял? я ведь выкинул ненужные файлы!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 3.3.2009, 23:18
Сообщение #15


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(AD @ 3.3.2009, 23:13) *
откуда ты его взял? я ведь выкинул ненужные файлы!!!

it is a magic.
как говорят наркоманы "у меня таж фигня" что и у SABROG,
:)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.3.2009, 23:20
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Удали не нужные аттачи и выложи комулятивную версию, а то ведь я со своей стороны только добавлять файлы могу, они как бы синхронно не удаляются вместе с твоим удалением :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.3.2009, 23:20
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Все собирается. Проверил!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.3.2009, 23:21
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(AD @ 3.3.2009, 23:20) *
Все собирается. Проверил!

Какой из трех архивов качать? :lol:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.3.2009, 23:21
Сообщение #19


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Выкладываю!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.3.2009, 23:23
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(AD @ 3.3.2009, 23:21) *
Выкладываю!

Таже петрушка

In file included from release\moc_TabLibView.cpp:10:
release\../TabLibView.h:5:27: ui_TabLibView.h: No such file or directory
In file included from release\moc_TabLibView.cpp:10:
release\../TabLibView.h:8: error: `Ui' has not been declared
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.3.2009, 23:25
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Выкладываю!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 3.3.2009, 23:28
Сообщение #22


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(AD @ 3.3.2009, 23:25) *
Выкладываю!

Так не интересно, собралось даже что-то :lol:

Невидимый глазу виджет chartView зовется?

Сообщение отредактировал SABROG - 3.3.2009, 23:31
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 3.3.2009, 23:32
Сообщение #23


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG @ 3.3.2009, 23:28) *
Цитата(AD @ 3.3.2009, 23:25) *
Выкладываю!

Так не интересно, собралось даже что-то :lol:

Невидимый глазу виджет chartView зовется?

да. Открою секрет - там будет отображаться та же карта! :)))))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 3.3.2009, 23:42
Сообщение #24


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


AD,
у тебя указаны нулевые факторы растяжения..
<horstreatch>0</horstreatch>
<verstreatch>0</verstreatch>

это Fixed
а у тебя Expanding
могут ли GrowFlag | ShrinkFlag | ExpandFlag давать 0 ?? думаю нет.

как то странно.

еще интересно ширина lineEdit`a <width>16777215</width>

Сообщение отредактировал kwisp - 3.3.2009, 23:49
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 0:05
Сообщение #25


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(kwisp @ 3.3.2009, 23:42) *
AD,
у тебя указаны нулевые факторы растяжения..
<horstreatch>0</horstreatch>
<verstreatch>0</verstreatch>

это Fixed
а у тебя Expanding
могут ли GrowFlag | ShrinkFlag | ExpandFlag давать 0 ?? думаю нет.

как то странно.

еще интересно ширина lineEdit`a <width>16777215</width>

Я не понял где и что конкретно? Где именно expanding, а не fixed? Какой именно lineEdit? :)))

Сообщение отредактировал AD - 4.3.2009, 0:05
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 4.3.2009, 0:08
Сообщение #26


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


AD,
в TabMarineView.ui
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 0:10
Сообщение #27


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Короче не правильно это - получать координаты для окон, которые еще небыли показаны. Фишка в том, что layout'ы срабатывают только когда окна показываться. Легко убедиться, если записать локальные координаты виджета в дизайнере, а потом в деструкторе главного окна прописать:

QTabMarineView::~QTabMarineView()
{
    qDebug() << chartView->pos();
}


То они совпадут, либо будут близкие к ним.

Еще один тест, если это прописать в слоте для какой-нибудь кнопки, то курсор мышки встанет на левый верхний угол нужного окна.
QCursor::setPos(chartView->mapToGlobal(chartView->pos()));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 11:16
Сообщение #28


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Спасибо, попробую. Т.е. эти размеры надо передавать через таймер? Или в paintEvent(), или в showEvent()?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 11:51
Сообщение #29


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Скорее в paintEvent. Но что-то мне подсказывает, что изначально решение какой-то проблемы выбрано не правильно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 12:09
Сообщение #30


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG @ 4.3.2009, 11:51) *
Скорее в paintEvent. Но что-то мне подсказывает, что изначально решение какой-то проблемы выбрано не правильно.

Тогда как правильно? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 12:10
Сообщение #31


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(AD @ 4.3.2009, 12:09) *
Цитата(SABROG @ 4.3.2009, 11:51) *
Скорее в paintEvent. Но что-то мне подсказывает, что изначально решение какой-то проблемы выбрано не правильно.

Тогда как правильно? :)

Пока не знаю, ты ведь не озвучил зачем тебе нужно узнавать позицию окна.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 12:15
Сообщение #32


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG @ 4.3.2009, 12:10) *
Пока не знаю, ты ведь не озвучил зачем тебе нужно узнавать позицию окна.

Смысл такой: я хочу переопределить этот виджет, для того, чтобы поместить туда картинку карты, ну соответственно и возможность работы с ней: масштабирование, перемещение по карте, выделение определенной области и т.п.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 4.3.2009, 12:22
Сообщение #33


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(AD @ 4.3.2009, 12:15) *
Смысл такой: я хочу переопределить этот виджет, для того, чтобы поместить туда картинку карты, ну соответственно и возможность работы с ней: масштабирование, перемещение по карте, выделение определенной области и т.п.

AD,
а зачем тебе позиция для "переопределения" и что понимается под "переопределением"???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 13:04
Сообщение #34


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(kwisp @ 4.3.2009, 12:22) *
AD,
а зачем тебе позиция для "переопределения" и что понимается под "переопределением"???

переопределение:
class MyWidget: public QWidget
{
protected:
void paintEvent(QPaintEvent* event) {/* ... */}
void wheelEvent(QWheelEvent* event) {/* ... */}
};

Ну вот так например!

А точное местоположение нужно, для того, чтобы картинка попала ровно в этот виджет.
Вот в эти функции подставлять буду
void SaharaInit(int dx, int dy);
void SetBitmapSize(int dx, int dy);
void SetBitmapSize(int Xbeg, int Ybeg, int Xend, int Yend);


Сообщение отредактировал AD - 4.3.2009, 13:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 13:10
Сообщение #35


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


А зачем SaharaInit координаты виджета?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 13:26
Сообщение #36


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG)
А зачем SaharaInit координаты виджета?

Тем самым определяются, куда эту карту рисовать. Что неясного-то? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.3.2009, 13:35
Сообщение #37


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

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

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




Репутация:   94  


Цитата(AD @ 4.3.2009, 16:26) *
Тем самым определяются, куда эту карту рисовать. Что неясного-то?
дак ты ее не клади как в WinAPI по координатам, если она картинка - устанвливай ее в объект QLable, а его суй в компоновщик нужного виджета.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 13:49
Сообщение #38


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Вот некоторая реализация отрисовки карты:
Sahara
/// Класс набора необходимых Сахаровских классов
class SubSahara
{
protected:
    SPOINT spSize;
    SPOINT begSize;
TImageDrawer*        pImageDrawer;
TImageManager*        pImageManager;
    MEM256Display*        pDisplay;
    MEM256Device*       pDevice;
#ifdef Q_WS_WIN
        BITMAPINFO*         pBmi;
    #endif // Q_WS_WIN

protected:
    void SaharaInit(int dx, int dy);
    void SaharaShutdown();
    void FillBitmapInfo();

public:
    SubSahara(int iWigth, int iHeight);
#ifdef Q_WS_WIN
        void Draw(HDC hdc);
    #endif // Q_WS_WIN
void SetBitmapSize(int Xbeg, int Ybeg, int Xend, int Yend);
};


/// Заполнение картинки (для Windows)
void SubSahara::FillBitmapInfo()
{
    #ifdef Q_WS_WIN
        memset(pBmi,0,sizeof(BITMAPINFO) + sizeof(RGBQUAD) * 256);
        pBmi -> bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
        pBmi -> bmiHeader.biWidth = spSize.x;
        pBmi -> bmiHeader.biHeight = spSize.y;
        pBmi -> bmiHeader.biPlanes = 1;
        pBmi -> bmiHeader.biBitCount = 8;
        pBmi -> bmiHeader.biCompression = BI_RGB;
        pBmi -> bmiHeader.biSizeImage = 0;
        pBmi -> bmiHeader.biClrUsed = pDisplay->PaletteSize();
        pBmi -> bmiHeader.biClrImportant = 0;

        for(int i = 0; i < pBmi->bmiHeader.biClrUsed; i++)
        {
            pBmi -> bmiColors[i].rgbRed = pDisplay->GetPaletteR(i);
            pBmi -> bmiColors[i].rgbGreen = pDisplay->GetPaletteG(i);
            pBmi -> bmiColors[i].rgbBlue = pDisplay->GetPaletteB(i);
        }
    #endif // Q_WS_WIN
}

/// Констуктор: все указатели наобъекты инициируются нулевыми указателями
SubSahara::SubSahara(int iWigth, int iHeight): pImageDrawer(0), pDisplay(0),
        pImageManager(0),  pDevice(0)
        #ifdef Q_WS_WIN
            , pBmi(static_cast<BITMAPINFO*> (HeapAlloc(GetProcessHeap(), 0, sizeof(BITMAPINFO) + sizeof(RGBQUAD) * 256)))
        #endif // Q_WS_WIN
{
    SaharaInit(iWigth, iHeight);
}


// Инициализация указателей на объекты соответствующими классами
void SubSahara::SaharaInit(int dx, int dy)
{
    spSize = SPOINT(dx, dy);

    pDisplay = new MEM256Display(*pRL);
    pImageManager = new TImageManager(*pDisplay);

    pDevice = new MEM256Device(*pDisplay, spSize);
    #ifdef Q_WS_WIN
        FillBitmapInfo();
    #endif // Q_WS_WIN
}

/// Установка размера картинки
void SubSahara::SetBitmapSize(int Xbeg, int Ybeg, int Xend, int Yend)
{
    if(spSize.x != Xend || spSize.y != Yend)
    {
        spSize = SPOINT(Xend, Yend);
        begSize = SPOINT(Xbeg, Ybeg);
        pImageDrawer -> SetBoundRect(SRECT(SPOINT(0, 0), spSize));
        pDevice -> SetSize(spSize);
        #ifdef Q_WS_WIN
            FillBitmapInfo();
        #endif // Q_WS_WIN
    }
}

/// Функция отрисовки карты (для Windows)
#ifdef Q_WS_WIN
 void SubSahara::Draw(HDC hdc)
 {
    if(!bInit) return;

    for(int y = begSize.y; y < spSize.y; y++)
    {
            SetDIBitsToDevice(hdc,                        ///< handle to DC
                begSize.x,                              ///< x-coord of destination upper-left corner
                y,                                        ///< y-coord of destination upper-left corner
                spSize.x,                                ///< source rectangle width
                1,                                        ///< source rectangle height
                0,                                        ///< x-coord of source lower-left corner
                0,                                        ///< y-coord of source lower-left corner
                0,                                        ///< first scan line in array
                1,                                        ///< number of scan lines
                                                        ///< array of DIB bits
                (CONST VOID *)(pDevice->GetSurface() + spSize.x * y),
                pBmi,                                    ///< bitmap information
                DIB_RGB_COLORS);
    }
 }
#endif // Q_WS_WIN


Вот именно этой функцией и происходит само рисование:
void SubSahara::Draw(HDC hdc)


Цитата(Litkevich Yuriy)
дак ты ее не клади как в WinAPI по координатам, если она картинка - устанвливай ее в объект QLable, а его суй в компоновщик нужного виджета.

Я привел кусок кода, который выполняет отрисовку. Подскажи, пожалуйста, как изменить функции таким образом, чтобы можно было избавиться от этого WINAPI-кода. Тогда в моем другом проекте (TLV, результаты которого я приводил) я избавлюсь от кода, зависящего от Widows!

Сообщение отредактировал AD - 4.3.2009, 13:53
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.3.2009, 13:56
Сообщение #39


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

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

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




Репутация:   94  


Цитата(AD @ 4.3.2009, 16:49) *
Подскажи, пожалуйста, как изменить функции таким образом
я человек ленивый, и мне лениво изучать код. Давай на пальцах объясняй как и что у тебя работает.

Например так:
Цитата
Есть картинка (какой формат)-> надо поместить в Q***widget.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 14:07
Сообщение #40


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Ну и ну....
Есть картинка - BITMAP.
Необходимо засунуть в переопределенном QWidget.
указанная функция Draw вызывается в paintEvent() переопределенного виджета.
указанные координаты для заполнения SPOINT spSize; SPOINT begSize! Эти координаты используются в Draw вот здесь:
for(int y = begSize.y; y < spSize.y; y++)
    {
            //SetDIBitsToDevice(hdc,
    }

Чем и что можно заменить, если хочется переделать в более универсальный код?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 4.3.2009, 14:23
Сообщение #41


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


AD, я точно чего то не понимаю.
Цитата(AD @ 4.3.2009, 14:07) *
Есть картинка - BITMAP.

почему её просто не нарисовать в paintEvent`e необходимого виджета???

Сообщение отредактировал kwisp - 4.3.2009, 14:24
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 14:32
Сообщение #42


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(kwisp)
AD, я точно чего то не понимаю.
почему её просто не нарисовать в paintEvent`e необходимого виджета???

Я тоже! Как?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 14:35
Сообщение #43


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(AD @ 4.3.2009, 14:32) *
Цитата(kwisp)
AD, я точно чего то не понимаю.
почему её просто не нарисовать в paintEvent`e необходимого виджета???

Я тоже! Как?

QPixmap/QImage спокойно отрисовывается через QPainter.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 14:39
Сообщение #44


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG)
QPixmap/QImage спокойно отрисовывается через QPainter.

Чувствую себя полным идиотом. Подскажите, пожалуйста, как узнать точные координаты виджета. В жизни не поверю, что это невозможно....
А на счет QImage я могу понять, что можно. Но как переделать код, который относится к Сахаре. В частности, в fillBitmapInfo, Draw???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 4.3.2009, 14:51
Сообщение #45


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(AD @ 4.3.2009, 14:39) *
В жизни не поверю, что это невозможно....

уже вроде подсказали.
после того как будешь уверен что он показан. можешь смело брать его координаты.

все равно не пойму.
Цитата
Есть картинка - BITMAP.

где она есть??? в файле лежит??? или как она вообще синтезируется???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.3.2009, 14:51
Сообщение #46


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

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

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




Репутация:   94  


Цитата(AD @ 4.3.2009, 17:07) *
Необходимо засунуть в переопределенном QWidget.
можно сделать наподобие этого:
void YLabel::setBackground(QPixmap pix)
{
  QPalette pal;
  
    pal.setBrush(this->backgroundRole(),QBrush(pix) );//Qt::blue
    this->setPalette(pal);
    this->resize(pix.size());
    this->setAlignment(Qt::AlignCenter);
    
    
    this->setAutoFillBackground(true);
}

Но в первом посте был здоровый виджет и я бы его поменял на QLable в котрый очень просто засовывать рисунки.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 14:58
Сообщение #47


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Нет никакого файла картиночного! Есть файл карты (формат не могу сказать, ток намекну - DCW!!!!!!). BITMAP формируется в функциях fillBitmapInfo, Draw!
На счет того, что подсказали, но при этом усомнились, что вообще этот метод верен! :)

Юра, спасибо. Все попробую чуть вечером!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 4.3.2009, 15:02
Сообщение #48


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


Цитата(AD @ 4.3.2009, 14:58) *
Нет никакого файла картиночного! Есть файл карты (формат не могу сказать, ток намекну - DCW!!!!!!). BITMAP формируется в функциях fillBitmapInfo, Draw!

а сформировать картинку можешь с помощью illBitmapInfo, Draw в буфер или файл??? если да то потом показать её этим методом.

либо
а самому формировать картинку не вариант??? DCW to png к примеру?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 4.3.2009, 15:13
Сообщение #49


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

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

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




Репутация:   94  


AD, основная идея такая: у своего наследника QWidget сделай метод установки битмапа.
А извне вызывай этот метод. Это проще и реализовать и потом модифицировать, чем пытатся насильно впихнуть виджету его содержимое.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 15:20
Сообщение #50


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(AD @ 4.3.2009, 14:58) *
Нет никакого файла картиночного! Есть файл карты (формат не могу сказать, ток намекну - DCW!!!!!!). BITMAP формируется в функциях fillBitmapInfo, Draw!
На счет того, что подсказали, но при этом усомнились, что вообще этот метод верен! :)

Юра, спасибо. Все попробую чуть вечером!

А парсера ARC/INFO формата нету?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 15:59
Сообщение #51


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG @ 4.3.2009, 15:20) *
А парсера ARC/INFO формата нету?

Нет.

Наконец знаю как правильно задать вопрос еще один.
Какой функцией у QImage я могу заменить API-шную функцию SetDIBitsToDevice, которая на HDC отрисовывает пополосно карту?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 16:40
Сообщение #52


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Так уже у меня что-то получается. Выбрал QImage.
SubSahara::SubSahara(int iWidth, int iHeight): /* что-то другое*/, bitmap(new QImage(iWidth, iHeight, QImage::Format_ARGB32))
{
    SaharaInit(iWidth, iHeight);
}

/// Функция отрисовки карты
void SubSahara::Draw(QPainter* painter)
{ painter -> drawImage(QPoint(0, 0), *bitmap); }


Теперь бы узнать, как правильно этот QImage заполнить и проблем не будет. Т.е. надо найти замену функции FillBitmapInfo():
/// Заполнение картинки (для Windows)
void SubSahara::FillBitmapInfo()
{
    #ifdef Q_WS_WIN
        memset(pBmi,0,sizeof(BITMAPINFO) + sizeof(RGBQUAD) * 256);
        pBmi -> bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
        pBmi -> bmiHeader.biWidth = spSize.x;
        pBmi -> bmiHeader.biHeight = spSize.y;
        pBmi -> bmiHeader.biPlanes = 1;
        pBmi -> bmiHeader.biBitCount = 8;
        pBmi -> bmiHeader.biCompression = BI_RGB;
        pBmi -> bmiHeader.biSizeImage = 0;
        pBmi -> bmiHeader.biClrUsed = pDisplay -> PaletteSize();
        pBmi -> bmiHeader.biClrImportant = 0;

        for(int i = 0; i < pBmi->bmiHeader.biClrUsed; ++i)
        {
            pBmi -> bmiColors[i].rgbRed = pDisplay -> GetPaletteR(i);
            pBmi -> bmiColors[i].rgbGreen = pDisplay -> GetPaletteG(i);
            pBmi -> bmiColors[i].rgbBlue = pDisplay -> GetPaletteB(i);
        }
    #endif // Q_WS_WIN
}

Пока что сделал так (но это ничего не дало):
/// Заполнение картинки (для Windows)
void SubSahara::FillBitmapInfo()
{
    bitmap -> setNumColors(pDisplay -> PaletteSize());
    for(int i=0; i<bitmap -> numColors(); ++i)
    {
        QColor color(pDisplay -> GetPaletteR(i), pDisplay -> GetPaletteG(i), pDisplay -> GetPaletteB(i));
        bitmap -> setColor(i, color.rgb());
    }
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 17:01
Сообщение #53


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


FillBitmapInfo не нужен вообще имхо, это структура которая передается в SetDIBitsToDevice.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 17:07
Сообщение #54


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата
FillBitmapInfo не нужен вообще имхо, это структура которая передается в SetDIBitsToDevice.

вах! А я и не додумался! :)

Это все ясно! Дело в том, что именно благодаря коду в указанной функции происходит отрисовка карты. Каким образом заполнить QImage так, чтобы эффект был тот же?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 17:11
Сообщение #55


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(AD @ 4.3.2009, 17:07) *
Цитата
FillBitmapInfo не нужен вообще имхо, это структура которая передается в SetDIBitsToDevice.

вах! А я и не додумался! :)

Это все ясно! Дело в том, что именно благодаря коду в указанной функции происходит отрисовка карты. Каким образом заполнить QImage так, чтобы эффект был тот же?

Если код сахары брал картинку и рисовал на некоторую область и только, то просто тупо можно передать картинку в QLabel.
Если помимо картинки надо на нее что-то рисовать или проводить трансформацию, или отображать только какую-то её часть, то QPainter + QImage, которому передается картинка и больше ничего не надо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 17:52
Сообщение #56


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Оказывается необходимо использовать функцию setPixel(). В качестве аргументов она имеет позицию картинки. Каким образом я могу разделить заполнение пикселей и саму отрисовку. В BITMAPINFO это и было сделано. А как это в QImage?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 4.3.2009, 17:55
Сообщение #57


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


AD,
в QImage есть setPixel();
см
Pixel Manipulation

Цитата(AD @ 4.3.2009, 17:52) *
Каким образом я могу разделить заполнение пикселей и саму отрисовку.


сначала заполни сохрани потом отрисуй.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 17:57
Сообщение #58


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Цитата(AD @ 4.3.2009, 17:52) *
Оказывается необходимо использовать функцию setPixel(). В качестве аргументов она имеет позицию картинки. Каким образом я могу разделить заполнение пикселей и саму отрисовку. В BITMAPINFO это и было сделано. А как это в QImage?

Вот я в блоге недавно такое делал. http://vingrad.ru/blogs/sabrog/2009/01/27/...aya-animatsiya/
Т.е. рисую на картинку все что нужно, а потом эту картинку отрисовываю. Правда я рисовал QPainter'ом, но никто не запрещает через QImage::setPixel(x,y)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 19:03
Сообщение #59


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Извините, что достал вопросами, но просто необходимо сделать хороший вариант без зависимости от местоположения виджета. Подсказали следующий вариант:
/// Заполнение картинки
void SubSahara::FillBitmapInfo()
{
    int i = 0;
    for(int y=0; y<bitmap -> height(); ++y)
    {
        uchar *p = bitmap -> scanLine(y);
        for(int x=0; x<bitmap -> width(); ++x)
        {
            p[0] = 255;
            p[1] = pDisplay -> GetPaletteR(i);
            p[2] = pDisplay -> GetPaletteG(i);
            p[3] = pDisplay -> GetPaletteB(i);
            ++i;
            p += 4;
        }
    }
}

Но есть проблема. Как видно из данного кода i = width * height. НО должно быть
i < pDisplay -> PaletteSize(), поэтому в программе происходит сбой. Если я добавляю след. строки, то выходит не карта, а фигня:
/// same
for(int x=0; x<bitmap -> width(); ++x)
{
        if(i >= pDisplay -> PaletteSize()) i %= pDisplay -> PaletteSize(); 
    p[0] = 255;
    p[1] = pDisplay -> GetPaletteR(i);
/// same
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 20:11
Сообщение #60


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Я например не пойму что этот код делает вообще, для меня это перестановка цифр и какие-то операции над ними. Все-равно что дать человеку формулу круга и не сказать, что с помощью неё его можно нарисовать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 20:23
Сообщение #61


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Этот код делает то же что и предыдущий код, который был в функции void FillBitmapInfo(). Он заполняет QImage* bitmap (а в предыдущем варианте заполнял BITMAPINFO* pBmi)!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 4.3.2009, 20:27
Сообщение #62


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

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




Репутация:   34  


Генерит рельеф местности на основе карты высот (height)?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 4.3.2009, 21:34
Сообщение #63


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(SABROG @ 4.3.2009, 20:27) *
Генерит рельеф местности на основе карты высот (height)?

НУ это если я делаю DEM-карту - то да. Именно такой метод и используется.

Эврика! :)
Удалось. Вот правильный код для отрисовки:
/// Функция отрисовки карты
void SubSahara::Draw(QPainter* painter)
{
    for(int y=0; y<bitmap -> height(); ++y)
    {
        uchar *p = bitmap -> scanLine(y);
        const uchar *source = pDevice->GetSurface() + y * bitmap -> width();
        for(int x=0; x<bitmap -> width(); ++x)
        {
            uchar i = *source++;
            p[0] = pDisplay -> GetPaletteB(i);
            p[1] = pDisplay -> GetPaletteG(i);
            p[2] = pDisplay -> GetPaletteR(i);
            p[3] = 255;
            p += 4;
        }
    }
    painter -> drawImage(QPoint(0, 0), *bitmap);
}

То есть получается, что за прозрачность отвечает 4-й бит, а раскраска - BGR! :)
Всем, кто здесь и на prog.org помог - спасибо!!!!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_BRE_*
сообщение 4.3.2009, 21:47
Сообщение #64





Гости








    


Цитата(AD @ 4.3.2009, 21:34) *
То есть получается, что за прозрачность отвечает 4-й бит, а раскраска - BGR! :)
Всем, кто здесь и на prog.org помог - спасибо!!!!

Уточню и здесь.
Точнее ARGB (как и было задано при создании QImage).
DWORD: 0xAARRGGBB в памяти сохраняется как BB GG RR AA (увеличение адресов --->).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 4.3.2009, 21:48
Сообщение #65


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

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




Репутация:   23  


мои поздравления. теперь не зависишь от всяких там HDC??? так ведь?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 5.3.2009, 9:25
Сообщение #66


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

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




Репутация:   17  


Цитата(kwisp @ 4.3.2009, 21:48) *
мои поздравления. теперь не зависишь от всяких там HDC??? так ведь?

Cпасибо. Именно так! :)))

Цитата(BRE)
Уточню и здесь.
Точнее ARGB (как и было задано при создании QImage).
DWORD: 0xAARRGGBB в памяти сохраняется как BB GG RR AA (увеличение адресов --->).

BRE, регистрируйтесь на этом форуме! Здесь нужны такие толковые люди! :) :) :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 5.3.2009, 9:26
Сообщение #67


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

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

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




Репутация:   94  


Цитата(AD @ 5.3.2009, 12:25) *
Здесь нужны такие толковые люди!
:lol:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_BRE_*
сообщение 5.3.2009, 12:40
Сообщение #68





Гости








    


Цитата(Litkevich Yuriy @ 5.3.2009, 9:26) *
Цитата(AD @ 5.3.2009, 12:25) *
Здесь нужны такие толковые люди!
:lol:

Yuriy, это сарказм?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

7 страниц V   1 2 3 > » 
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 9.6.2025, 19:14