QT笔记
.
大魔王来巡山
这个作者很懒,什么都没留下…
展开
-
ffmpeg-qt音视频开发简单入门
ffmpeg+qt简单入门,视频播放器实现音视频同步原创 2022-10-15 22:04:58 · 689 阅读 · 1 评论 -
vlc-qt简单入门
vlc-qt简单入门原创 2022-10-12 16:10:01 · 1408 阅读 · 0 评论 -
C++写一个信号槽
C++仿写QT信号槽(简化版)原创 2022-05-25 22:48:26 · 452 阅读 · 0 评论 -
QGraphicsItem的移动缩放
缩放qreal GraphicsObject::CalcuateScale(QPointF center, QPointF p1, QPointF p2){ //@功能:求缩放比例 //@参数:center图元中心点,p1按下的点,p2移动的点 qreal dx = p1.x() - center.x(); qreal dy = p1.y() - center.y(); //鼠标按下时距离中心点的距离 qreal d1 = sqrt(pow(dx, 2) + pow(dy, 2)); d.原创 2021-04-19 23:06:43 · 935 阅读 · 3 评论 -
QT启动外部进程并隐藏界面
QString program = QStringLiteral("··/Test/test.exe");STARTUPINFO si={sizeof(si)};PROCESS_INFORMATION pi;si.dwFlags= STARTF_USESHOWWINDOW|STARTF_USESTDANDLES;si.wShowWindow =false;CreateProcess(NULL,(LPWSTR)program.toStdWString().c_str(),NULL,NULL,FALS原创 2020-12-29 11:33:39 · 3224 阅读 · 2 评论 -
MFC和QT混合编译
所需文件支持Qt5的qtwinmigrate,下载地址:https://github.com/qtproject/qt-solutions需要用到其中的qmfcapp.h qmfcapp.cpp qwinwidget.h qwinwidget.cpp等文件Qt Add-in插件VS新建一个MFC工程,然后卸载项目,右击编辑***.vcxproj工程文件找到以下配置处,添加Keyword字段Qt4VSv1.0,可以新建一个QT工程打开看看值是多少<PropertyGroup Label.原创 2020-09-24 14:20:58 · 1441 阅读 · 0 评论 -
QWidget设置模态属性
方式一:setAttribute(Qt::WA_WindowModified,true);方式二:// 窗口对整个程序阻塞setWindowModality(Qt::ApplicationModal);// 窗口对父窗口阻塞setWindowModality(Qt::WindowModal);上述方式只能实现半模态,即窗口阻塞了,但是代码还会继续运行当需要窗口关闭时获取窗口的某个值去执行条件语句的代码时,是需要模态对话框那种效果的。即窗口阻塞,代码也被阻塞。办法:QWidget *wid原创 2020-09-05 20:16:17 · 1052 阅读 · 0 评论 -
QT自定义控件-经纬度输入框
原文CoordinateEdit.h#pragma once#include <QWidget>#include <QEvent>class QLineEdit;class QLabel;class CoordinateEdit : public QWidget{ Q_OBJECTpublic: enum Type { Type_Longitude, Type_Lagitude }; CoordinateEdit(Type type = Type原创 2020-10-21 23:37:20 · 1802 阅读 · 0 评论 -
QGraphicsView简单使用
自定义Item,点// cgraphicsitem.h#ifndef CGRAPHICSITEM_H#define CGRAPHICSITEM_H#include <QGraphicsItem>#include <QGraphicsSceneMouseEvent>class CGraphicsItem : public QGraphicsItem{public: CGraphicsItem(QPointF p,QGraphicsItem* parent =原创 2020-10-11 21:32:05 · 3172 阅读 · 1 评论 -
QGraphicsView重写paint事件实现实时画图显示
场景类cgraphicsscene.h#ifndef CGRAPHICSSCENE_H#define CGRAPHICSSCENE_H#include <QGraphicsScene>#include <QGraphicsPathItem>#include <QList>#include "cgraphicsview.h"class CGraphicsScene : public QGraphicsScene{ Q_OBJECTpublic:原创 2020-10-09 23:16:28 · 4438 阅读 · 4 评论 -
QWidget子窗口适应父窗口大小
问题:QWidget的两个窗口使用了布局之后,各自窗口的控件可以适应大小变化,但是两个窗口合并后,父窗口变化而子窗口不会变窗口1:Widget1,窗口2:Widget2,二者都进行了界面布局窗口1中有一个widget_1,现将Widget2的父窗口设为widget_1使用Widget2->setParent(widget_1)后,Widget2无法适应Widget1大小变化解决:QHBoxLayout *layout = new QHBoxLayout(this);ui.widget_原创 2020-08-23 14:41:30 · 8647 阅读 · 0 评论 -
QSettings的简单使用
读取dllset.ini[CNT]size = 4[DLL]id/1/name = dll1id/2/name = dll2id/3/name = dll3id/4/name = dll4QString dir = QCoreApplication::applicationDirPath();qDebug() << dir;QSettings set(dir+"/dllset.ini", QSettings::IniFormat);int size = set.val原创 2020-08-18 23:16:12 · 266 阅读 · 3 评论 -
QT简单调用cmd命令
例子1ping其他主机,判断是否开机// -w控制 超时时间// ping命令设置了超时时间后,ping不通代语句执行失败返回1,否则返回0int ret = QProcess::execute("ping 192.168.1.107 -w 1");例子2获取进程是否存活//用上述例子的方法发现无法使用管道符号// /fo csv的作用是当进程软件名太长时,查出来可能显示不全,此时用此命令即可解决QProcess p(0);p.start("cmd",QStringList().原创 2020-08-06 20:06:59 · 1809 阅读 · 0 评论 -
QT5的connect方式利用指针识别信号重载函数
QTcpSocket *socket = new QTcpSocket; socket->bind(23333); // QTcpSocket有一个含参数的error信号,有一个无参数的error函数 // 如果用QT5中connect的写法,需要用到函数指针 void (QTcpSocket::*p)(QAbstractSocket::SocketError) = &QTcpSocket::error; connect(socket, p, [=](QAbstractSocket.原创 2020-08-05 23:04:36 · 697 阅读 · 0 评论 -
QT序列化通过文件存取结构体数据
结构体struct Data{QString a;QString b;int c;QDateTime d;};原创 2020-07-20 19:39:47 · 2793 阅读 · 3 评论 -
QT存放结构体数据在动态内存中
方式一 Data d1,d2; d1.a = "aaa"; d1.b = "bbb"; d1.c = 3; d1.d = 3.3; d2.a = "ccc"; d2.b = "ddd"; d2.c = 4; d2.d = 4.4; // 申请空间 char *p = (char*)malloc(sizeof(Data)); // 将数据复制进空间 memcpy(p,&d1,sizeof(Data)).原创 2020-07-22 20:17:00 · 983 阅读 · 0 评论 -
QT连接SQL Server以及MySql
问题1:连接SQL Server时,使用如下方式方式1 m_db = QSqlDatabase::addDatabase("QODBC"); m_db.setHostName("localhost"); m_db.setDatabaseName("Learn"); m_db.setUserName("sa"); m_db.setPassword("123456");报错: [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动原创 2020-07-18 19:53:25 · 608 阅读 · 3 评论 -
QFile的简单使用
打开文件可以使用C中的文本流fopen或者open等方式// 以"w"方式每次打开都会清空,如果不想清空可以使用"a"或"a+"FILE *test = fopen("test.txt","w+"); if(test) QTextStream textS(test,QIODevice::WriteOnly);在QT中当然还是使用自己的接口方便 QFile file; file.setFileName("test.txt"); // 如果想每次打卡清空加上|QIODevice::Trunca原创 2020-06-08 22:45:47 · 1591 阅读 · 0 评论 -
QT类模板和类模板的特化
//当结构体为struct FireData{ QString type; struct Group { int no; QString a; QString b; QString c; }; QList<Group> groups;};class MyData{public: MyData() {} ~MyData() {} FireData m_data; QString getValue(int col) { if (col == 0原创 2020-05-26 23:43:43 · 1072 阅读 · 0 评论 -
QSharedPointer的用法
用多态的方法让QList存储多种类型的数据这里以QTableWidget提升类为例,多个QTableWidget同时提升为MyTable,MyTable中就需要判断存储相应的类型数据MyData.h [table数据结构体类]#pragma once#include <QString>#include <QDateTime>#include <QSharedPointer>#include <QDebug>struct FireData{.原创 2020-05-25 23:07:22 · 5719 阅读 · 3 评论 -
QT读取json文件
QT本身就有读取json的接口,简单又方便json文件注意:json中含有中文,文件编码格式应保存为UTF-8,其他编码可能中文读取不出来,json中如果有字段值是bool类型,直接填true/false就好了{"scale":10.0,"table1":[{"t":1,"h":"第一列","f":true},{"t":2,"h":"第二列","f":true},{"t":3,"h":"第三列","f":false},{"t":4,"h":"第四列","f":true},],"tabl原创 2020-05-21 14:11:16 · 4316 阅读 · 0 评论 -
QT控件通过setProperty设置属性显示内容
QLineEdit设置其text属性QLineEdit *edit = new QLineEdit(this);edit->setProperty("text","hello");QPlainTextEdit设置其plainText属性QPlainTextEdit *edit = new QPlainTextEdit(this);edit->setProperty("plainText","hello");QTextEditQTextEdit *edit = n.原创 2020-05-24 23:02:25 · 4461 阅读 · 2 评论 -
QT学习记录-QT发送自定义事件
CustomEvent文件#ifndef CUSTOMEVENT_H#define CUSTOMEVENT_H#include <QEvent>#include <QString>class CustomEvent : public QEvent{ public: const static Type TYPE = static_cast<Type>(QEvent::User+0x10); explicit CustomEvent(QStri原创 2020-05-10 20:18:42 · 198 阅读 · 0 评论 -
QChart画折线图坐标不准的问题
坐标不准主要是因为坐标轴值范围平分的不够均匀QValueAxis *axisx = new QValueAxis; //创建X轴值序列axisX->setRange(0,15);//设置X轴值范围为0-15axisX->setLabelFormat("%u");axisX->setGridLineVisible(true);//显示坐标轴的网格线,便于观察axisX-&...原创 2020-04-30 10:21:29 · 2277 阅读 · 2 评论 -
QT界面类动态库的生成及调用
新建项目-Qt Library-假如项目名称为dllTestdlltest.h#pragma once#include "dlltest_global.h"class DLLTEST_EXPORT dllTest{public: dllTest(){} ~dllTest(){}}#ifdef __cplusplusextern "C" {#endif ...原创 2020-04-10 10:27:43 · 1404 阅读 · 3 评论 -
QT学习记录-表格中每列的控件格式
函数记录://定制表格某一列的委托void setItemDelegateForColumn(int column, QAbstractDelegate *delegate);//获取表格某一列的委托QAbstractItemDelegate *itemDelegateForColumn(int column) const;//有定制列的同样也有定制行的,把Column换成Row就可以了...原创 2020-04-02 10:46:55 · 156 阅读 · 0 评论 -
QT学习记录-reinterpret_cast的使用
reinterpret_castreinterpret重新解释,此标识符的意思即为数据的二进制形式重新解释,但是不改变其值。可以在网络通信中用到,转换类型获取消息类型base_info.h#ifndef BASE_INFO_H#define BASE_INFO_Henum ENTYPE{ EN_NONE = 0, EN_NO1, EN_NO2, E...原创 2020-04-06 20:10:18 · 1223 阅读 · 0 评论 -
QTreeWidget父子选中关联以及简单使用
QTreeWidget *treeWidget = new QTreeWidget(this);treeWidget->setColumnCount(1);QTreeWidgetItem *redGroup = new QTreeWIdgetItem;redGroup->setText(0,QStringLiteral("红队"));treeWidget->addTopL...原创 2020-03-21 21:04:22 · 2095 阅读 · 0 评论 -
QT学习记录-QListWidget的使用
QListWidget *listWidget = new QListWidget(this);//单个添加项QListWidgetItem *group1 = new QListWidgetItem;group1->setText(QStringLiteral("一队"));listWidget->addItem(group1);//删除项 listWidget->r...原创 2020-03-21 20:55:45 · 405 阅读 · 0 评论 -
QT学习记录-程序全屏
//全屏不隐藏任务栏setGeometry(QRect(QPoint(),QGuiApplication::primaryScreen()->availableSize()));//全屏隐藏任务栏,下面的两个都是自动隐藏任务栏showMaximized();setWindowState(Qt::WindowFullScreen);//取消界面边框setWindowFlags(Qt...原创 2020-03-17 09:34:32 · 228 阅读 · 0 评论 -
QT学习记录-对话框
模态对话框:显示之后,程序其他窗口不可点击,如关于对话框非模态对话框:显示之后,程序其他窗口可点击,如帮助对话框//模态:QDialog dlg;dlg.exec();//非模态:QDialog dlg;dlg.show();//这种方式,对话框会一闪而过,因为显示完就销毁释放资源,这时可以将dlg定义成类成员变量,在程序结束后销毁释放资源就可以了//或非模态:QDialog *...原创 2020-03-21 20:26:15 · 143 阅读 · 0 评论 -
QT学习记录-QTableWidget的使用
ui->tableWidget->horizontalHeader()->setHidden(false);//有时候运行出来表头消失了,写这一句预防ui->tableWidget->horizontalHeader()->setMinimumHeight(ui->tableWidget->height()/3);//设置横向表头宽度ui->...原创 2020-03-20 14:30:28 · 758 阅读 · 0 评论 -
QT学习记录-菜单栏工具栏状态栏
QMenuBar *mBar = menuBar(); //创建菜单栏1.QMenu *pFile = mabr->addMenu("文件"); //创建菜单,MainWindow上本来就有菜单栏、工具栏,直接通过接口获取就行2.QMenu *pFile = new QMenu("文件"); mBar->addMenu(pFile);1.QAction *pNew = pF...原创 2020-03-21 01:29:19 · 174 阅读 · 0 评论 -
QT学习记录-嵌入外部程序
第一步:启动外部程序程序名:Test.exe 程序窗口类名:Test_path:程序的绝对路径或者相对于工程的相对路径//之前在网上找的,忘记出处了QString cmd = "_path/Test.exe";STARTUPINFO si = {sizeof(si)};PROCESS_INFOMATION pi;si.wShowWindow = true;bool bRect = ...原创 2020-03-17 23:13:02 · 1186 阅读 · 0 评论 -
QT学习记录-按钮设置不同自定义状态的背景图
#ifndef STYLEMODEL_H#define STYLEMODEL_H#include <QObject>#include <QString>#include <QMap>#include <QPushButton>class StyleModel{public: StyleModel() { }...原创 2020-03-16 23:28:28 · 697 阅读 · 0 评论 -
QT学习记录-编写多线程
方式1:线程类继承QThread编写,开启用QThread的start()函数,线程处理只能写在QThread的虚函数run()中,示例://自定义线程h#ifndef MYTHREAD_H#define MYTHREAD_H#include <QObject>#include <QThread>#include <QDebug>class My...原创 2020-03-15 16:24:07 · 223 阅读 · 0 评论 -
QT学习记录-模拟键盘
默认是黄色开启对应的序号,对应的label显示红色,选0为全部开启开启的l即红色的label才能选中,选中后变为白色代码如下,逻辑待优化:#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QMap>namespace Ui {class Widget;}enum Butto...原创 2020-03-14 01:43:45 · 132 阅读 · 0 评论 -
QT学习记录-findChildren的使用
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); QList<QLabel*> labelList = ui->widget->findChildren<QLabel*>(); for...原创 2020-03-12 21:39:24 · 2883 阅读 · 0 评论 -
QT学习记录-QWidget贴背景图
QWidget背景图运行背景图消失的问题,网上搜集的解决办法记录如下:1.重写paintEvent事件void Widget::paintEvent(QPaintEvent *){ QStyleOption opt; opt.init(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_W...原创 2020-03-11 22:56:49 · 428 阅读 · 0 评论 -
QT窗口不使用布局实现自适应不同分辨率的屏幕
项目需求:程序主界面的背景图片中包含一个方形黑色背景,这个黑色背景在设计师中贴上widget等几个控件,然后在控件上显示需求的内容程序默认全屏,也不用调整大小,所以只考虑在不同分辨率的屏幕上显示问题假设在19201080的屏幕下开发,将主界面的大小也设置为19201080,先把背景图贴上去,然后再放控件,大小位置都调整好,QT的Designer界面可以清楚的看到每个控件的坐标以及长宽预览看...原创 2020-02-24 15:31:32 · 3438 阅读 · 7 评论