crossplatform.ru

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

> Как узнать местоположение виджета
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]
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
SABROG
  опции профиля:
сообщение 4.3.2009, 13:10
Сообщение #2


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

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

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




Репутация:   34  


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


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

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

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




Репутация:   17  


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

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


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

Группа: Участник
Сообщений: 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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- AD   Как узнать местоположение виджета   2.3.2009, 0:31
- - Litkevich Yuriy   Цитата(AD @ 2.3.2009, 3:31) geometry().x(...   2.3.2009, 8:12
|- - AD   Цитата(Litkevich Yuriy @ 2.3.2009, 8:12) ...   2.3.2009, 9:13
- - SABROG   Раз ничего не работает, можешь приаттачить минимал...   2.3.2009, 9:30
|- - AD   Цитата(SABROG @ 2.3.2009, 9:30) Раз ничег...   2.3.2009, 10:23
- - Litkevich Yuriy   Цитата(AD @ 2.3.2009, 13:23) Это будет не...   2.3.2009, 10:43
|- - AD   Сорри, вчера не смог - надо было заняться аспирант...   3.3.2009, 10:13
|- - AD   Вот минимальный размер. Мне необходимо узнать коор...   3.3.2009, 22:45
- - SABROG   А тебе координаты какие нужны? Глобальные или отно...   3.3.2009, 22:47
|- - AD   Цитата(SABROG @ 3.3.2009, 22:47) А тебе к...   3.3.2009, 22:56
- - SABROG   А куда еще 3 хедера потерял? LibraryBuilder.cpp...   3.3.2009, 23:00
|- - AD   Цитата(SABROG @ 3.3.2009, 23:00) А куда е...   3.3.2009, 23:07
- - SABROG   Кинуть то кинул, но не все. Может сначала сам попы...   3.3.2009, 23:09
|- - AD   Цитата(SABROG @ 3.3.2009, 23:09) Кинуть т...   3.3.2009, 23:13
|- - AD   Все собирается. Проверил!   3.3.2009, 23:20
|- - SABROG   Цитата(AD @ 3.3.2009, 23:20) Все собирает...   3.3.2009, 23:21
|- - AD   Выкладываю!   3.3.2009, 23:21
||- - SABROG   Цитата(AD @ 3.3.2009, 23:21) Выкладываю...   3.3.2009, 23:23
|- - AD   Выкладываю!   3.3.2009, 23:25
|- - SABROG   Цитата(AD @ 3.3.2009, 23:25) Выкладываю...   3.3.2009, 23:28
|- - AD   Цитата(SABROG @ 3.3.2009, 23:28) Цитата(A...   3.3.2009, 23:32
- - kwisp   Цитата(AD @ 3.3.2009, 23:13) откуда ты ег...   3.3.2009, 23:18
- - SABROG   Удали не нужные аттачи и выложи комулятивную верси...   3.3.2009, 23:20
- - kwisp   AD, у тебя указаны нулевые факторы растяжения.. ...   3.3.2009, 23:42
|- - AD   Цитата(kwisp @ 3.3.2009, 23:42) AD, у те...   4.3.2009, 0:05
- - kwisp   AD, в TabMarineView.ui   4.3.2009, 0:08
- - SABROG   Короче не правильно это - получать координаты для ...   4.3.2009, 0:10
|- - AD   Спасибо, попробую. Т.е. эти размеры надо передават...   4.3.2009, 11:16
- - SABROG   Скорее в paintEvent. Но что-то мне подсказывает, ч...   4.3.2009, 11:51
|- - AD   Цитата(SABROG @ 4.3.2009, 11:51) Скорее в...   4.3.2009, 12:09
|- - SABROG   Цитата(AD @ 4.3.2009, 12:09) Цитата(SABRO...   4.3.2009, 12:10
|- - AD   Цитата(SABROG @ 4.3.2009, 12:10) Пока не ...   4.3.2009, 12:15
- - kwisp   Цитата(AD @ 4.3.2009, 12:15) Смысл такой:...   4.3.2009, 12:22
|- - AD   Цитата(kwisp @ 4.3.2009, 12:22) AD, а за...   4.3.2009, 13:04
- - SABROG   А зачем SaharaInit координаты виджета?   4.3.2009, 13:10
|- - AD   Цитата(SABROG)А зачем SaharaInit координаты виджет...   4.3.2009, 13:26
|- - AD   Вот некоторая реализация отрисовки карты: Sahara//...   4.3.2009, 13:49
- - Litkevich Yuriy   Цитата(AD @ 4.3.2009, 16:26) Тем самым оп...   4.3.2009, 13:35
- - Litkevich Yuriy   Цитата(AD @ 4.3.2009, 16:49) Подскажи, по...   4.3.2009, 13:56
|- - AD   Ну и ну.... Есть картинка - BITMAP. Необходимо зас...   4.3.2009, 14:07
- - kwisp   AD, я точно чего то не понимаю. Цитата(AD @ 4...   4.3.2009, 14:23
|- - AD   Цитата(kwisp)AD, я точно чего то не понимаю. почем...   4.3.2009, 14:32
|- - SABROG   Цитата(AD @ 4.3.2009, 14:32) Цитата(kwisp...   4.3.2009, 14:35
|- - AD   Цитата(SABROG)QPixmap/QImage спокойно отрисовывает...   4.3.2009, 14:39
- - kwisp   Цитата(AD @ 4.3.2009, 14:39) В жизни не п...   4.3.2009, 14:51
|- - AD   Нет никакого файла картиночного! Есть файл кар...   4.3.2009, 14:58
|- - SABROG   Цитата(AD @ 4.3.2009, 14:58) Нет никакого...   4.3.2009, 15:20
|- - AD   Цитата(SABROG @ 4.3.2009, 15:20) А парсер...   4.3.2009, 15:59
|- - AD   Так уже у меня что-то получается. Выбрал QImage. S...   4.3.2009, 16:40
- - Litkevich Yuriy   Цитата(AD @ 4.3.2009, 17:07) Необходимо з...   4.3.2009, 14:51
- - kwisp   Цитата(AD @ 4.3.2009, 14:58) Нет никакого...   4.3.2009, 15:02
- - Litkevich Yuriy   AD, основная идея такая: у своего наследника QWidg...   4.3.2009, 15:13
- - SABROG   FillBitmapInfo не нужен вообще имхо, это структура...   4.3.2009, 17:01
|- - AD   ЦитатаFillBitmapInfo не нужен вообще имхо, это стр...   4.3.2009, 17:07
|- - SABROG   Цитата(AD @ 4.3.2009, 17:07) ЦитатаFillBi...   4.3.2009, 17:11
|- - AD   Оказывается необходимо использовать функцию setPix...   4.3.2009, 17:52
|- - SABROG   Цитата(AD @ 4.3.2009, 17:52) Оказывается ...   4.3.2009, 17:57
|- - AD   Извините, что достал вопросами, но просто необходи...   4.3.2009, 19:03
- - kwisp   AD, в QImage есть setPixel(); см Pixel Manipulati...   4.3.2009, 17:55
- - SABROG   Я например не пойму что этот код делает вообще, дл...   4.3.2009, 20:11
|- - AD   Этот код делает то же что и предыдущий код, которы...   4.3.2009, 20:23
- - SABROG   Генерит рельеф местности на основе карты высот (he...   4.3.2009, 20:27
|- - AD   Цитата(SABROG @ 4.3.2009, 20:27) Генерит ...   4.3.2009, 21:34
|- - BRE   Цитата(AD @ 4.3.2009, 21:34) То есть полу...   4.3.2009, 21:47
- - kwisp   мои поздравления. теперь не зависишь от всяких там...   4.3.2009, 21:48
|- - AD   Цитата(kwisp @ 4.3.2009, 21:48) мои поздр...   5.3.2009, 9:25
- - Litkevich Yuriy   Цитата(AD @ 5.3.2009, 12:25) Здесь нужны ...   5.3.2009, 9:26
- - BRE   Цитата(Litkevich Yuriy @ 5.3.2009, 9:26) ...   5.3.2009, 12:40


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


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




RSS Текстовая версия Сейчас: 29.11.2024, 8:42