- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
C++ == 语言。
QT 库。
使用 qt 库时,我无法准确弄清楚如何使用位图或其他方式更改 UI 的光标颜色。任何建议都会很棒!
感谢您的时间。
最佳答案
要更改光标形状甚至使用自定义光标,QCursor可以使用。
它提供了多种构造函数来以不同的方式创建游标:
QCursor::QCursor(const QPixmap &pixmap, int hotX = -1, int hotY = -1)
Constructs a custom pixmap cursor.
pixmap is the image. It is usual to give it a mask (set using QPixmap::setMask()). hotX and hotY define the cursor's hot spot.
If hotX is negative, it is set to the pixmap().width()/2. If hotY is negative, it is set to the pixmap().height()/2.
Valid cursor sizes depend on the display hardware (or the underlying window system). We recommend using 32 x 32 cursors, because this size is supported on all platforms. Some platforms also support 16 x 16, 48 x 48, and 64 x 64 cursors.
See also QPixmap::QPixmap() and QPixmap::setMask().
QCursor::QCursor(const QBitmap &bitmap, const QBitmap &mask, int hotX = -1, int hotY = -1)
Constructs a custom bitmap cursor.
bitmap and mask make up the bitmap. hotX and hotY define the cursor's hot spot.
If hotX is negative, it is set to the bitmap().width()/2. If hotY is negative, it is set to the bitmap().height()/2.
The cursor bitmap (B) and mask (M) bits are combined like this:
- B=1 and M=1 gives black.
- B=0 and M=1 gives white.
- B=0 and M=0 gives transparent.
- B=1 and M=0 gives an XOR'd result under Windows, undefined results on all other platforms.
Use the global Qt color Qt::color0 to draw 0-pixels and Qt::color1 to draw 1-pixels in the bitmaps.
Valid cursor sizes depend on the display hardware (or the underlying window system). We recommend using 32 x 32 cursors, because this size is supported on all platforms. Some platforms also support 16 x 16, 48 x 48, and 64 x 64 cursors.
See also QBitmap::QBitmap() and QBitmap::setMask().
QCursor::QCursor(Qt::CursorShape shape)
Constructs a cursor with the specified shape.
See Qt::CursorShape for a list of shapes.
testQCursorShape.cc
:
// Qt header:
#include <QtWidgets>
// main application
int main(int argc, char **argv)
{
qDebug() << "Qt Version:" << QT_VERSION_STR;
QApplication app(argc, argv);
// setup data
#if 0 // bitmap bits
const quint32 bitmap[32] = {
//|0 |4 |8 |12 |16 |20 |24 |28 |32
0b00000000000000000000000000000000,//- 0
0b00000000000000000001000000000100,//
0b00000000000000000011100000001110,//
0b00000000000000000001110000011100,//
0b00000000000000000000111000111000,//- 4
0b00000000000000000000011101110000,//
0b00000000000000000000001111100000,//
0b00000000000000000000000111000000,//
0b00000000000000000000001111100000,//- 8
0b00000000000000000000011101110000,//
0b00000000000000000000111000111000,//
0b00000000000000000001110000011100,//
0b00000000000000000011100000001110,//- 12
0b00000000000000000001000000000100,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//- 16
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//- 20
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//- 24
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//- 28
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
};
const quint32 mask[32] = {
//|0 |4 |8 |12 |16 |20 |24 |28 |32
0b00000000000000000001000000000100,//- 0
0b00000000000000000011100000001110,//
0b00000000000000000111110000011111,//
0b00000000000000000011111000111110,//
0b00000000000000000001111101111100,//- 4
0b00000000000000000000111111111000,//
0b00000000000000000000011111110000,//
0b00000000000000000000001111100000,//
0b00000000000000000000011111110000,//- 8
0b00000000000000000000111111111000,//
0b00000000000000000001111101111100,//
0b00000000000000000011111000111110,//
0b00000000000000000111110000011111,//- 12
0b00000000000000000011100000001110,//
0b00000000000000000001000000000100,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//- 16
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//- 20
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//- 24
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//- 28
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
0b00000000000000000000000000000000,//
};
#endif // 0
const quint32 bitmap[32] = {
0x00000000,
0x00001004,
0x0000380e,
0x00001c1c,
0x00000e38,
0x00000770,
0x000003e0,
0x000001c0,
0x000003e0,
0x00000770,
0x00000e38,
0x00001c1c,
0x0000380e,
0x00001004,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
};
const quint32 mask[32] = {
0x00001004,
0x0000380e,
0x00007c1f,
0x00003e3e,
0x00001f7c,
0x00000ff8,
0x000007f0,
0x000003e0,
0x000007f0,
0x00000ff8,
0x00001f7c,
0x00003e3e,
0x00007c1f,
0x0000380e,
0x00001004,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
0x00000000,
};
// setup GUI
// bit map cursor
const QBitmap qBitmap
= QBitmap::fromData(QSize(32, 32), (const uchar*)bitmap);
const QBitmap qBitmapMask
= QBitmap::fromData(QSize(32, 32), (const uchar*)mask);
const QCursor qCursorBitmap(qBitmap, qBitmapMask, 7, 7);
// pixmap cursor
const QPixmap qPixmap("pencil.png");
const QCursor qCursorPixmap(qPixmap, 2, 30);
enum {
TypeDefault, TypeShape, TypeBitmap, TypePixmap
};
// main window
QWidget qWinMain;
qWinMain.setWindowTitle(QString::fromUtf8("Test Custom Cursor Shape"));
QGridLayout qGrid;
QButtonGroup qTglGrp;
QRadioButton qTglCursorDefault("Default");
qTglCursorDefault.setChecked(true);
qTglGrp.addButton(&qTglCursorDefault, TypeDefault);
qGrid.addWidget(&qTglCursorDefault, 0, 0);
QRadioButton qTglCursorShape("Cursor with QCursorShape");
qTglGrp.addButton(&qTglCursorShape, TypeShape);
qGrid.addWidget(&qTglCursorShape, 1, 0);
QRadioButton qTglCursorBitmap("Bitmap Cursor");
qTglGrp.addButton(&qTglCursorBitmap, TypeBitmap);
qGrid.addWidget(&qTglCursorBitmap, 2, 0);
QRadioButton qTglCursorPixmap("Pixmap Cursor");
qTglGrp.addButton(&qTglCursorPixmap, TypePixmap);
qGrid.addWidget(&qTglCursorPixmap, 3, 0);
QFrame qFrmTest;
qFrmTest.setFrameStyle(QFrame::Panel | QFrame::Sunken);
qFrmTest.setFixedSize(256, 256);
qGrid.addWidget(&qFrmTest, 0, 1, 5, 1);
qWinMain.setLayout(&qGrid);
// install signal handlers
QObject::connect(&qTglGrp, QOverload<int>::of(&QButtonGroup::buttonClicked),
[&](int choice) {
switch (choice) {
default:
case TypeDefault: qFrmTest.unsetCursor(); break;
case TypeShape: qFrmTest.setCursor(Qt::PointingHandCursor); break;
case TypeBitmap: qFrmTest.setCursor(qCursorBitmap); break;
case TypePixmap: qFrmTest.setCursor(qCursorPixmap); break;
}
});
qWinMain.show();
// runtime loop
return app.exec();
}
CMakeLists.txt
准备VS解决方案:
project(QCursorShape)
cmake_minimum_required(VERSION 3.10.0)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
find_package(Qt5Widgets CONFIG REQUIRED)
include_directories("${CMAKE_SOURCE_DIR}")
add_executable(testQCursorShape testQCursorShape.cc)
target_link_libraries(testQCursorShape Qt5::Widgets)
pencil.png
这是用 alpha channel 准备的(用于透明度):
关于c++ - QCursor 设置光标颜色的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61400766/
C++ == 语言。 QT 库。 使用 qt 库时,我无法准确弄清楚如何使用位图或其他方式更改 UI 的光标颜色。任何建议都会很棒! 感谢您的时间。 最佳答案 要更改光标形状甚至使用自定义光标,QCu
我有一个应该跟随鼠标的 float 小部件。现在我有另一个小部件,它有时会改变它的位置。 在任何其他小部件调整大小之前,一切正常。更改后我的坐标总是误入歧途并且 float 小部件发生移动,它漂浮在离
我正在尝试在 PySide 中设置自定义 QCursor,但上面没有可用的代码示例。据我了解,有像素图和像素图的掩码,这是用 QPixmap.setMask() 设置的。 我都在做: open
我有一个 .bmp 图像,我想将其用作我的 GUI 的光标。 QCursor Documentation建议这是可能的(“要使用您自己的位图创建游标,请使用采用位图和掩码的 QCursor 构造函数或
我正在尝试创建一个自定义动画光标,用于在发生类似于 here 的冗长过程时替换常规光标。和 here ,但是,我希望我的动画是动画的,例如使用 gif,就像标准 Qt.WaitCursor 的情况一样
我已经更改了 QGraphicsView 上的光标使用: graphicsView->setCursor(QCursor(Qt::CrossCursor)); 但我不希望光标在此 graphicsVi
我有一个带有文本的 QTextEdit。用户只能更改从存储在 startPos 变量中的 QCursor 位置到文档末尾的文本。文本的开头必须保持不变。我设法通过调节 QCursor 位置来做到这一点
我的绘画程序中的 Canvas 小部件有一个自定义的圆形光标,其大小指示当前画笔大小。 CanvasWidget 包含一个 QCursor 成员,它会在每次画笔宽度更改时从新的 QPixmap 重新创
我创建了一个最小类来演示我的问题。我正在尝试设置光标位置,但没有任何效果。在我的示例类中,我尝试将光标置于小部件的中心。这是我的类(class): class testWidget : public
我正在尝试使用 Qt 在 Linux 上构建一个应用程序,我可以在其中设置光标位置。该项目使用 CMake 进行管理。 CMakeLists.txt: cmake_minimum_required(V
我在Qt Creator中写一个项目,如果我写 QPoint cursorPos=QCursor::pos(); 然后 cursorPos={-2147483648,-2147483648} 这显然是
我可以将 QCursor 设置到 GLWidget 的中心,即使该 GLWidget 位于布局或拆分器中。但是,我想用 qPainter 在 2D 中绘制一些东西,而不是将光标形状设置在屏幕中央。 我
我试图通过每次 mouseMoveEvent() 计算和设置指针的新位置来调整用户鼠标输入(减慢/加快鼠标指针)。 在执行 mouseMoveEvent() 之前,指针似乎已绘制到其正常位置。这会导致
Qt 的 QCursor 类有一个名为“setPos”的公共(public)静态方法;我想在 QML Javascript 中使用这个方法。所以问题很简单:How to call this 'setP
我目前正在开发图像查看器应用程序。在这个应用程序中,我有一个所谓的“pan-zoom”功能。这意味着,当按住某个鼠标按钮时,用户可以通过前后平移来缩放图像。 它工作正常,但随着使用该功能,鼠标(自然地
我是一名优秀的程序员,十分优秀!