杂记杂记杂记

#pragma execution_character_set("utf-8")//运行字符编码要写这行,否则中文乱码
------------------------------------------------------------------------------------
	设置按钮,使其可以控制窗口最大化最小化
	编译时找不到 "opencv2\opencv.hpp" 头文件的错误
	在main函数中创建布局并调整布局内的控件,添加布局
	connect用法
	QTimer timer 定时器用法
	文件的打开、数据放到textEdit中、保存文件
	键盘按键、鼠标点击事件
------------------------------------------------------------------------------------

//shift+alt+r   预览当前的ui按钮

------------------------------------------------------------------------------------





//------------------------------  设置按钮,使其可以控制窗口最大化最小化-----------------------------------------------------------------
class MyWidget : public QWidget
{
public:
	MyWidget(QWidget *parent = nullptr) : QWidget(parent)
	{
		setWindowTitle("Minimize & Maximize");													//设置窗口名称
		resize(300, 200);																		//重设窗口尺寸
																								
		QPushButton *minButton = new QPushButton("Minimize", this);								//声明按钮
		minButton->move(10, 10);																//按钮放到窗口的(10,10)
		connect(minButton, &QPushButton::clicked, this, &MyWidget::onMinimizeClicked);			//connect(按钮名,被按下所发出的信号,当前对象的指针,指向MyWidget,一个槽函数,按钮按下后这个槽函数会被调用)
																								//链接按钮和按下的动作,在当前位置生效,谁响应
		QPushButton *maxButton = new QPushButton("Maximize", this);
		maxButton->move(100, 100);
		connect(maxButton, &QPushButton::clicked, this, &MyWidget::onMaximizeClicked);
	}
	private slots:
	void onMinimizeClicked()
	{
		setWindowState(Qt::WindowMinimized);							//设置窗口最小化
	}

	void onMaximizeClicked()
	{
		if (windowState() == Qt::WindowMaximized)						//如果窗口已经是最大化的了
			setWindowState(Qt::WindowNoState);							//使窗口处于默认状态,不做处理
		else
			setWindowState(Qt::WindowMaximized);						//设置窗口最大化

};
int main(int argc, char *argv[])
{
	QApplication app(argc, argv);
	MyWidget window;					//声明窗口
	window.show();						//展示窗口
	return app.exec();
}
//------------------------------  设置按钮,使其可以控制窗口最大化最小化------------------------------------------------------------------




//------------------------------编译时找不到 "opencv2\opencv.hpp" 头文件的错误-------------------------------------------------------------------
如果您在编译时遇到找不到 "opencv2\opencv.hpp" 头文件的错误,这通常意味着编译器无法找到正确的 OpenCV 头文件路径。以下是一些详细步骤,用于设置 OpenCV 头文件路径。

假设您已经正确安装了 OpenCV,并且知道它的安装路径。例如,OpenCV 可能安装在 "C:\opencv"。

在 Visual Studio 中,右键点击您的项目,选择 "属性"。
在属性页面中,选择 "VC++ 目录"。在这里,您需要添加包含目录和库目录。
在 "包含目录" 中,添加 OpenCV 头文件目录,通常是 "C:\opencv\build\include",然后点击 "应用"。
在 "库目录" 中,添加 OpenCV 库文件目录,通常是 "C:\opencv\build\x64\vc15\lib",然后点击 "应用"。
接下来,选择 "链接器" -> "输入",然后在 "附加依赖项" 中添加 OpenCV 库文件名。例如,如果您使用的是 OpenCV 4.0 版本,添加 "opencv_world400.lib",然后点击 "应用"。
最后,点击 "应用" 和 "确定" 以保存这些设置。
现在,重新编译您的项目,应该能够找到 "opencv2\opencv.hpp" 头文件,并成功编译您的代码。

这些步骤假设 OpenCV 安装在 "C:\opencv",您需要根据您的实际安装路径和版本来调整相应的路径。
//------------------------------编译时找不到 "opencv2\opencv.hpp" 头文件的错误-------------------------------------------------------------------



//------------------------------在main函数中创建布局并调整布局内的控件,添加布局-------------------------------------------------------------------

