写一个cpp算法函数, 支持QColor 转换为 QVector4D
时间: 2023-05-26 12:02:14 浏览: 117
#include <QVector4D>
#include <QColor>
QVector4D QColorToVector4D(const QColor& color)
{
QVector4D vector;
vector.setX(color.redF());
vector.setY(color.greenF());
vector.setZ(color.blueF());
vector.setW(color.alphaF());
return vector;
}
// 使用方法
QColor color(255, 0, 0, 127);
QVector4D vector = QColorToVector4D(color); // 将QColor转换为QVector4D
float red = vector.x(); // 获取红色分量
float green = vector.y(); // 获取绿色分量
float blue = vector.z(); // 获取蓝色分量
float alpha = vector.w(); // 获取透明度分量
相关问题
写一个cpp算法函数, 支持QColor 转换为 QVector4D, QVector4D中的值区间为0-1
下面是一个cpp算法函数,支持将QColor 转换为 QVector4D,并且将QVector4D中的值区间限制在0-1之间:
```cpp
QVector4D colorToVector4D(const QColor& color) {
float r = color.red() / 255.0f;
float g = color.green() / 255.0f;
float b = color.blue() / 255.0f;
float a = color.alpha() / 255.0f;
return QVector4D(r, g, b, a).normalized();
}
```
首先将QColor中的RGBA值分别除以255.0f,将其范围限制在0-1之间。然后,使用QVector4D(r, g, b, a)构造函数创建一个四元组,并调用其normalized()方法将其标准化,确保其长度为1,未超出范围。最后,将QVector4D返回作为结果。
用qt写一个电路网孔圈划算法
好的,以下是一个用 Qt 写的电路网孔圈划算法:
```C++
#include <QtGui/QPainter>
#include <QtGui/QWidget>
#include <QtGui/QMouseEvent>
#include <QtCore/QVector>
class CircuitBoard : public QWidget
{
public:
explicit CircuitBoard(QWidget *parent = nullptr)
: QWidget(parent), m_boardSize(200, 200), m_maxGridSize(20),
m_selectedGrid(-1, -1), m_hoverGrid(-1, -1)
{
resize(m_boardSize);
setMouseTracking(true);
}
protected:
void paintEvent(QPaintEvent *event) override
{
Q_UNUSED(event);
QPainter painter(this);
// 画出网孔
painter.setPen(Qt::NoPen);
painter.setBrush(QBrush(Qt::white));
for (const auto &grid : m_grids) {
if (m_selectedGrid == grid) {
painter.setBrush(QBrush(Qt::gray));
} else if (m_hoverGrid == grid) {
painter.setBrush(QBrush(QColor(230, 230, 230)));
} else if (grid.x() % 5 == 0 && grid.y() % 5 == 0) {
painter.setBrush(QBrush(QColor(220, 220, 220)));
} else {
painter.setBrush(QBrush(Qt::white));
}
painter.drawRect(grid.x() * m_gridSize.width(), grid.y() * m_gridSize.height(), m_gridSize.width(), m_gridSize.height());
}
}
void mousePressEvent(QMouseEvent *event) override
{
m_selectedGrid = event->pos() / m_gridSize;
update();
}
void mouseMoveEvent(QMouseEvent *event) override
{
auto pos = event->pos() / m_gridSize;
if (pos != m_hoverGrid) {
m_hoverGrid = pos;
update();
}
}
void mouseReleaseEvent(QMouseEvent *event) override
{
Q_UNUSED(event);
if (m_selectedGrid != QPoint(-1, -1)) {
for (auto &grid : m_grids) {
if (grid == m_selectedGrid) {
grid = m_hoverGrid;
break;
}
}
m_selectedGrid = QPoint(-1, -1);
update();
}
}
void resizeEvent(QResizeEvent *event) override
{
auto oldSize = m_boardSize;
m_boardSize = event->size();
m_gridSize = QSize(m_boardSize.width() / m_maxGridSize, m_boardSize.height() / m_maxGridSize);
// 调整网格大小和位置
for (auto &grid : m_grids) {
grid.setX(grid.x() * m_boardSize.width() / oldSize.width());
grid.setY(grid.y() * m_boardSize.height() / oldSize.height());
}
// 创建新的网格
m_grids.clear();
for (int i = 0; i < m_maxGridSize; ++i) {
for (int j = 0; j < m_maxGridSize; ++j) {
m_grids.append(QPoint(i, j));
}
}
}
private:
QVector<QPoint> m_grids; // 网格
QSize m_boardSize; // 电路板大小
QSize m_gridSize; // 网格大小
int m_maxGridSize; // 最大网格数
QPoint m_selectedGrid; // 选中的网格
QPoint m_hoverGrid; // 鼠标所在的网格
};
int main(int argc, char **argv)
{
QApplication app(argc, argv);
CircuitBoard board;
board.show();
return app.exec();
}
```
这段代码可以在 Qt Creator 中编译运行,它创建了一个电路板窗口,可以用鼠标拖动网孔圈。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)