2015-12-23 6 views
1

В моем приложении я хочу иметь собственные значки курсоров Windows вместо загружаемых/построенных из ресурсов qt.Как сделать приложение QT использовать родные курсоры Windows вместо qt?

Например Qt :: SplitVCursor/Qt :: SplitHCursor, который отличается от стандартной Windows.

Native and QT5 SplitHCursor

ответ

1

Глядя на источники qwindowscursor.cpp:

switch (cursorShape) { 
case Qt::SplitVCursor: 
    return createPixmapCursorFromData(systemCursorSize(), standardCursorSize(), 32, vsplit_bits, vsplitm_bits); 
case Qt::SplitHCursor: 
    return createPixmapCursorFromData(systemCursorSize(), standardCursorSize(), 32, hsplit_bits, hsplitm_bits); 
case Qt::OpenHandCursor: 
    return createPixmapCursorFromData(systemCursorSize(), standardCursorSize(), 16, openhand_bits, openhandm_bits); 
case Qt::ClosedHandCursor: 
    return createPixmapCursorFromData(systemCursorSize(), standardCursorSize(), 16, closedhand_bits, closedhandm_bits); 
case Qt::DragCopyCursor: 
    return QCursor(QPixmap(copyDragCursorXpmC), 0, 0); 
case Qt::DragMoveCursor: 
    return QCursor(QPixmap(moveDragCursorXpmC), 0, 0); 
case Qt::DragLinkCursor: 
    return QCursor(QPixmap(linkDragCursorXpmC), 0, 0); 
} 

, а затем

// Non-standard Windows cursors are created from bitmaps 
static const uchar vsplit_bits[] = { 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 
    0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 
    0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, 
    0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 
    0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 
    0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; 

Похоже, Qt использует свой собственный растровый для V/курсоров HSplit. Поэтому короткий ответ «невозможно». Долгий ответ: вам нужно изменить указанные строки и перекомпилировать Qt. Я сомневаюсь, однако, что вы можете получить указатель, который вы указали из окон, поскольку он кажется нестандартным, и растровое изображение в Qt существует по какой-то причине. Удачи, сделайте, если вы это сделаете :)

+0

В качестве альтернативы вы можете изменить растровое изображение и перекомпилировать Qt - быстро и грязно. –

+0

Могу ли я предложить [открыть отчет об ошибке] (https://bugreports.qt.io/)? Это то, что лучше всего фиксировать вверх по течению. (Более того, мне интересно, какой макрос IDC_ * 'эти курсоры соответствуют ...) – peppe

+0

Похоже, вы правы. Я думал, что есть способ без изменения QT. –