国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

這篇具有很好參考價(jià)值的文章主要介紹了【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、QT(WIN10)安裝

1.首先下載QT(VS有對(duì)應(yīng)的QT)

下載鏈接
windows程序的后綴是.exe
Ubuntu程序的后綴是.run

2.安裝QT

按照安裝指示操作、注冊(cè)QT,然后出現(xiàn)”選擇“界面時(shí)勾選“MinGW 7.3.0 64-bit”,“MSVC 2017 64-bit”;點(diǎn)擊“Developer and Designer Tools”前的尖號(hào),打開(kāi)其中選項(xiàng),勾選“MinGW 7.3.0 64-bit”。

二、將QT加載到VS中

在VS"工具"→"擴(kuò)展與更新"→"聯(lián)機(jī)"中搜索“QT”并下載,重啟生效
【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

三、QT設(shè)置

1.在VS"Qt Vs Tools"→"QT Versions"中添加"msvc2017_64"qmake的路徑

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

2.在"General"→"QT Designer"中將"False"改為"True"

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

四、QT程序打包

1.新建QT Widges項(xiàng)目,Base class也選擇"QWidget"類(lèi)(QMainWindow是一個(gè)含有菜單的窗口、QDialog是對(duì)話框、QWidget是不確定的窗口)

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

2.先在VS中使用Release模式發(fā)布,在x64中找到生成的exe

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

3.在空白處"shift"+右鍵打開(kāi)Windows PowerShell模式,使用QT自帶的搜索程序QT\mingw73_64\bin\windeployqt.exe將exe需要的動(dòng)態(tài)庫(kù)都拷貝過(guò)來(lái)

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

4. 安裝包制作,首先下載Inno Setup官方鏈接

5.新建腳本模式

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

6.修改程序信息

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

7.設(shè)置打包程序位置

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

8.添加原始exe和文件夾路徑

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

9.下面這個(gè)關(guān)聯(lián)格式的不要點(diǎn)

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

10.創(chuàng)建快捷方式(無(wú)需修改)

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

11.設(shè)置安裝向?qū)?無(wú)需修改)

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

12.選擇安全模式(無(wú)需修改)

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

13.語(yǔ)言選擇(無(wú)需修改,沒(méi)得中文)

14.設(shè)置安裝文件的相關(guān)信息(生成的exe位置、名稱、圖標(biāo)和安裝時(shí)的密碼)

后面的一路ok就好了就可以打開(kāi)了

#五、第一個(gè)項(xiàng)目(攝像頭播放)

要用到opencv調(diào)攝像頭,所以把opencv也配置到vs中:
1.在”VC++目錄"→“包含目錄”中增加opencv\bulid的include和include中的opencv2路徑
2.在"庫(kù)目錄"中增加opencv\build\x64\vc15\lib路徑
3.在"鏈接器"→"輸入"→"附加依賴項(xiàng)"中增加opencv_worldxxx_lib(如果配置為Debug,選擇opencv_worldxxxd.lib
如果為Release,選擇opencv_worldxxx.lib)

1.原代碼(已改過(guò)命名方式)

ui

