#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() << "右键点击";
}
}
//----------------------------键盘按键、鼠标点击事件---------------------------------------------------------------------------------------------- -
杂记杂记杂记
于 2024-07-22 17:47:36 首次发布