Qt:依据ChatGpt生成Qt可选择扇形按钮

2023-10-26

引言

  因为项目需要绘制一个中间为圆心,包含数个扇形的可选择按钮。正好ChatGpt使用起来比较成熟,因此使用询问的方式得到两部分代码。最终修改后的效果如动图:
在这里插入图片描述

1、生成过程

1.1 饼图

目前ChatGpt给出的代码还有缺陷,一次运行不起来。需要人为添加头文件或处理逻辑关系,不过已经很强大了。
生成的效果为:
在这里插入图片描述

//饼图案例
#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QPainter>
#include <QDebug>
#include <QTableWidget>
#include <QHeaderView>
#include <QMessageBox>
#include <QMouseEvent>

class SectorChartButton : public QPushButton {
public:
	SectorChartButton(QTableWidget* tableWidget, QWidget* parent = nullptr) : QPushButton(parent), m_tableWidget(tableWidget) {
		setFixedSize(200, 200);
		setStyleSheet("border: none");
	}

protected:
	void paintEvent(QPaintEvent* event) override {
		Q_UNUSED(event)
			QPainter painter(this);
		painter.setRenderHint(QPainter::Antialiasing);

		// Draw background fan shape
		painter.setPen(Qt::NoPen);
		painter.setBrush(QColor(200, 200, 200));
		painter.drawEllipse(rect());

		// Draw concentric circle
		painter.setPen(QPen(QColor(0, 0, 0), 3));
		painter.setBrush(QColor(255, 255, 255));
		int x = width() / 4;
		int y = height() / 4;
		int w = width() / 2;
		int h = height() / 2;
		painter.drawEllipse(x, y, w, h);

		// Draw fan shapes
		painter.setPen(QPen(QColor(0, 0, 0), 3));
		painter.setBrush(QColor(255, 0, 0));
		painter.drawPie(rect(), 30 * 16, 120 * 16);
		painter.setBrush(QColor(0, 255, 0));
		painter.drawPie(rect(), 150 * 16, 120 * 16);
		painter.setBrush(QColor(0, 0, 255));
		painter.drawPie(rect(), 270 * 16, 120 * 16);

		// Draw lines from center to edge of each fan shape
		painter.drawLine(width() / 2, height() / 2, width() / 2 + (width() - 20) / 4 * qCos(qDegreesToRadians(75)), height() / 2 - (height() - 20) / 4 * qSin(qDegreesToRadians(75)));
		painter.drawLine(width() / 2, height() / 2, width() / 2 - (width() - 20) / 4 * qSin(qDegreesToRadians(60)), height() / 2 + (height() - 20) / 4 * qCos(qDegreesToRadians(60)));
		painter.drawLine(width() / 2, height() / 2, width() / 2 - (width() - 20) / 4 * qCos(qDegreesToRadians(75)), height() / 2 - (height() - 20) / 4 * qSin(qDegreesToRadians(75)));
	}

	void mousePressEvent(QMouseEvent* event) override {
		QRectF rect = this->rect();
		QPointF center = rect.center();
		QPointF pos = event->localPos();
		qreal angle = qRadiansToDegrees(qAtan2(pos.y() - center.y(), pos.x() - center.x())) + 360;
		if (angle >= 30 && angle < 150) {
			m_tableWidget->insertRow(0);
			QTableWidgetItem* item1 = new QTableWidgetItem("Red sector");
			QTableWidgetItem* item2 = new QTableWidgetItem("Column 1 data");
			m_tableWidget->setItem(0, 0, item1);
			m_tableWidget->setItem(0, 1, item2);
			QMessageBox::information(this, "Sector Chart Button", "You clicked on the red sector!");
		}
		else if (angle >= 150 && angle < 270) {
			m_tableWidget->insertRow(0);
			QTableWidgetItem* item1 = new QTableWidgetItem("Green sector");
			QTableWidgetItem* item2 = new QTableWidgetItem("Column 2 data");
			m_tableWidget->setItem(0, 1, item1);
			m_tableWidget->setItem(0, 2, item2);
			QMessageBox::information(this, "Sector Chart Button", "You clicked on the green sector!");
		}
		else if (angle >= 270 || angle < 30) {
			m_tableWidget->insertRow(0);
			QTableWidgetItem* item1 = new QTableWidgetItem("Blue sector");
			QTableWidgetItem* item2 = new QTableWidgetItem("Column 3 data");
			m_tableWidget->setItem(0, 2, item1);
			m_tableWidget->setItem(0, 3, item2);
			QMessageBox::information(this, "Sector Chart Button", "You clicked on the blue sector!");
		}
	}

private:
	QTableWidget* m_tableWidget;
};