	如果使用 UI 模板已经可以满足需求,就不需要自己手动添加控件,然后再将控件与自己的逻辑连接起来。
	在使用 UI 模板添加的控件,需要使用 ui.这种形式引用;而自己手动添加的控件,就不需要使用 ui.。
	你需要 void 和 void 进行连接,需要 connect 和 connect。
#include<QApplication>	
#include<QLabel>		
#include<QLineEdit>		
#include<QpushButton>	
#include<QHBoxLayout>
#include<QVBoxLayout>	
#include <QtWidgets/QWidget>
#include<QThread>
#include<QTimer>

#include<QWidget>
#include <QMainWindow>

#pragma execution_character_set("utf-8")
int main(int argc, char *argv[])
{

	QApplication app(argc, argv);	
	QLabel *infoLabel = new QLabel;						//声明标签
	QLabel *openLabel = new QLabel;				
	QLineEdit *cmdLineEdit = new QLineEdit;				//声明文本输入框
	QPushButton *commitButton = new QPushButton;	
	QPushButton *cancelButton = new QPushButton;	
	QPushButton *browseButton = new QPushButton;	
	QGridLayout *gridLayout = new QGridLayout(this);	//声明网格布局
	QPushButton *pushButton = new QPushButton(this);


	infoLabel->setText("input cmd:");					//声明名称
	openLabel->setText("open");
	commitButton->setText("commit");
	cancelButton->setText("cancel");
	browseButton->setText("browse");

	QHBoxLayout *cmdLayout = new QHBoxLayout;			//水平布局
	cmdLayout->addWidget(openLabel);	
	cmdLayout->addWidget(cmdLineEdit);

	QHBoxLayout *buttonLayout = new QHBoxLayout;		//垂直布局	
	buttonLayout->addWidget(commitButton);
	buttonLayout->addWidget(cancelButton);
	buttonLayout->addWidget(browseButton);

	QVBoxLayout *mainLayout = new QVBoxLayout;
	mainLayout->addWidget(infoLabel);					//添加控件到垂直布局中
	mainLayout->addLayout(cmdLayout);					//添加布局到垂直布局中
	mainLayout->addLayout(buttonLayout);

	QWidget w;										
	w.setLayout(mainLayout);
	w.show();
	w.setWindowTitle("running");					//设置窗口名称


	return app.exec();
}
//------------------------------在main函数中创建布局并调整布局内的控件,添加布局-------------------------------------------------------------------



//-----------------------------connect用法-------------------------------------------------------------------------------------------------------------------- -

			//例2通过connect讲解。//需要注意的是connect是指针,在QT中用connect也是指针
			//格式是信号发出者-谁发出的信号,发出什么信号,谁接收信号,怎么处理信号
		connect(maxButton, &QPushButton::clicked, this, &MyWidget::onMaximizeClicked);
		connect(ui.button2, &QPushButton::clicked, this, &QTvision::on_button2_clicked);
		connect(ui->newAction, &QAction::triggered, this, &MainWindow::newActionSlot);// //用这种方式将mainwindow的菜单栏连接到QT槽
		connect(ui->cmdLineEdit,    SIGNAL(returnPressed()),  this,     SLOT(on_commitButton_clicked()));
		//ui的cmdLineEdit组件发出的信号,信号是 returnPressed 这个信号
		//this是指 Widget 接收这个信号,通过 SLOT 执行相应的处理信号的槽函数。

		connect(谁发出信号,什么信号,什么控件接收信号,什么信号槽函数);
		信号发出者(按钮),信号(双击),接收者(this),信号槽(cpp文件中的一个void函数);

//-----------------------------connect用法-------------------------------------------------------------------------------------------------------------------- -



//-----------------------------	QTimer timer 定时器用法-------------------------------------------------------------------------------------------------------------------- -
#pragma once
#include "ui_QTvision.h"
#include<QApplication>	//应用程序
#include<QLabel>		//标签
#include<QLineEdit>     //文本编辑框
#include<QPushButton>   //按钮
#include<QHBoxLayout>   //水平布局
#include<QVBoxLayout>   //垂直布局
#include <QtWidgets/QWidget>
#include<QThread>       //包含多线程类 QThread 提供的一些函数,比如 sleep()、msleep() 和 usleep()
#include<QTimer>        //定时器
#include<QWidget>       //QWidget
#include <QMainWindow>  //QMainWindow
#include <opencv2\opencv.hpp> //opencv库
#pragma execution_character_set("utf-8") //指定字符集,需要写在前面,否则中文乱码


QTvision::QTvision(QWidget *parent)
	: QWidget(parent)
{
	ui.setupUi(this);

	QGridLayout *gridLayout = new QGridLayout(this);					 //创建网格布局
	QPushButton *button1 = new QPushButton(this);						  //创建按钮

	ui.button1->setText("ui上的按钮");									//设置按钮文本
	gridLayout->addWidget(ui.button1, 1, 2);							//将按钮放置在网格布局的指定位置
	ui.button2->setText("创建的按钮");
	gridLayout->addWidget(ui.button2, 3, 3);

	connect(ui.button1, &QPushButton::clicked, this, &QTvision::on_button1_clicked);
	connect(ui.button2, &QPushButton::clicked, this, &QTvision::on_button2_clicked);
	connect(ui->newAction, &QAction::triggered, this, &MainWindow::newActionSlot); //将mainwindow的菜单栏连接到QT槽
}
void QTvision::on_button1_clicked()
{
	ui.lineEdit1->clear();
	QThread::msleep(2000);								//在事件循环中调用sleep,会阻塞当前线程无法进行其他操作
	QTimer::singleShot(1000, this, &QTvision::close);	//调用定时器,在一秒后关闭窗口

	timer->setInterval(1000);							// 设置定时器的时间间隔为1秒,可以在代码中注释说明其作用
	timer->start(20);									//开始定时器,设置定时器的时间间隔为20毫秒 //设置定时器的时间间隔为33毫秒,每隔20毫秒触发一次timeout信号,相当于帧率1000/20=50帧

	if (timer->isActive() == 1)							// 检查定时器是否正在运行
	{
		timer->stop();									//停止定时器
	}
	else
	{
		timer->start();									//启动定时器
	}
	ui.label->setScaledContents(true);					//通过设置setScaledContents(true),使label自动适应窗口大小
	this->close();
}
//-----------------------------	QTimer timer 定时器用法-------------------------------------------------------------------------------------------------------------------- -



//----------------------------文件的打开、数据放到textEdit中、保存文件-------------------------------------------------------------------------------------------------------------------- -