/********************************************************************************
** Form generated from reading UI file 'QT_learning1.ui'
**
** Created by: Qt User Interface Compiler version 5.14.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_QT_LEARNING1_H
#define UI_QT_LEARNING1_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_QT_learning1Class
{
public:
    QPushButton *Open_Camera;
    QPushButton *Capture;
    QPushButton *Close_Camera;
    QLabel *Video;
    QLabel *Photo;
    QLabel *label;
    QLabel *label_2;

    void setupUi(QWidget *QT_learning1Class)
    {
        if (QT_learning1Class->objectName().isEmpty())
            QT_learning1Class->setObjectName(QString::fromUtf8("QT_learning1Class"));
        QT_learning1Class->resize(600, 400);
        Open_Camera = new QPushButton(QT_learning1Class);
        Open_Camera->setObjectName(QString::fromUtf8("Open_Camera"));
        Open_Camera->setGeometry(QRect(100, 330, 93, 28));
        Capture = new QPushButton(QT_learning1Class);
        Capture->setObjectName(QString::fromUtf8("Capture"));
        Capture->setGeometry(QRect(250, 330, 93, 28));
        Close_Camera = new QPushButton(QT_learning1Class);
        Close_Camera->setObjectName(QString::fromUtf8("Close_Camera"));
        Close_Camera->setGeometry(QRect(400, 330, 93, 28));
        Video = new QLabel(QT_learning1Class);
        Video->setObjectName(QString::fromUtf8("Video"));
        Video->setGeometry(QRect(40, 40, 224, 224));
        Photo = new QLabel(QT_learning1Class);
        Photo->setObjectName(QString::fromUtf8("Photo"));
        Photo->setGeometry(QRect(310, 40, 224, 224));
        label = new QLabel(QT_learning1Class);
        label->setObjectName(QString::fromUtf8("label"));
        label->setGeometry(QRect(110, 280, 81, 16));
        label_2 = new QLabel(QT_learning1Class);
        label_2->setObjectName(QString::fromUtf8("label_2"));
        label_2->setGeometry(QRect(410, 280, 72, 15));

        retranslateUi(QT_learning1Class);

        QMetaObject::connectSlotsByName(QT_learning1Class);
    } // setupUi

    void retranslateUi(QWidget *QT_learning1Class)
    {
        QT_learning1Class->setWindowTitle(QCoreApplication::translate("QT_learning1Class", "QT_learning1", nullptr));
        Open_Camera->setText(QCoreApplication::translate("QT_learning1Class", "\346\211\223\345\274\200\346\221\204\345\203\217\345\244\264", nullptr));
        Capture->setText(QCoreApplication::translate("QT_learning1Class", "\346\213\215\347\205\247", nullptr));
        Close_Camera->setText(QCoreApplication::translate("QT_learning1Class", "\345\205\263\351\227\255\346\221\204\345\203\217\345\244\264", nullptr));
        Video->setText(QString());
        Photo->setText(QString());
        label->setText(QCoreApplication::translate("QT_learning1Class", "\346\221\204\345\203\217\345\244\264\351\242\204\350\247\210", nullptr));
        label_2->setText(QCoreApplication::translate("QT_learning1Class", "\347\205\247\347\211\207", nullptr));
    } // retranslateUi

};

namespace Ui {
    class QT_learning1Class: public Ui_QT_learning1Class {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_QT_LEARNING1_H

h文件

#pragma once

#include <QtWidgets/QWidget>
#include "ui_QT_learning1.h"

#ifndef QT_LEARNING1_H
#define QT_LEARNING1_H

#include <opencv2\core\core.hpp>
#include <QWidget>
#include <QImage>
#include <QTimer>     // 設(shè)置采集數(shù)據(jù)的間隔時(shí)間


#include <QGraphicsScene>  
#include <QGraphicsView>  

#include <highgui/highgui_c.h>  //包含opencv庫(kù)頭文件

#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>  //opencv申明

#include <opencv.hpp>
using namespace cv;

namespace Ui {
	class QT_learning1;
}

class QT_learning1 : public QWidget
{
	Q_OBJECT

public:
	explicit QT_learning1(QWidget *parent = 0);
	~QT_learning1();

private slots:
	void openCamara();      // 打開(kāi)攝像頭
	void getFrame();       // 讀取當(dāng)前幀信息
	void closeCamara();     // 關(guān)閉攝像頭。
	void takingPictures();  // 拍照

private:
	Ui::QT_learning1Class ui;
	QTimer    *timer;
	QImage    *imag;
	CvCapture *cam;// 視頻獲取結(jié)構(gòu), 用來(lái)作為視頻獲取函數(shù)的一個(gè)參數(shù)
	IplImage  *frame;
	VideoCapture capture1;
	Mat showimage;
	QImage Mat2Qimage(Mat cvImg);

	//QT_learning1(QWidget * parent);
		//申請(qǐng)IplImage類(lèi)型指針,就是申請(qǐng)內(nèi)存空間來(lái)存放每一幀圖像
};

#endif // QT_LEARNING1_H

cpp文件
(攝像頭找不到得話,將capture1.open(0)中的0改成1或者-1試試)

#include "QT_learning1.h"
#include<stdlib.h>
#include <ctime>
#include<random>
#include<opencv.hpp>
using namespace cv;
using namespace std;





QT_learning1::QT_learning1(QWidget *parent) :
	QWidget(parent)
{
	ui.setupUi(this);
	connect(ui.Open_Camera, SIGNAL(clicked()), this, SLOT(openCamara()));
	connect(ui.Capture, SIGNAL(clicked()), this, SLOT(takingPictures()));
	connect(ui.Close_Camera, SIGNAL(clicked()), this, SLOT(closeCamara()));
	setWindowTitle(tr("Main Window"));

	timer = new QTimer(this);
	imag = new QImage();
	connect(timer, SIGNAL(timeout()), this, SLOT(getFrame()));//超時(shí)就讀取當(dāng)前攝像頭信息
}
QT_learning1::~QT_learning1()
{

}

void QT_learning1::openCamara()
{
	capture1.open(0);                                            //打開(kāi)攝像頭,從攝像頭中獲取視頻
	timer->start(10);

}

void QT_learning1::getFrame() {
	capture1 >> showimage;
	QImage imag = Mat2Qimage(showimage);

	ui.Video->setScaledContents(true);
	ui.Video->setPixmap(QPixmap::fromImage(imag));
}

void QT_learning1::closeCamara()
{
	timer->stop();
	ui.Video->clear();
	capture1.release();
}



void QT_learning1::takingPictures()
{
	capture1.open(0);
	capture1 >> showimage;
	QImage img = Mat2Qimage(showimage);
	ui.Photo->setScaledContents(true);
	ui.Photo->setPixmap(QPixmap::fromImage(img));

	string writePath = "./";
	string name;
	time_t now = time(0);
	name = writePath + to_string(now) + ".jpg";
	imwrite(name, showimage);

}


QImage QT_learning1::Mat2Qimage(Mat cvImg)
{
	// 8-bits unsigned, NO. OF CHANNELS = 1
	if (cvImg.type() == CV_8UC1)
	{
		QImage image(cvImg.cols, cvImg.rows, QImage::Format_Indexed8);
		// Set the color table (used to translate colour indexes to qRgb values)
		image.setColorCount(256);
		for (int i = 0; i < 256; i++)
		{
			image.setColor(i, qRgb(i, i, i));
		}
		// Copy input Mat
		uchar *pSrc = cvImg.data;
		for (int row = 0; row < cvImg.rows; row++)
		{
			uchar *pDest = image.scanLine(row);
			memcpy(pDest, pSrc, cvImg.cols);
			pSrc += cvImg.step;
		}
		return image;
	}
	// 8-bits unsigned, NO. OF CHANNELS = 3
	else if (cvImg.type() == CV_8UC3)
	{
		// Copy input Mat
		const uchar *pSrc = (const uchar*)cvImg.data;
		// Create QImage with same dimensions as input Mat
		QImage image(pSrc, cvImg.cols, cvImg.rows, cvImg.step, QImage::Format_RGB888);
		return image.rgbSwapped();
	}
	else if (cvImg.type() == CV_8UC4)
	{
		//		qDebug() << "CV_8UC4";
				// Copy input Mat
		const uchar *pSrc = (const uchar*)cvImg.data;
		// Create QImage with same dimensions as input Mat
		QImage image(pSrc, cvImg.cols, cvImg.rows, cvImg.step, QImage::Format_ARGB32);
		return image.copy();
	}
	else
	{
		//		qDebug() << "ERROR: Mat could not be converted to QImage.";
		return QImage();
	}
}

main.cpp

#include "QT_learning1.h"
#include <QtWidgets/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
	QT_learning1 w;
    w.show();
    return a.exec();
}

效果
還行,但有兩個(gè)問(wèn)題:
1.拍照得到的照片失真,原因是打開(kāi)攝像頭和拍照重復(fù)使用攝像頭接口,導(dǎo)致數(shù)據(jù)傳輸變慢、沖突
2.沒(méi)有多線程,如果再來(lái)個(gè)功能或者運(yùn)算量變大就over了
【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

2.把cpp文件替換為下面得即可解決第一個(gè)問(wèn)題

#include "QT_learning1.h"
#include<stdlib.h>
#include <thread>
#include <ctime>
#include<random>
#include<opencv.hpp>
using namespace cv;
using namespace std;


QT_learning1::QT_learning1(QWidget *parent) :
	QWidget(parent)
{
	ui.setupUi(this);
	connect(ui.Open_Camera, SIGNAL(clicked()), this, SLOT(openCamara()));
	connect(ui.Capture, SIGNAL(clicked()), this, SLOT(takingPictures()));
	connect(ui.Close_Camera, SIGNAL(clicked()), this, SLOT(closeCamara()));
	setWindowTitle(tr("Main Window"));

	timer = new QTimer(this);
	imag = new QImage();
	connect(timer, SIGNAL(timeout()), this, SLOT(getFrame()));//超時(shí)就讀取當(dāng)前攝像頭信息
}
QT_learning1::~QT_learning1()
{

}

void QT_learning1::openCamara()
{
	capture1.open(0);                                            //打開(kāi)攝像頭,從攝像頭中獲取視頻
	timer->start(10);

}

void QT_learning1::getFrame() {
	capture1 >> showimage;
	QImage imag = Mat2Qimage(showimage);

	ui.Video->setScaledContents(true);
	ui.Video->setPixmap(QPixmap::fromImage(imag));
}

void QT_learning1::closeCamara()
{
	timer->stop();
	ui.Video->clear();
	capture1.release();
}



void QT_learning1::takingPictures()
{
	QImage img = Mat2Qimage(showimage);
	ui.Photo->setScaledContents(true);
	ui.Photo->setPixmap(QPixmap::fromImage(img));

	string writePath = "./";
	string name;
	time_t now = time(0);
	name = writePath + to_string(now) + ".jpg";
	imwrite(name, showimage);

}


QImage QT_learning1::Mat2Qimage(Mat cvImg)
{
	// 8-bits unsigned, NO. OF CHANNELS = 1
	if (cvImg.type() == CV_8UC1)
	{
		QImage image(cvImg.cols, cvImg.rows, QImage::Format_Indexed8);
		// Set the color table (used to translate colour indexes to qRgb values)
		image.setColorCount(256);
		for (int i = 0; i < 256; i++)
		{
			image.setColor(i, qRgb(i, i, i));
		}
		// Copy input Mat
		uchar *pSrc = cvImg.data;
		for (int row = 0; row < cvImg.rows; row++)
		{
			uchar *pDest = image.scanLine(row);
			memcpy(pDest, pSrc, cvImg.cols);
			pSrc += cvImg.step;
		}
		return image;
	}
	// 8-bits unsigned, NO. OF CHANNELS = 3
	else if (cvImg.type() == CV_8UC3)
	{
		// Copy input Mat
		const uchar *pSrc = (const uchar*)cvImg.data;
		// Create QImage with same dimensions as input Mat
		QImage image(pSrc, cvImg.cols, cvImg.rows, cvImg.step, QImage::Format_RGB888);
		return image.rgbSwapped();
	}
	else if (cvImg.type() == CV_8UC4)
	{
		//		qDebug() << "CV_8UC4";
				// Copy input Mat
		const uchar *pSrc = (const uchar*)cvImg.data;
		// Create QImage with same dimensions as input Mat
		QImage image(pSrc, cvImg.cols, cvImg.rows, cvImg.step, QImage::Format_ARGB32);
		return image.copy();
	}
	else
	{
		//		qDebug() << "ERROR: Mat could not be converted to QImage.";
		return QImage();
	}
}

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】
這樣就ok了

3.多線程

C++中可直接使用thread庫(kù)實(shí)現(xiàn)
而QT提供了兩種方式實(shí)現(xiàn)多線程:
1.繼承QThread的run函數(shù),是個(gè)虛函數(shù),會(huì)自動(dòng)調(diào)用的
2.繼承于QObject的類(lèi)用moveToThread函數(shù)轉(zhuǎn)移到一個(gè)Thread里
第一種QThread已經(jīng)不推薦了,我們使用QObject實(shí)現(xiàn)

1.QObject實(shí)現(xiàn)思路

【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】

1.創(chuàng)鍵一個(gè)繼承于 QObject 的自定義線程類(lèi)(如:MyThread),用來(lái)盛放比較耗時(shí),需要放入子線程的處理函數(shù)
(1)定義一個(gè)線程處理函數(shù)(如:MyWork),當(dāng)然也可以定義多個(gè),這時(shí)多個(gè)處理函數(shù)就共用一個(gè)子線程
(2)在處理函數(shù)中進(jìn)行處理,此過(guò)程可能時(shí)間較長(zhǎng)(如:QThread::sleep(1))
(3)在處理函數(shù)中發(fā)送處理完成的信號(hào)(如:emit signal_back()),當(dāng)然該信號(hào)中可能含有處理的結(jié)果信息(如計(jì)算結(jié)果)

2、 在主線程(亦稱界面線程)中創(chuàng)建一個(gè)子線程(QThread* subthread = new QThread(this))

3、新建一個(gè)自定義線程類(lèi)對(duì)象(MyThread* m_MyThread = new MyThread())

4、將自定義線程類(lèi)對(duì)象移入子線程容器中(m_MyThread->moveToThread(subthread)),其實(shí)也可以移入多個(gè)自定義線程類(lèi)到同一個(gè)subthread中,這時(shí)他們就共享一個(gè)子線程了

5、連接主線程和子線程之間的信號(hào)和槽
(1)主線程——>子線程,主線程的信號(hào)和子線程的槽
connect ( this, &MainWindow::StartThread, m_MyThread, &MyThread::MyWork )
(2)子線程——>主線程,子線程的信號(hào)和主線程的槽
connect (m_MyThread, &MyThread::signal_back, this, &MainWindow::slot_handle_finish )

6、子線程使用完畢需要回收銷(xiāo)毀,不然該線程會(huì)一直占用,而系統(tǒng)可分配的線程數(shù)量是有限的

(1)subthread->qiut(); //該停止函數(shù)比較弱,會(huì)等到線程處理函數(shù)MyWork()的任務(wù)執(zhí)行完之后,才會(huì)停止線程

(2)subthread->wait();

所有通常會(huì)加入一個(gè)標(biāo)志位,來(lái)終止任務(wù)。
未完待續(xù)。。。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-471168.html

到了這里,關(guān)于【使用VS開(kāi)發(fā)的第一個(gè)QT項(xiàng)目——實(shí)現(xiàn)相機(jī)功能(包括QT下載、配置、攝像頭程序)】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • VueHub:我用 ChatGPT 開(kāi)發(fā)的第一個(gè)項(xiàng)目,送給所有 Vue 愛(ài)好者

    VueHub:我用 ChatGPT 開(kāi)發(fā)的第一個(gè)項(xiàng)目,送給所有 Vue 愛(ài)好者

    大家好,我是DOM哥。 我用 ChatGPT 開(kāi)發(fā)了一個(gè) Vue 的資源導(dǎo)航網(wǎng)站。 不管你是資深 Vue 用戶,還是剛?cè)腴T(mén)想學(xué)習(xí) Vue 的小白,這個(gè)網(wǎng)站都能幫助到你。 網(wǎng)站地址:https://dombro.site/vue#/vue 純凈模式:https://dombro.site/spa/#/vue 項(xiàng)目托管在 GitHub,訪問(wèn)不了的可以私信我喲,包教包會(huì) Vu

    2023年04月27日
    瀏覽(25)
  • VS開(kāi)發(fā)QT項(xiàng)目,手寫(xiě)按鈕槽函數(shù)避坑

    VS開(kāi)發(fā)QT項(xiàng)目,手寫(xiě)按鈕槽函數(shù)避坑

    由于最近開(kāi)發(fā)需要在VS2017上配置QT開(kāi)發(fā)環(huán)境,進(jìn)行QT項(xiàng)目的開(kāi)發(fā),之前從來(lái)沒(méi)有這樣使用過(guò),在此記一些坑。 QT的槽函數(shù)是非常方便的,使用QT Creator可以自動(dòng)生成代碼,方便快捷。但是代碼可讀性不強(qiáng),一些連接方面的信息都被隱藏了。由于之前一直使用QT Creator,所以其實(shí)還

    2023年04月13日
    瀏覽(21)
  • 【W(wǎng)eb3 系列開(kāi)發(fā)教程——?jiǎng)?chuàng)建你的第一個(gè) NFT(8)】如何開(kāi)發(fā)一個(gè)成功的 NFT 項(xiàng)目 | NFT 社區(qū)建設(shè)技巧

    ?? 本文首發(fā)自 前端修羅場(chǎng)(點(diǎn)擊加入),是 一個(gè)由 資深開(kāi)發(fā)者 獨(dú)立運(yùn)行 的專(zhuān)業(yè)技術(shù)社區(qū) ,我專(zhuān)注 Web 技術(shù)、Web3、區(qū)塊鏈、答疑解惑、面試輔導(dǎo)以及職業(yè)發(fā)展 。 博主創(chuàng)作的 《Web3 實(shí)戰(zhàn)教程》(點(diǎn)擊訂閱) ,已經(jīng)幫助許多開(kāi)發(fā)者成功鑄造 NFT,內(nèi)容淺顯易懂,能夠快速對(duì) W

    2024年02月05日
    瀏覽(26)
  • 【項(xiàng)目實(shí)踐】海康威視工業(yè)相機(jī)SDK開(kāi)發(fā)小白版入門(mén)教程(VS2015+OpenCV4.5.1)

    【項(xiàng)目實(shí)踐】??低暪I(yè)相機(jī)SDK開(kāi)發(fā)小白版入門(mén)教程(VS2015+OpenCV4.5.1)

    ??由于學(xué)校要求暑期實(shí)習(xí),于是找了一位學(xué)長(zhǎng)開(kāi)的公司,接了一個(gè)項(xiàng)目,是 對(duì)??低暪I(yè)相機(jī)(MV_CE200_10GM)進(jìn)行二次開(kāi)發(fā),讀取其圖像并做分析處理。 于是花了一點(diǎn)時(shí)間查找的相關(guān)資料并記錄一些 入門(mén)要點(diǎn) 。 ??想先說(shuō)說(shuō)一些 “嘗試授人與漁” 的話,也是自己的一

    2024年02月04日
    瀏覽(39)
  • VS基于Qt上創(chuàng)建項(xiàng)目出現(xiàn)紅波浪線線及項(xiàng)目創(chuàng)建不了的問(wèn)題,給出個(gè)人的一個(gè)解決方法供給大家參考

    VS基于Qt上創(chuàng)建項(xiàng)目出現(xiàn)紅波浪線線及項(xiàng)目創(chuàng)建不了的問(wèn)題,給出個(gè)人的一個(gè)解決方法供給大家參考

    (1)我電腦上的Visual studio 2015和Qt Creator這兩個(gè)軟件都是安裝成功可以編譯運(yùn)行的。 我也在Visual studio 2015平臺(tái) 》 工具 -》》 更新與擴(kuò)展 那里下載了Qt VS Tools,路徑什么的都指定好了但是同樣創(chuàng)建不了。 (2)過(guò)一段時(shí)間這時(shí)候我又重新把Qt VS Tools卸載重新安裝, 安裝好之后重

    2024年02月07日
    瀏覽(32)
  • VS studio 上開(kāi)發(fā)Qt——Qt VS studio Tool的使用

    點(diǎn)擊菜單欄【擴(kuò)展】-【管理擴(kuò)展】,在搜索框搜索“Qt”, 點(diǎn)擊下載Qt Visual Studio Tools, 以2022版為例,需要關(guān)閉所有窗口才能執(zhí)行安裝 關(guān)閉VS后,彈出安裝窗口,等待其安裝完成 等待安裝完成后,添加一個(gè)Qt Vertion后(前提已經(jīng)安裝了Qt開(kāi)發(fā)環(huán)境)即可使用VS新建或者編譯QT項(xiàng)目

    2024年04月12日
    瀏覽(32)
  • Vue項(xiàng)目實(shí)戰(zhàn)——【基于 Vue3.x + Vant UI】實(shí)現(xiàn)一個(gè)多功能記賬本(開(kāi)發(fā)導(dǎo)航欄及公共部分)

    Vue項(xiàng)目實(shí)戰(zhàn)——【基于 Vue3.x + Vant UI】實(shí)現(xiàn)一個(gè)多功能記賬本(開(kāi)發(fā)導(dǎo)航欄及公共部分)

    系列內(nèi)容 參考鏈接 基于 Vue3.x + Vant UI 的多功能記賬本(一) 項(xiàng)目演示,涉及知識(shí)點(diǎn) 基于 Vue3.x + Vant UI 的多功能記賬本(二) 搭建開(kāi)發(fā)環(huán)境 Vue3 + Vant UI_多功能記賬本 1、底部導(dǎo)航欄 components 文件夾下,創(chuàng)建 NavBar.vue 組件 NavBar.vue 詳細(xì)內(nèi)容請(qǐng)看代碼和注釋 van-tabbar-item 為標(biāo)簽欄

    2024年02月02日
    瀏覽(95)
  • 使用 VS2022 配置 QT 開(kāi)發(fā)環(huán)境的步驟

    使用 VS2022 配置 QT 開(kāi)發(fā)環(huán)境的步驟 QT 是一個(gè)跨平臺(tái)的 C++ GUI 庫(kù),可以在 Windows、Mac、Linux 等操作系統(tǒng)上運(yùn)行。在 Visual Studio 2022 中配置 QT 的開(kāi)發(fā)環(huán)境,可以讓開(kāi)發(fā)者在 Windows 平臺(tái)上更加便捷地進(jìn)行 QT 開(kāi)發(fā)。下面是具體的配置步驟: 步驟一:安裝 QT 首先,需要從 QT 官網(wǎng)上下載

    2024年02月07日
    瀏覽(27)
  • 我們的第一個(gè) Qt 窗口程序

    我們的第一個(gè) Qt 窗口程序

    Qt 入門(mén)實(shí)戰(zhàn)教程(目錄) Windows Qt 5.12.10下載與安裝 本文介紹用Qt自帶的集成開(kāi)發(fā)工具Qt Creator創(chuàng)建Qt默認(rèn)的窗口程序。 本文不需要你另外安裝Visual Studio 2022這樣的集成開(kāi)發(fā)環(huán)境,也不需要你再在Visual Studio 2022中安裝Qt VS Tools這樣的插件。 目的就是為了能夠讓你可以更快的把Q

    2024年02月11日
    瀏覽(25)
  • 【重明】機(jī)器視覺(jué)QT/C++實(shí)現(xiàn)工業(yè)相機(jī)二次開(kāi)發(fā)框架

    【重明】機(jī)器視覺(jué)QT/C++實(shí)現(xiàn)工業(yè)相機(jī)二次開(kāi)發(fā)框架

    工業(yè)相機(jī)二次開(kāi)發(fā)是機(jī)器視覺(jué)行業(yè)必不可少的技能之一。 而如何實(shí)現(xiàn)一個(gè)框架,能夠兼容所有工業(yè)相機(jī)二次開(kāi)發(fā),從而支持多種類(lèi)型的工業(yè)相機(jī),就是機(jī)器視覺(jué)行業(yè)的進(jìn)階技能了。 重明工業(yè)相機(jī)二次開(kāi)發(fā)項(xiàng)目就是在實(shí)現(xiàn)相機(jī)二開(kāi)框架的基礎(chǔ)上,完成了??倒I(yè)相機(jī)的二次開(kāi)

    2024年02月02日
    瀏覽(54)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包