int main(int argc, char* argv[]) {
	QApplication app(argc, argv);
	QWidget widget;
	widget.setFixedSize(600, 400);

	// Create table widget
	QTableWidget tableWidget(&widget);
	tableWidget.setColumnCount(4);
	tableWidget.setHorizontalHeaderLabels({ "Column 1", "Column 2", "Column 3", "Column 4" });
	tableWidget.verticalHeader()->setVisible(false);
	tableWidget.setGeometry(250, 50, 300, 300);

	// Create sector chart button
	SectorChartButton* button = new SectorChartButton(&tableWidget, &widget);
	button->move(50, 100);
	button->show();

	widget.show();
	return app.exec();
}

2.2 扇形图

ChatGpt实现效果如下,支持鼠标停留变颜色以及单击保留选择项。
在这里插入图片描述
生成代码:

//扇形图案例

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QMouseEvent>
#include <QDebug>

class ColorWheel : public QWidget
{
public:
    ColorWheel(QWidget *parent = nullptr) : QWidget(parent)
    {
        setFixedSize(200, 200);
        setMouseTracking(true);
    }

protected:
    void paintEvent(QPaintEvent*) override
    {
        QPainter painter(this);
        painter.setRenderHint(QPainter::Antialiasing);

        QRectF rect = QRectF(10, 10, 180, 180);
        qreal startAngle[] = {0, 120, 240};
        qreal spanAngle[] = {120, 120, 120};
        QColor colors[] = {Qt::red, Qt::green, Qt::blue};

        for (int i = 0; i < 3; i++) {
            if (m_hoveredSector == i || m_selectedSector == i) {
                painter.setPen(colors[i]);
                painter.setBrush(colors[i]);
            } else {
                painter.setPen(colors[i].darker());
                painter.setBrush(Qt::NoBrush);
            }
            painter.drawPie(rect, startAngle[i] * 16, spanAngle[i] * 16);
        }
    }

    void mouseMoveEvent(QMouseEvent* event) override
    {
        int x = event->x();
        int y = event->y();
        int sector = getSector(x, y);
        if (sector != m_hoveredSector) {
            m_hoveredSector = sector;
            update();
            if (sector >= 0 && sector < 3) {
                QColor color;
                switch (sector) {
                    case 0: color = Qt::red; break;
                    case 1: color = Qt::green; break;
                    case 2: color = Qt::blue; break;
                }
                qDebug() << "Hovering over sector" << sector << ", color is" << color.name();
            }
        }
    }

    void leaveEvent(QEvent*) override
    {
        m_hoveredSector = -1;
        update();
    }

    void mousePressEvent(QMouseEvent* event) override
    {
        int x = event->x();
        int y = event->y();
        int sector = getSector(x, y);
        if (sector != m_selectedSector) {
            m_selectedSector = sector;
            update();
            if (sector >= 0 && sector < 3) {
                QColor color;
                switch (sector) {
                    case 0: color = Qt::red; break;
                    case 1: color = Qt::green; break;
                    case 2: color = Qt::blue; break;
                }
                qDebug() << "Selected sector" << sector << ", color is" << color.name();
            }
        }
    }

private:
    int getSector(int x, int y)
    {
        int dx = x - 100;
        int dy = y - 100;
        int r = qSqrt(dx*dx + dy*dy);
        if (r < 90) {
            qreal angle = qAtan2(dy, dx) * 180 / M_PI;
            if (angle < 0) angle += 360;
            int sector = static_cast<int>(angle / 120);
            return sector;
        }
        return -1;
    }

