QT一些常用功能的代码

发布时间:2026/7/5 21:05:10
QT一些常用功能的代码 QT软件相关更新组件-临时数据库需要一个临时的数据库http://download.qt.io/static/mirrorlist/使用MSVC编译器汉字乱码pro文件加以下msvc{QMAKE_CFLAGS /utf-8QMAKE_CXXFLAGS /utf-8}快捷键F1 查看帮助选中某一类或函数按下F1出现帮助文档 F2 在光标选中对象的声明和定义之间切换和Ctrl鼠标左键一样的效果 F3 查找下一个 ShiftF3 查找上一个 CtrlR 运行工程 Ctrl[或]跳到代码块的头部/尾部 CtrlTab 快速切换已打开的文件 CtrlShiftR 局部变量统一修改将光标移动到需要更改的变量上 CtrlShift或折叠/展开代码块 CtrlShift↑/↓ 将当前行的代码向上/向下移动一行时间相关计算一段代码的耗时QElapsedTimer timer;timer.start();qint64 elapsedtimer.elapsed();qDebug()代码段运行时间elapsed毫秒;获取当前日期QDate currentDateQDate::currentDate();qDebug()当前日期:currentDate.toString(yyyy-MM-dd);// QString转QDateTimeQDateTime dateTimeQDateTime::fromString(timeStr,yyyy-MM-dd HH:mm:ss);字符转换十六进制字符串转二进制QStringMainWindows::hexStringToBinaryString(constQStringhexString){QString binaryString;for(inti0;ihexString.length();i){ushort hexValuehexString.mid(i,1).toUShort(nullptr,16);QString binaryValueQString(%1).arg(hexValue,4,2,QLatin1Char(0));binaryStringbinaryValue;}returnbinaryString;}全局变量extern如果两个不同的类之间不存在关系但又想使用他们的数据可以创造一个全局变量使用extern这样就可以在第一个文件中定义其他文件中使用或修改。// file1.cppintglobalVar10;// 全局变量的定义// file2.cppexternintglobalVar;// 使用 extern 声明全局变量表示它在其他地方定义globalVar20;// 修改全局变量的值lamda如果存在代码复用或者只是一小块代码要封装则可以使用lamda函数不用单独去创建函数// 一个lamda函数里面实现了部分功能autosetCenterItem[](intcol,constQStringtext){QTableWidgetItem*itemnewQTableWidgetItem(text);item-setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);ui-tableWidget_2-setItem(curParmaTableNumber,col,item);};注解① auto setCenterItem自动推导类型把这个匿名函数存到变量setCenterItem后面直接setCenterItem(列号,文本)调用。② 捕获符 [] 核心[] 引用捕获当前作用域里所有变量全部以引用方式交给 lambda 内部使用不用手动一个个写捕获。其他捕获写法补充[]值捕获复制一份变量到函数里[this]仅捕获类指针访问 ui、成员变量[param]只引用捕获 param 一个变量。③ 形参 (int col, const QString text)调用时需要传入两个参数。④ 函数体封装重复逻辑// 使用此函数setCenterItem(1,param.project);保存图片// 函数用于截取QTableWidget界面并保存为图片voidcaptureTableWidgetAsPicture(QTableWidget*tableWidget){QPixmap pixmaptableWidget-grab();QString fileNameQFileDialog::getSaveFileName(nullptr,保存表格图片,,PNG Files (*.png);;JPEG Files (*.jpg));if(!fileName.isEmpty()){pixmap.save(fileName);}}QSS常用代码border-radius:4px;/* 边框弧度 */padding:6px24px6px24px;/* 内边距 */border:none;/* 无边框 */border:1px solidrgba(0,0,0,0);/* 边框线粗细及颜色 */background-repeat:no-repeat;/* 背景图片不重复 */background:rgba(2,71,106,0);/* 背景透明 */**常用QSS控件状态(Qcheck等控件通用)**QPushButton{border-radius:4px;}// 默认QPushButton:hover{border-color:#bbb;}/* 鼠标悬浮 */QPushButton:pressed{color:#000;}/* 鼠标按下 */QPushButton:checked{border-color:#1976D2;}/* 选中状态 */QPushButton:unchecked{border-color:#1976D2;}/* 选中状态 */QPushButton:disabled{border-color:#ddd;}/* 禁用状态 */QPushButton:focus{outline:none;}/* 获得焦点 */信号槽相关信号槽连接// 点击控键键发出此处的位置信号connect(ui-widget,SIGNAL(intersectionPointClicked(QPointF)),this,SLOT(RecvChartPoint(QPointF)));// 另一种连接方式-常用connect(m_fsModel,SftpFileSystemModel::sftpOperationFailed,this,SecureFileUploader::handleSftpOperationFailed);// lamda表达式connect(subWidget,SubWidget::dataSent,this,[](constQStringdata,intvalue){// 处理接收到的数据qDebug()收到子窗口数据datavalue;});以结构体做为参数在一个通用头文件中设置结构体例如define.h;把同一类的数据归到一个结构体之中可以更方便管理定义同时还方便通过信号槽传递。structMyStruct1{//参数1...}qRegisterMetaTypeMyStruct1(MyStruct1);// 注册结构体connect(canThread,SIGNAL(signalRecvDataToMain(MyStruct1)),this,SLOT(slotRecvDataToMain(MyStruct1)));// 收到数据解析到主界面窗口相关// 设置窗口图片this-setObjectName(parent_widget);this-setStyleSheet(#parent_widget{background-image:url(:/new/prefix1/Image/aaa.png)});// 去掉标题栏this-setWindowFlags(Qt::FramelessWindowHint);// 弹窗提示 informationwarn;QMessageBox::information(this,tr(成功),tr(数据导入成功),QMessageBox::Ok);表格相关表格设置ui-tableWidget-setEditTriggers(QAbstractItemView::NoEditTriggers);//不能对表格内容进行修改ui-tableWidget-setSelectionBehavior(QAbstractItemView::SelectItems);//选中单个单元格ui-tableWidget-setSelectionBehavior(QAbstractItemView::SelectRows);//选中一行(整行选中)ui-tableWidget-setSelectionBehavior(QAbstractItemView::SelectColumns);//选中一列ui-tableWidget-setSelectionMode(QAbstractItemView::NoSelection);//不能选择ui-tableWidget-setSelectionMode(QAbstractItemView::ExtendedSelection);//设置为可以选中多个目标ui-tableWidget-setSelectionMode(QAbstractItemView::SingleSelection);//选中单个目标ui-tableWidget-setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//去掉水平滚动条ui-tableWidget-setVerticalScrollMode(QAbstractItemView::ScrollPerItem);//垂直滚动条按项移动ui-tableWidget-setAutoScroll(false);//去掉自动滚动表头设置ui-tableWidget-verticalHeader()-setVisible(false);//隐藏列表头ui-tableWidget-horizontalHeader()-setVisible(false);//隐藏行表头ui-tableWidget-setHorizontalHeaderLabels(QStringList()tr(1)tr(2)tr(3)tr(4)tr(5));// 添加表头内容QTableWidgetItem*columnHeaderItem0tableWidget-horizontalHeaderItem(0);//获得水平方向表头的Item对象columnHeaderItem0-setFont(QFont(Helvetica));//设置字体columnHeaderItem0-setBackgroundColor(QColor(0,60,10));//设置单元格背景颜色columnHeaderItem0-setTextColor(QColor(200,111,30));//设置文字颜色tableWidget-horizontalHeader()-setStyleSheet(QHeaderView::section{background:skyblue;});//设置表头背景色内容设置ui-tableWidget-resizeColumnsToContents();//将行和列的大小设为与内容相匹配ui-tableWidget-resizeRowsToContents();//将行和列的大小设为与内容相匹配ui-tableWidget-horizontalHeader()-setSectionResizeMode(QHeaderView::Stretch);//使列完全填充并平分ui-tableWidget-verticalHeader()-setResizeMode(QHeaderView::Stretch);//使行完全填充并平分ui-tableWidget-resizeColumnToContents(100);//根据内容自动调整给定列宽ui-headerView-resizeSection(0,284);//设置列宽ui-tableWidget-verticalHeader()-setDefaultSectionSize(10);//设置行高ui-tableWidget-clear();//清除所有可见数据包括表头行还在ui-tableWidget-clearContents();//只清除表中数据不清除表头内容ui-tableWidget-setRowCount(0);//连行也清除掉introwtableWidget-rowCount();//获取表格中当前总行数ui-tableWidget-setRowCount(row1);//添加一行ui-tableWidget-setShowGrid(true);//显示表格线ui-tableWidget-setFrameShape(QFrame::NoFrame);//设置无边框ui-tableWidget-setStyleSheet(selection-background-color:lightblue;);//设置选中背景色单元格设置// 在单元格里加入控件QComboBox*comBoxnewQComboBox();comBox-addItem(Y);comBox-addItem(N);tableWidget-setCellWidget(0,2,comBox);// 单元格中添加图片tableWidget-setItem(1,0,newQTableWidgetItem(QIcon(:/new/images/kingdemo.ico),tr()));// 设置单元格字体颜色、背景颜色和字体字符QTableWidgetItem*itemnewQTableWidgetItem(Apple);item-setBackgroundColor(QColor(0,60,10));item-setTextColor(QColor(200,111,100));item-setFont(QFont(Helvetica));tableWidget-setItem(0,3,item);tableWidget-setFont(QFont(Helvetica));//对所有的单元格都使用这种字体// 合并单元格tableWidget-setSpan(0,0,3,1);// # 其参数为 要改变单元格的1行数、2列数要合并的3行数、4列数// 设置单元格的大小tableWidget-setColumnWidth(3,200);tableWidget-setRowHeight(3,60);// 设置单元格居中for(introw0;rowui-tableWidget_2-rowCount();row){// 遍历所有行设置单元格居中for(intcol0;colui-tableWidget_2-columnCount();col){QTableWidgetItem*itemui-tableWidget_2-item(row,col);if(item){// 水平垂直居中item-setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);}}}// 获得单击单元格的内容connect(tableWidget,SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)),this,SLOT(getItem(QTreeWidgetItem*,int)));文件相关将数据存储到本地QSetting// 存储QString strCurPathdesktopPath/轨道故障检测数据;//获取应用的目录QSettingscfg(strCurPath/Config.ini,QSettings::IniFormat);cfg.setValue(minIncli,minIncli);// 使用QString strCurPathQCoreApplication::applicationDirPath()/fzconfig.ini;//获取应用的目录QSettingscfg(strCurPath,QSettings::IniFormat);cfg.value().tostring().todouble();获取文件路径#includeQStandardPaths//桌面路径QString desktopPathQStandardPaths::writableLocation(QStandardPaths::DesktopLocation);//应用路径QString appDirPathQCoreApplication::applicationDirPath();打开文件并写入QFilefile(filePath);// 以写入模式打开若文件不存在则创建if(file.open(QIODevice::WriteOnly|QIODevice::Text)){QTextStreamout(file);outdata;// 写入数据file.close();// 关闭文件}线程相关主线程只负责数据的更新、部件的操控子线程只负责数据和业务逻辑的处理不能越级操控主线程的部件和更新数据子线程通过信号槽将参数和数据传送至主线程QThread线程类QThread workerThread;// 数据导出线程类RTDTnewDataRealtimeOut();RTDT-moveToThread(workerThread);connect(workerThread,QThread::finished,RTDT,QObject::deleteLater);//该线程结束时销毁workerThread.start();QtConcurrent线程类QtConcurrent 是 Qt 框架提供的一个模块用于简化多线程编程。它提供了一些高级的 API使得开发者可以更方便地在 Qt 应用程序中实现并行计算而无需手动管理线程的创建、销毁和同步等复杂操作。QtConcurrent::run用于在单独的线程中执行一个函数或方法。它接受一个可调用对象如函数、成员函数、lambda 表达式等作为参数并返回一个 QFuture 对象用于跟踪任务的执行状态和获取结果。QTconcurrent#includeQtConcurrent// 有参数的函数QtConcurrent::run(this,DatabaseManager::asyncReadFileToDatabase,folderPath);// lamdaQtConcurrent::run([](){QElapsedTimer timer;timer.start();}Qchart曲线图相关//设置橡皮筋ui-widget_40-setRubberBand(QChartView::HorizontalRubberBand);MySQL数据库常用命令--常用数据类型 QString sqlSchemaCREATE TABLE folder_record (id VARCHAR(36) PRIMARY KEY COMMENT ID,datetime DATETIME NOT NULL COMMENT 日期年月日时分秒,date DATE NOT NULL COMMENT 日期年月日,time TIME NOT NULL COMMENT 时间时分秒,int INT COMMENT 整型,double DOUBLE COMMENT 双精度浮点型,decimal DECIMAL(M,D) COMMENT 定点数M 总位数D 小数位数,char CHAR(255) NOT NULL COMMENT 短文本最长255,varchar VARCHAR(65535) NOT NULL COMMENT 长文本最长65535,) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT文件夹记录表;;--创建数据库如果不存在 CREATE DATABASE IF NOT EXISTS db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;--删除数据库 DROP DATABASE IF EXISTS db_name;--切换数据库 USE db_name;--查看所有数据库 SHOW DATABASES;--查看当前使用的数据库 SELECTDATABASE();--创建表 CREATE TABLE IF NOT EXISTSusers(id INT PRIMARY KEY AUTO_INCREMENT,nameVARCHAR(50)NOTNULL,emailVARCHAR(100)UNIQUE,age INT DEFAULT18,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP);--删除表 DROP TABLE IF EXISTS users;--查看表结构 DESCRIBE users;--插入数据 INSERT INTOusers(name,email,age)VALUES(Alice,aliceexample.com,25);INSERT INTO usersVALUES(DEFAULT,Bob,bobexample.com,30,DEFAULT);--查询数据 SELECT*FROM users;SELECT name,age FROM users WHERE age20ORDER BY age DESC LIMIT10;SELECT DISTINCT age FROM users;--更新数据 UPDATE users SET ageage1WHERE nameAlice;--删除数据 DELETE FROM users WHERE age18;