crossplatform.ru

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

> Заполнение области определенным цветом
AD
  опции профиля:
сообщение 26.11.2008, 20:23
Сообщение #1


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

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

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




Репутация:   17  


Вопрос довольно сложный и затрагивает не только Qt. Есть область (прямоугольник), где рисуется карта и траектория средствами библиотеки нашей фирмы. Для отрисовки используется такая вот функция:
/// Функция отрисовки карты (для 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

pBmi - имеет тип BITMAPINFO
при использовании делается так:
/// Рисование в заданном виджете (trackView)
void TLV::paintEvent(QPaintEvent *events)
{
    QPainter painter(this);
    /// Рисование карты Мира Сахарой
    int Xbeg = trackView -> x() + 10;
    int yb = dockWidget -> y() + 10;
    int Ybeg = (toolbarAction -> isChecked()) ? yb + toolBar -> height() + TLVClass::menuBar -> height()
        : yb + TLVClass::menuBar -> height();
    int Xend = trackView -> width();
    int Yend = trackView -> height();

    pSahara -> SetBitmapSize(Xbeg, Ybeg, Xend, Yend + Ybeg);
    pSahara -> Refresh();

    #ifdef Q_WS_WIN
        pSahara -> Draw(painter.paintEngine() -> getDC());
    #endif // Q_WS_WIN    

    QMainWindow::paintEvent(events);
}


Имеются определенные функции для получения массива QRgb. Задача заполнить область, в которой происходит рисование (по сути, виджет trackView), цветами из этого массива. Каким образом сделать массив заполнения этой области? Подскажите, пожалуйста, средства Qt какими можно это сделать и как сделать?

Заранее благодарен.

Сообщение отредактировал AD - 27.11.2008, 12:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


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


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




RSS Текстовая версия Сейчас: 26.12.2024, 18:45