    int m_hoveredSector = -1;
    int m_selectedSector = -1;
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    ColorWheel w;
    w.show();

    return a.exec();
}

3.3 可选择扇形按钮

在这里插入图片描述
根据以上代码修正后得到该按钮,代码如下:

#include <QApplication>
#include <QWidget>
#include <QPainter>
#include <QMouseEvent>
#include <QDebug>

class ColorWheel : public QWidget
{
public:
	ColorWheel(QWidget* parent = nullptr) : QWidget(parent)
	{
		setFixedSize(200, 200);
		setMouseTracking(true);
	}

protected:
	void paintEvent(QPaintEvent*) override
	{
		QPainter painter(this);
		painter.setRenderHint(QPainter::Antialiasing);

		QRectF rect = QRectF(10, 10, 180, 180);
		qreal startAngle[] = { 90, 210, 330 };
		qreal spanAngle[] = { 120, 120, 120 };
		QColor colors[] = { Qt::red, Qt::green, Qt::blue };

		int x = width() / 4;
		int y = height() / 4;
		int w = width() / 2;
		int h = height() / 2;
		QRectF innerRect = QRectF(x, y, w, h);

		if (m_init)
		{
			//默认绘制第一个图形
			painter.setPen(colors[0]);
			painter.setBrush(Qt::NoBrush);
			painter.drawPie(rect, startAngle[0] * 16, spanAngle[0] * 16);

			// Draw concentric circle
			painter.setPen(Qt::NoPen);
			painter.setBrush(QColor(255, 255, 255));
			painter.drawEllipse(x, y, w, h);

			painter.setPen(colors[0]);
			painter.drawArc(innerRect, startAngle[0] * 16, spanAngle[0] * 16);
		}


		for (int i = 0; i < 3; i++) {
			if (m_hoveredSector == i || m_selectedSector == i) {
				painter.setPen(colors[i]);
				painter.setBrush(Qt::NoBrush);
				painter.drawPie(rect, startAngle[i] * 16, spanAngle[i] * 16);

				// Draw concentric circle
				painter.setPen(Qt::NoPen);
				painter.setBrush(QColor(255, 255, 255));
				painter.drawEllipse(x, y, w, h);

				painter.setPen(colors[i]);
				painter.drawArc(innerRect, startAngle[i] * 16, spanAngle[i] * 16);

				m_lastSelect = m_selectedSector;
			}
			else {
				painter.setPen(colors[i].darker());
				painter.setBrush(Qt::NoBrush);
			}
			//painter.drawPie(rect, startAngle[i] * 16, spanAngle[i] * 16);
		}

		if (!m_init && (m_selectedSector == -1))
		{
			//保留之前的选择
			painter.setPen(colors[m_lastSelect]);
			painter.setBrush(Qt::NoBrush);
			painter.drawPie(rect, startAngle[m_lastSelect] * 16, spanAngle[m_lastSelect] * 16);

			// Draw concentric circle
			painter.setPen(Qt::NoPen);
			painter.setBrush(QColor(255, 255, 255));
			painter.drawEllipse(x, y, w, h);

			painter.setPen(colors[m_lastSelect]);
			painter.drawArc(innerRect, startAngle[m_lastSelect] * 16, spanAngle[m_lastSelect] * 16);
		}
		m_init = false;
	}

	//void mouseMoveEvent(QMouseEvent* event) override
	//{
	//	int x = event->x();
	//	int y = event->y();
	//	int sector = getSector(x, y);
	//	if (sector != m_hoveredSector) {
	//		m_hoveredSector = sector;
	//		update();
	//		if (sector >= 0 && sector < 3) {
	//			QColor color;
	//			switch (sector) {
	//			case 0: color = Qt::red; break;
	//			case 1: color = Qt::green; break;
	//			case 2: color = Qt::blue; break;
	//			}
	//			qDebug() << "Hovering over sector" << sector << ", color is" << color.name();
	//		}
	//	}
	//}

