readis中set的应用场景
时间: 2023-06-09 20:01:56 浏览: 41
Redis中set的应用场景包括但不限于:
1. 标签系统:将标签存储在set集合中,方便在对应的文章或商品中进行标签的搜索和匹配。
2. 社交网络:将用户的好友存在set集合中,方便实现好友推荐、共同好友等功能。
3. 排行榜系统:将榜单中的数据存储在zset集合中,方便进行分数的排序。
4. 去重操作:利用set集合的元素不重复的特性,可以方便地进行去重操作。
5. 集合运算:利用set集合的交、并、差等运算,实现相关的业务逻辑。
相关问题
macos 如何利用hidapi 实现在qt场景画板中二十点划线,详细代码介绍
hidapi 是一个跨平台的库,可以用来访问 USB 和 HID 设备。在 macOS 中,你可以使用 hidapi 库来访问 USB 和 HID 设备,例如数字板和绘图板。
在 Qt 场景画板中二十点划线,你可以使用 hidapi 库来读取数字板或绘图板的坐标数据,然后在 Qt 场景画板中绘制相应的线条。
下面是一个简单的示例代码:
```cpp
#include <QtCore>
#include <QtGui>
#include <QtWidgets>
#include <hidapi/hidapi.h>
class DrawingScene : public QGraphicsScene
{
public:
DrawingScene(QObject *parent = nullptr) : QGraphicsScene(parent)
{
m_pen.setColor(Qt::black);
m_pen.setWidth(2);
}
void mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_path.moveTo(event->scenePos());
m_isDrawing = true;
}
}
void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
if (m_isDrawing) {
m_path.lineTo(event->scenePos());
addPath(m_path, m_pen);
m_path = QPainterPath(event->scenePos());
}
}
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
m_isDrawing = false;
}
}
private:
QPen m_pen;
QPainterPath m_path;
bool m_isDrawing = false;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// Create the QGraphicsView and DrawingScene
QGraphicsView view;
DrawingScene scene;
view.setScene(&scene);
view.setWindowTitle("Qt Drawing Board");
view.show();
// Open the HID device
hid_device *dev = hid_open(0x1234, 0x5678, nullptr);
if (!dev) {
qWarning() << "Failed to open HID device";
return -1;
}
// Read the HID report data
unsigned char buf[64];
int res;
while ((res = hid_read(dev, buf, sizeof(buf))) > 0) {
// Parse the HID report data (assuming 20 points)
for (int i = 0; i < 20; i++) {
int x = buf[i * 4] | (buf[i * 4 + 1] << 8);
int y = buf[i * 4 + 2] | (buf[i * 4 + 3] << 8);
QPointF point(x, y);
scene.addEllipse(point, 5, 5, QPen(), QBrush(Qt::red));
}
}
// Close the HID device
hid_close(dev);
return app.exec();
}
```
在上述示例代码中,我们创建了一个 `DrawingScene` 类,该类继承自 `QGraphicsScene` 类,并实现了鼠标事件处理函数,用于绘制线条。然后,我们创建了一个 `QGraphicsView` 对象,将 `DrawingScene` 对象设置为场景,并显示该视图。
接下来,我们使用 `hid_open` 函数打开 HID 设备,并使用 `hid_read` 函数读取 HID 报告数据。假设该报告数据包含 20 个点的坐标信息,我们使用 `buf[i * 4] | (buf[i * 4 + 1] << 8)` 和 `buf[i * 4 + 2] | (buf[i * 4 + 3] << 8)` 来解析每个点的 x 和 y 坐标值,并将其添加到 `DrawingScene` 中。
最后,我们使用 `hid_close` 函数关闭 HID 设备。
请注意,上述示例代码仅用于演示如何使用 hidapi 库读取 HID 设备的数据,并不是完整的实现。你需要根据具体的数字板或绘图板的协议和数据格式来修改代码。
PE_DAT bit 31:13 12:0 R/W R/W Default/Hex 0 reserved if the port is configured as inrit,the corresponding bit is the pin state.if the port is configured as output, the pin state is the same as the corresponding bit. the read bit value is the vlaue setu by software.if the port is configured as functional pin,the undefined value will be read.这个寄存器如何用
这是一个关于 GPIO(通用输入/输出)端口的寄存器描述。该寄存器的位字段描述了 GPIO 端口的输入/输出状态。其中,bit 31:13 是保留位,不可用。bit 12:0 是可读/可写位,对应 GPIO 端口的状态。
如果 GPIO 端口被配置为输入模式,那么对应的位就是对应引脚的状态。如果 GPIO 端口被配置为输出模式,那么对应的位的值就是输出到对应引脚的状态。当读取该位时,返回的值是由软件设置的值。如果 GPIO 端口被配置为功能引脚,那么这个位的值是未定义的。
因此,使用这个寄存器可以控制 GPIO 端口的输入/输出状态,使其可以实现各种功能,如控制 LED 灯的亮灭、读取开关状态等等。需要根据具体的硬件平台和应用场景,结合具体的 GPIO 端口的定义,使用该寄存器进行配置和控制。