	QString fileName = QFileDialog::getOpenFileName(this, "选择一个文件", QCoreApplication::applicationFilePath(), "*.cpp"); // 获取文件路径
																												   //QString fileName1(从控件中获取一个文件路径Q字符串) = QFileDialog::getOpenFileName(this,"对话框标题Q","路径","QCoreApplication::applicationFilePath() 获取当前路径","*.cpp 用于显示特定类型的文件");
		QFile file(fileName); // 创建文件对象并传入文件路径
		file.open(QIODevice::ReadOnly); // 打开文件,以只读模式
		QByteArray ba = file.readAll(); // 读取文件内容为字节数组
		ui->textEdit->setText(QString(ba)); // 将文件内容显示在textEdit控件中,并转换为QString格式
		file.close(); // 关闭文件


	QString fileName = QFileDialog::getSaveFileName(this, "保存到哪里", QCoreApplication::applicationFilePath()); //不写"*.cpp",任意文件类型都可以保存
	
		QFile file(fileName);
		file.open(QIODevice::WriteOnly); // 打开文件,以只写模式,因为我们需要写入数据
		QByteArray ba;
		ba.append(ui->textEdit_2->toPlainText()); // 获取文本编辑框的内容
		file.write(ba); // 写入文件
		file.close();

		void QTvision::on_button2_clicked() // 设置按钮2点击事件
		{
			QString text1 = "这是一段文字";
			ui.lineEdit1->setText(text1);
		}

		------
			QString fileName = QFileDialog::getOpenFileName(this, "选择一个文件", QCoreApplication::applicationFilePath(), "*.mp4"); // 获取文件路径
		capture.open(fileName.toStdString()); //将QString类型的文件路径转换为std::string类型,然后传给capture.open()函数
		-----

//----------------------------文件的打开、数据放到textEdit中、保存文件-------------------------------------------------------------------------------------------------------------------- -

//----------------------------键盘按键、鼠标点击事件--------------------------------------------------------------------------------------------- -
	--mainwindow.h--

	class MainWindow : public QMainWindow
	{
		Q_OBJECT

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

		void keyPressEvent(QKeyEvent *k); // 重载键盘按键事件
		void mousePressEvent(QMouseEvent *m); // 重载鼠标点击事件

	--mainwindow.cpp--
		void MainWindow::keyPressEvent(QKeyEvent *k)
	{
		if (k->modifiers() == Qt::ControlModifier&&k->key() == Qt::Key_S)   // modifiers是Ctrl、Alt等修饰符的状态,key()是获取按键的函数
		{
			saveActionSlot(); //执行保存操作
		}
	}

	void MainWindow::mousePressEvent(QMouseEvent *m)
	{
		QPoint pt = m->pos();//获取鼠标点击位置
		qDebug() << pt; //打印位置
		if (m->button() == Qt::LeftButton) //判断是否为左键点击
		{

			qDebug() << "左键点击";
		}
		else if (m->button() == Qt::RightButton)
		{
			qDebug() << "右键点击";
		}
	}
//----------------------------键盘按键、鼠标点击事件---------------------------------------------------------------------------------------------- -



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值