	//void leaveEvent(QEvent*) override
	//{
	//	m_hoveredSector = -1;
	//	update();
	//}

	void mousePressEvent(QMouseEvent* event) override
	{
		int x = event->x();
		int y = event->y();
		int sector = getSector(x, y);
		if (sector != m_selectedSector) {
			m_selectedSector = sector;
			update();
			if (sector >= 0 && sector < 3) {
				QColor color;
				switch (sector) {
				case 0: color = Qt::red; break;
				case 1: color = Qt::green; break;
				case 2: color = Qt::blue; break;
				}
				qDebug() << "Selected sector" << sector << ", color is" << color.name();
			}
		}
	}

private:
	int getSector(int x, int y)
	{
		int dx = x - 100;
		int dy = y - 100;
		int r = qSqrt(dx * dx + dy * dy);
		if (r < 90) {
			qreal angle = qAtan2(-dy, dx) * 180 / M_PI;
			if (angle < 90) angle += 360;
			int sector = static_cast<int>((angle - 90) / 120);
			return sector;
		}
		return -1;
	}

	int m_hoveredSector = -1;
	int m_selectedSector = -1;
	bool m_init = true;
	int m_lastSelect = -1;
};

int main(int argc, char* argv[])
{
	QApplication a(argc, argv);

	ColorWheel w;
	w.show();

	return a.exec();
}

1.4 新的扇形画法*GraphicItem

可以通过QPainterPath和QRegion的方式来绘制。QPatinterPath含有substrate方法,然后通过QPainter绘制。同时QRegion也有对应的直接使用QPainter绘制的方法。setClipRegion可以设置当前可绘画的区域。

void Widget::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);
    QPainterPath path; // 定义QPainterPath对象

    int x = width() / 2;  // 获取widget的宽度
    int y = height() / 2; // 获取widget的高度
    int radius = qMin(x, y); // 确定半径

    QRectF rect(x - radius, y - radius, radius * 2, radius * 2); // 定义外接矩形

    path.moveTo(x, y); // 将起点移动到圆心
    path.arcTo(rect, 90, -120); // 添加90到210度的椭圆弧线,注意这里的角度单位是以1/16度来表示的
    path.lineTo(x, y); // 将路径连接回中心点

    int smallRadius = radius / 2; // 定义小扇形的半径
    QRectF smallRect(x - smallRadius, y - smallRadius, smallRadius * 2, smallRadius * 2); // 定义小扇形的外接矩形

    QPainterPath smallPath; // 定义小扇形的路径
    smallPath.moveTo(x, y); // 将起点移动到圆心
    smallPath.arcTo(smallRect, 90, -120); // 添加90到210度的椭圆弧线,注意这里的角度单位是以1/16度来表示的

    QRegion bigRegion(path.toFillPolygon().toPolygon()); // 定义大扇形的QRegion
    QRegion smallRegion(smallPath.toFillPolygon().toPolygon()); // 定义小扇形的QRegion
    bigRegion = bigRegion.subtracted(smallRegion); // 大扇形减去小扇形

    QBrush brush(Qt::NoBrush); // 创建空画刷
    painter.setBrush(brush); // 设置画刷为空,即不填充图形

    QPen pen(Qt::black); // 定义画笔,颜色为黑色
    pen.setWidth(2); // 设置画笔宽度
    painter.setPen(pen); // 设置画笔

    painter.setClipRegion(bigRegion); // 设置绘制区域
    painter.drawPath(path); // 绘制大扇形的路径轮廓

    painter.setClipping(false); // 取消原来的绘制区域
    painter.setClipRegion(smallRegion); // 设置绘制区域为小扇形的QRegion
    painter.drawPath(smallPath); // 绘制小扇形的路径轮廓
}


2、训练过程

  这里给出了训练过程,目前中文语料比较少,因此得到的有效信息不充足。所以每次都是中文翻译为英语后去问答,出乎意料的是代码基本修改下都能跑起来。
在这里插入图片描述

3、错误原因

  如果指出ChatGPT的错误,它会给出部分错误原因,虽然有时候和给出的错误原因不太符合代码,但在后续自己Debug的过程中能发现很多有用的信息。如在计算角度使用QAtan2 时应取-dy。

In this modified code, a new m_selectedSector variable has been added to track which sector is currently selected by the user (i.e. the one the user clicked on). The paintEvent() method has also been updated to fill in the color of the selected sector even when the mouse is not moving. This is done by checking whether m_selectedSector is equal to the current sector being painted (i), and if so, filling in the sector with its color.

In addition, a new mousePressEvent() method has been added to handle the case where the user clicks on a sector. When this happens, m_selectedSector is updated, and the widget is repainted with the selected sector filled in with its color. The code also outputs the color of the selected sector to the console using qDebug().

Finally, the leaveEvent() method has been updated to reset both m_hoveredSector and m_selectedSector to -1 when the mouse leaves the widget, which causes all of the sectors to be drawn with no fill color.

在此修改后的代码中,添加了一个新的m_selectedSector变量来跟踪用户当前选择的扇区(即用户单击的扇区)。paintEvent() 方法也已更新,即使在鼠标不移动时也能填充所选扇区的颜色。这是通过检查m_selectedSector是否等于当前正在绘制的扇区 (i) 来完成的,如果是,则用其颜色填充扇区。 此外,还添加了一个新的 mousePressEvent() 方法来处理用户单击扇区的情况。发生这种情况时,m_selectedSector将更新,并且小部件将重新绘制,并用其颜色填充所选扇区。该代码还使用 qDebug() 将所选扇区的颜色输出到控制台。 最后,当鼠标离开小部件时,leaveEvent() 方法已更新为将 m_hoveredSector 和 m_selectedSector 重置为 -1,这会导致绘制所有扇区时没有填充颜色。

The error was caused by a mistake in the calculation of the angle variable. Instead of using +dy, it should be -dy, since the y-axis is inverted in the coordinate system used by QPainter (i.e. positive y is downwards). This causes the angle to be calculated correctly, which in turn allows the correct sector to be determined based on the angle.

I hope this corrected method works better for you. Please let me know if you have any further questions or issues.

该错误是由角度变量计算错误引起的。它不应该使用 +dy,而应该是 -dy,因为 y 轴在 QPainter 使用的坐标系中是反转的(即正 y 向下)。这会导致正确计算角度,从而允许根据角度确定正确的扇区。 我希望这种更正后的方法对您更有效。如果您有任何其他问题或问题,请告诉我。

The issue with the previous implementation was that it incorrectly assumed that sector 1 starts at 120 degrees and sector 2 starts at 240 degrees, which causes the two sectors to be calculated inversely. The corrected implementation addresses this issue by correctly identifying sector 1 as the sector starting at 30 degrees, and sector 2 as the sector starting at 150 degrees.

I apologize for any confusion caused by my earlier responses, and I hope this updated implementation resolves the issue. Please let me know if you have any further questions or concerns.

先前实现的问题在于,它错误地假定扇区 1 从 120 度开始,扇区 2 从 240 度开始,这会导致两个扇区的计算相反。更正后的实现通过正确标识扇区 1 作为从 30 度开始的扇区,将扇区 2 标识为从 150 度开始的扇区来解决此问题。 对于我之前的回复造成的任何混乱,我深表歉意,我希望这个更新的实现可以解决这个问题。如果您有任何其他问题或疑虑,请告诉我。

4、涉及知识点

------待更新-------------------------------------------------

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt:依据ChatGpt生成Qt可选择扇形按钮 的相关文章

  • Qt进度条不是递增的,而是跳跃的

    我遇到 Qt GUI 进度条问题 问题是 对于较大的文件 350MB 及以上 进度条在开始时按预期工作 然后它似乎有一段时间没有移动 然后在工作完成时突然跳到 100 我不确定为什么会发生这种情况 我想知道是否有一些 Qt 之谜导致了这种情
  • 无法锚定到不是父级或同级 QML QtQuick 的项目

    我正在使用 QML 开发 python 桌面应用程序 我的 QML 文件中有这个 SplitView anchors fill parent orientation Qt Horizontal Rectangle color 272822
  • 使用 Qt 在 xoverlay 之上绘制

    我希望在使用 Xoverlay 渲染的视频流之上绘制一些 UI 我正在使用 gstreamer 播放视频并使用 xoverlay 在 xvimagesink 上渲染它 我的小部件继承自 QGLWidget 我希望使用 QPainter 绘制
  • 是否可以在切换 QTreeWidgetItem 复选框时创建信号?

    我使用下面的代码创建了一个也是 QTreeWidgetItem 的复选框 Populate list QTreeWidgetItem program createCheckedTreeItem QString fromStdString i
  • 无法将 QMap 传递到 SLOT

    所以 这有效 h public slots void addMenu QString passedName signals void clicked const QString text cpp signalMapper new QSign
  • Qt Designer 与手动编码

    每次我使用图形工具包开始一个项目时 第一个冲突就会发生在如何处理视觉设计和小部件布局的决定上 图形工具还是手动编码 这是一个非常棘手 主观的问题 因为大多数人会根据个人喜好来决定 它还很大程度上取决于图形工具的质量 在这种情况下 我想只关注
  • 无法隐藏 QMenu 对象 QMenu::setVisible()?

    我已经建立了一个QMenu MainMenu在我的上面MainWindow在我的应用程序中 大家都习惯了 我有以下QMenu主菜单 文件 编辑 SuperHeavyExpertMenus 设置 帮助 我想隐藏子树SuperHeaverExp
  • 一个阻塞但非模态的 QDialog?

    我有一堆图像 我想对其执行一些操作 处理完每个图像后 我的程序应该弹出一个对话框 提示用户是否要继续处理下一个图像或中止 在此之前 他们应该有机会对图像或参数进行一些手动更改 无论如何 他们必须能够访问应用程序的窗口 而调用对话框的方法的执
  • QT“找不到 Qt 平台插件“xcb””

    我出于学术原因安装了QT everywhere 5 15开源版 但无法运行程序 首先 我编译了必要的源文件make并安装了QT Creator 然后我选择qmake来运行其中的程序 当我尝试运行示例程序时 遇到以下错误 qt qpa plu
  • 在 Qt C++ 中使用多个键

    我正在构建 坦克 游戏 我使用关键事件在地图上运行我的坦克 实际上我当时只能使用一把钥匙 但我需要有能力去完成任务 同时向上和离开 这是我的单键事件代码 switch event gt key case Qt Key Up if ui gt
  • Qt 远程文件浏览器

    我想知道是否有人使用过 Qt 远程文件浏览器 根据我的理解 我有两个选择 当涉及到远程文件时 将 QFileDilaog 与自定义代理模型结合使用 该模型将负责提供远程文件 目录结构 使用自定义对话框 并为本地文件提供标准文件系统模型 为远
  • 删除 QComboBox“下拉”动画

    我正在使用 Qt 4 8 并且想在单击 QComboBox 时摆脱 下拉 动画 我也想稍微移动一下 到目前为止 我一直在考虑重新实现 showPopup 和 hidePopup 但不知道如何使其工作 此外 每次我尝试使用 CSS 进行移动或
  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • [本机]:在Qt for Android中使用Java函数和第3方库[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最近我用qt写了一个android应用程序 但我有一个很大的问题 我可以使用 调用一些原生的android API 比如调用特殊的activit
  • QTableView 中的虚拟列?

    我开始学习 Qt4 模型 视图编程 我有初学者问题 我有一个简单的应用程序 其中显示 sqlite 表QTableView class Model QtSql QSqlTableModel def init self parent None
  • MAC 上的 QT/C++ - 未设置应用程序图标

    我正在努力解决的奇怪问题 在与我的 pro QT 项目文件相同的文件夹中 我有一个 Resources myIcon png 我试图将其设置为我构建的应用程序的图标 在 OSX 上运行 我阅读了文档 它建议在 pro 文件中添加 ICON
  • QGraphicsView 和 eventFilter

    这个问题已经困扰我两天多了 所以我想我应该问一下 我在Win7上使用Qt 4 5 3 用VC2008编译 我有 MyGraphicsView 继承 QGraphicsView 和 MyFilter 继承 QObject 类 当我将 MyFi
  • QSpinBox 输入 NaN 作为有效值

    我正在尝试扩展 QSpinBox 以能够输入 NaN 或 nan 作为有效值 根据文档 我应该使用 textFromValue valueFromText 和 validate 函数来完成此操作 但我无法让它工作 因为它仍然不允许我输入除数
  • Qt Creator:如何区分 win32 和 win64

    我必须在 pro 文件中执行类似的操作 win32 LIBS L 3rdparty libusb win32 lib msvc llibusb else win64 LIBS L 3rdparty libusb win32 lib msvc
  • Qt mouseReleaseEvent() 未触发?

    我有一个显示图片的库 我们称之为 PictureGLWidget 其中 class PictureGLWidget public QGLWidget 所以 PictureGLWidget 扩展了 QGLWidget 在PictureGlWi

随机推荐

  • 【面试专题】Spring篇②

    个人主页 个人主页 系列专栏 Java面试专题 目录 1 spring bean的循环依赖 2 springMVC执行流程 3 Springboot自动配置原理 4 Spring框架常见的注解 Spring SpringMVC Spring
  • channel的超时问题

    问题 并发编程的通信中 超时问题不可忽视 它指的是向channel写数据时发现channel已满 或者从channel尝试获取数据发现channel为空 如果不正确处理这些情况 很可能会导致整个goroutine锁死 i lt ch 不出问
  • Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 failed with exit code 1问题总结及解决方案

    原文地址 http blog csdn net dream it life article details 5488121 最近因为需要 要用C C Objective C三种C语言3C混编的开发程序 在当然方法也和大家说一下吧 就是在Xc
  • 【PaddleDetection】基于PaddleDetection的齿轮瑕疵检测:从模型训练到部署中的那些坑

    目录 0 题目简介 1 Baseline项目的本地化 1 1 飞桨环境配置 飞桨安装注意事项 1 2 PaddleDetection安装 PaddleDetection注意事项 1 3 数据集下载与配置 PaddleX安装注意事项 1 4
  • windows下编译caffe

    windows在编译caffe有两种途径 第一直接从github上clone windows分支的源码 根据提供的cmakeLIsts开始编译 这种方法自由选择编译器 依赖的库文件版本等 可能自由度更大 但是也有比较多的问题 https g
  • 介绍Flex UI 测试工具:FlexMonkey

    相信许多人都知道Flex的单元测试工具 FlexUnit或者ASUnit 但是对于UI测试工具可能很少有人了解 那么目前有什么FlexUI测试工具呢 答案是FlexMonkey FlexMonkey是一个Flex应用的测试框架 他可以提供对
  • 交叉编译mbedtls

    交叉编译mbedtls 使用INTEL工具链编译 编译流程 编译成功文件默认的存放位置 使用mipsel 24kec linux uclibc工具链编译 编译流程 编译成功文件默认的存放位置 使用INTEL工具链编译 编译流程 make C
  • 最牛B的编码套路

    最近 我大量阅读了Steve Yegge的文章 其中有一篇叫 Practicing Programming 练习编程 写成于2005年 读后令我惊讶不已 与你所相信的恰恰相反 单纯地每天埋头于工作并不能算是真正意义上的锻炼 参加会议并不能锻
  • js 字符串函数总结(splice()、split()·····)

    1 自己比较易混淆的splice substring substr slice方法 第一个参数指定子字符串开始位置 第二个参数表示子字符串最后一个字符后面的位置 substring方法 第一个参数指定子字符串开始位置 第二个参数表示子字符串
  • C++执行程序的过程

    C 执行程序的过程 C 的源程序是以 cpp作为后缀的 C语言则是 c cpp保存也可以兼容 为了使计算机能够执行高级语言的代码 必须对源程序做个处理 用编译器把源程序处理成计算机可以识别的二进制目标程序 一般目标程序的后缀为 obj 编译
  • 新手必看,10个常见的Python运行时错误

    初入门的 Python小白 在运行代码时免不了会遇到一些错误 刚开始可能看起来比较费劲 随着代码量的积累 熟能生巧 当遇到一些运行时错误时能够很快的定位问题原题 我整理了常见的 10 个错误 希望能够帮助到大家 1 忘记在 if for d
  • C/C++将数据读写到指定地址

    0 背景 外设私有 内部 DMA在访问core内sram时 发现没有权限 也就是说 core不可作为slave设备被访问 导致外设的dma模式无法使用 但这并没有问题 我们可以将数据写到固定的地址 外部sram上 即可 下面介绍几种常用的方
  • 那个当年的三本学渣,为啥最后进了大厂?

    自我介绍 我是一名普通的三本大学生 自学开发 相继经历了接外包 创业 合伙人跑路等一系列事情 从一开始对于计算机的一无所知到现在拿到了一线互联网企业的special offer 磕磕碰碰 一路走来 可谓辛酸苦辣 大一小白 我就读的专业偏计算
  • ELK介绍及部署安装运用

    1 ELK简介 ELK表示 Elasticsearch Logstash Kibana 三个开源软件的缩写 是集成这三个软件于一体的日志分析及全文搜索解决方案 被广泛应用于实时日志处理 文档索引和搜索 以及数据的多维查询和统计分析等领域 数
  • 每日一题:二分答案

    二分答案 题目 Daimayuan Online Judge 首先读入 n 和 k 然后读入序列 a 接下来使用 l 和 r 表示最小值的猜测区间 由于题目中规定了最小值和元素范围 因此我们可以将上界设置为 1e18 下界设置为 1 二分查
  • 开机无法进入,chroot无法切换真实根环境

    1 开机效果图 2 关机 调整开机顺序 从光驱启动 进入挽救模式 3 尝试切换到真实根环境 失败 错误提示说 进入shell失败了 没有这个文件 4 ls查看发现这个文件是有的 但是这个文件是在挽救模式下的 真实根下面是没有的 5 真实根的
  • linux spi设备使用,linux spi驱动开发学习(一)-----spi子系统架构

    linux spi驱动开发学习 一 spi子系统架构 一 spi设备 各定义在include linux spi h structspi device structdevice dev 设备文件 structspi master maste
  • 蒙特卡洛法简述

    蒙特卡洛法简述 一 简介 1 蒙特卡洛方法又称随机模拟法 随机抽样技术 是一种随机模拟方法 蒙特卡洛法使用随机数 伪随机数 以概率和统计理论方法为基础 将所要求解的问题同一定的概率模型相互联系 用计算机实现统计模拟和抽样 以获得问题近似解的
  • LabVIEW FPGA PCIe开发讲解-实战篇:实验61:PCIe DMA+8位ADC(模拟数据采集卡)

    1 实验内容 现在很多电脑PC或者工控机主板上面都集成了PCIe插座 可以直接插入PCIe板卡 优点是卡槽标准 插拔简单 传输速度极快 对于高速采集测试测量领域 PCIe用途非常广泛 最大极限带宽可以到6 6GB s 这个速度可以直接用来做
  • Qt:依据ChatGpt生成Qt可选择扇形按钮

    目录 引言 1 生成过程 1 1 饼图 2 2 扇形图 3 3 可选择扇形按钮 1 4 新的扇形画法 GraphicItem 2 训练过程 3 错误原因 4 涉及知识点 引言 因为项目需要绘制一个中间为圆心 包含数个扇形的可选择按钮 正好C