CHAO_^
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Qt 设置隐式加载dll路径
我们对动态库的调用,是在代码中直接使用LoadLibrary,或其他加载函数,直接对dll或so进行加载,然后解析文件中的函数符号,并调用该函数。这种链接方式,称之为显式链接。从上述描述可以分析,隐式加载是不能从手动指定的位置进行加载的。但除了上述两种方式,还有一种延迟加载,可以融合隐式加载的便捷性和显式加载的位置灵活性。在程序从开始运行时,就会按照系统中一定的搜索路径,寻找动态库,找到就自动加载它,才能成功运行程序,这些步骤,是系统自动完成的。在c++中DLL的加载方式有两种,显式加载和隐式加载。原创 2024-02-24 12:50:48 · 743 阅读 · 0 评论 -
QObject 的拷贝构造和赋值操作
我们都知道Qt对标准C++增加了一些功能:signals, slots, object properties, events, event filters, string translation, timers,object trees, guarded pointers, dynamic cast.QObject中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域。原创 2024-02-16 18:06:16 · 264 阅读 · 0 评论 -
QDebug() 重定向打印文件名和行号
【代码】QDebug() 重定向打印文件名和行号。原创 2023-11-26 21:12:19 · 306 阅读 · 0 评论 -
pyqt 实现属性反射
【代码】pyqt 实现属性反射。原创 2023-04-13 21:35:12 · 185 阅读 · 0 评论 -
QT:反射机制
QT 反射机制原创 2022-08-07 19:59:40 · 555 阅读 · 0 评论 -
QT:非阻塞延迟
QT:非阻塞延迟原创 2022-06-04 10:36:02 · 801 阅读 · 0 评论 -
QT 创建dump崩溃日志
QT工程生成dump文件和pdb文件#include "mainwindow.h"#include <QApplication>#include <Windows.h>#include <DbgHelp.h>#include <QTime>#include <QMessageBox>LONG ApplicationCrashHandler(EXCEPTION_POINTERS *pException){ HAN..原创 2022-02-09 10:01:01 · 1186 阅读 · 0 评论 -
QT 实现全局信号与槽
建立单例类SignalStation,在单例类中定义中转信号void signal_update();#ifndef SIGNALSTATION_H#define SIGNALSTATION_H#include <QObject>class SignalStation : public QObject{ Q_OBJECTpublic: static SignalStation *getInstance(); static SignalStatio..原创 2021-07-11 12:03:59 · 2327 阅读 · 3 评论 -
QT Concurrent处理耗时任务
QT在遇到特别耗时的任务时,会将界面卡死,通常采用的方式是将耗时的任务放入到线程中。这种方式有一个弊端,如果需要得到任务计算的结果,就需要添加一个线程完成的信号,然后接收到任务完成的信号再去取结果,操作复杂,所以需要一种解决方案,可以将任务放入到线程中,同时也可以利用函数返回值,轻松取得结果。QtConcurrent可以实现在.pro中添加QT += concurrent添加头文件#include <QtConcurrent>#include <QFuture&g原创 2021-07-10 15:50:46 · 1190 阅读 · 0 评论 -
QT插件开发
Qt提供了一个类QPluginLoader来加载静态库和动态库,在Qt中,Qt把动态库和静态库都看成是一个插件,使用QPluginLoader来加载和卸载这些库。分为三个部分来实现插件的调用:插件的公共接口 实现插件 调用插件插件接口在编写插件和调用插件时都会用到该接口。#ifndef PLUGININTERFACE_H#define PLUGININTERFACE_H#include <QtPlugin>#define PLUGININTERFACE_..原创 2021-06-27 14:29:41 · 494 阅读 · 0 评论 -
QT 串行化读写配置文件
自定义数据类型QVariant将自定义数据类型使用Q_DECLARE_METATYPE宏进行声明,便于编译器识别。在插入对象的时候,声明QVariant对象,使用setValue方法添加自定义对象。//类型转换 QVariant v; v.setValue(MyStruct);在读取对象的时候门采用QVariant对象的value方法返回自定义对象。MyStruct s = v.value<MyStruct>();QSettings读写自定义QVaria.原创 2021-03-18 16:11:21 · 402 阅读 · 0 评论 -
QT:WaitCondition
QWaitConditon使用流程1.等待条件的线程调用QWaitCondition::wait()阻塞。2.实现条件的线程通过计算完成条件后调用QWaitConditon::wakeOne()或者QWaitCondition::wakeAll()。3.当2中调用wake之后,继续执行wait之后的操作。其中wakeOne会随机唤醒等待的线程中的一个。wakeAll会唤醒所有的等待线程。互斥机制为了保证先调用wait再调用wake,wait() 在使用时必须传入一个上锁的 QMu...原创 2020-12-20 12:33:26 · 466 阅读 · 1 评论 -
QT: 为程序加入超级管理员权限
当QT应用需要对C盘文件进行修改时,可能由于权限不够导致修改失败,这时需要对应用程序加入超级管理员权限。在pro文件中加入QMAKE_LFLAGS += /MANIFESTUAC:\"level=\'requireAdministrator\' uiAccess=\'false\'\"添加成功后,安装的文件快捷方式上会出现一个盾形的图标。使用QT进行编译时可能会出现,启动程序失败,路径或者权限错误的问题,以管理员身份重新运行QT就可以了。...原创 2020-09-23 21:43:38 · 1612 阅读 · 5 评论 -
QT : 启动界面
当一个应用程序启动时,在展示主窗口之前,需要初始化一些运行环境,需要在这段空白的时间中,向用户提供一个展示程序运行状态的窗口。尝试使用一个普通的widget窗口来实现启动界面,单是在执行初始化任务时,窗口不能同步显示。QT中提供了QSplashScreen 来显示启动界面。执行流程:执行splash.show(),加载静态或动态图片,展示初始化界面。 执行初始化任务 显示主窗口 执行splash.finish(&window),隐藏启动画面。int main(int .原创 2020-08-27 23:02:48 · 1312 阅读 · 1 评论 -
QT:配置文件
写入数据 QSettings *settings = new QSettings(CONFIG_PATH, QSettings::IniFormat); QString ItemName = "config/line"; QString result = settings->value(ItemName).toString();读取数据 QSettings *settings = new QSettings(CONFIG_PATH, QSe.原创 2020-08-19 19:47:03 · 305 阅读 · 0 评论 -
QT : 判断文件是否存在
#include <QFileInfo>#include <QMessageBox> QFileInfo file(FILE_PATH);if(file.exists() == false){ QMessageBox::about(nullptr, "error", "Missing config file!");}原创 2020-08-19 13:28:56 · 1804 阅读 · 0 评论 -
QT:设置程序图标
1. 将图标图片转化为ico格式,命名为icon.icohttps://www.easyicon.net/covert/2. 将ico图标文件放入到工程根目录下3. 在pro文件中添加RC_ICONS=icon.ico原创 2020-08-14 16:03:09 · 259 阅读 · 0 评论 -
QT:等待对话框
1. gif动图显示等待对话框#include "waitting.h"#include "ui_waitting.h"Waitting::Waitting(QWidget *parent) : QWidget(parent), ui(new Ui::Waitting){ ui->setupUi(this); this->setWindowOpacity(0.8); setWindowFlags(Qt::Dialog | Qt::Frame原创 2020-08-14 16:02:59 · 1085 阅读 · 0 评论 -
QT:获得系统时间
QDateTime local(QDateTime::currentDateTime());QString localTime = local.toString("yyyy_MM_dd_hh_mm_ss");原创 2020-08-10 23:52:09 · 331 阅读 · 0 评论 -
QT:QTextBrowser设置最大行数
ui->textBrowser->document()->setMaximumBlockCount(10);原创 2020-08-05 00:19:17 · 5757 阅读 · 0 评论 -
QT:实现悬浮控件
实现控件置顶悬浮,鼠标左键切换状态,右键拖动。#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QMouseEvent>#include <QPoint>#include <QPixmap>#include <QDesktopServices>#include <QUrl>#include <qlabel.h>.原创 2020-07-09 22:30:39 · 4723 阅读 · 0 评论 -
QT : 多线程使用定时器
方法一:run()函数中初始化和start timer。void MyThread::run(){ timer = new QTimer(); connect(timer,SIGNAL(timeout()),this,SLOT(timerOut())); timer->start(1000); exec();}void MyThread::timerOut(){ qDebug()<<"Current Thread ID:"<原创 2020-06-07 12:22:57 · 4457 阅读 · 1 评论 -
QT:调用Python脚本
环境配置Python的版本是Python3.5,使用anaconda安装。加入头文件和库文件路径INCLUDEPATH += D:\Anaconda\Anaconda3\includeLIBS += D:\Anaconda\Anaconda3\libs\python35.lib基础调用#include "mainwindow.h"#include <Python.h>#include <iostream>#include <QAp...原创 2020-05-23 17:16:39 · 609 阅读 · 0 评论 -
QT:事件传递
可被传递的事件可以通过accept/ignore进行标记,用于表示“接收”或是 “忽略”这个事件(缺省为接收)。若事件hanlder调用accept,则事件不会继续被传递父控件。可以通过ignore或者再次传递事件,将事件传递给父控件。void QWidget::keyPressEvent(QKeyEvent *event){ event->ignore();}或者void QWidget::keyPressEvent(QKeyEvent *event){ .原创 2020-05-12 20:30:09 · 667 阅读 · 0 评论 -
Qt:串口
新建串口QSerialPort*m_serialPort=newQSerialPort();if(m_serialPort->isOpen()){m_serialPort->clear();m_serialPort->close();}获得串口列表QStringListCSeria...原创 2020-03-31 19:47:46 · 454 阅读 · 0 评论 -
QT:在光标处输出字符
QT中自带的模拟按键消息只能实现QT内部应用的事件传输,如果需要将事件传到外部应用,则需要使用windows apiwindows api中的mouse_event和keybd_event可以模拟按键和鼠标事件,需要添加头文件<windows.h>,用到的库文件为user32.libmouse_eventmouse_event(MOUSEEVENTF_RIGHTDOW...原创 2020-03-31 19:48:00 · 1361 阅读 · 1 评论 -
QT :输出日志
QtMessageHandler qInstallMessageHandler(QtMessageHandler handler)qInstallMessageHandler来实现输出详细日志,输出文件名,行号,所在函数及事件,并写入文件。最后调用系统原来的函数,使信息像之前一样输出到调试窗口,便于开发。qInstallMessageHandler(Debug::outputMessag...原创 2020-03-31 19:50:26 · 451 阅读 · 1 评论 -
QT:TTS
.pro文件中添加QT+=texttospeech简单使用QTextToSpeech*tts=newQTextToSpeech();if(tts->state()==QTextToSpeech::Ready){tts->say(QString::fromLocal8Bit("欢迎光临"));}QT中实现文字转语音其实很简单...原创 2020-03-31 19:50:17 · 1125 阅读 · 2 评论 -
QT:QTableWidget
基本设置设置行列数this->setColumnCount(2);this->setRowCount(2);设置表头QStringListheader;header.append(QString::fromLocal8Bit("姓名"));header.append(QString::fromLocal8Bit("成绩"));this->setHor...原创 2020-03-31 19:46:31 · 651 阅读 · 0 评论 -
QT:样式表(StyleSheet)
样式表加载的三种方法以更改按钮的样式为例:1. 设计师界面直接添加2. 加载QSS文件新建一个资源配置文件*.qrc,一般放在工程更目录下,该文件用于管理资源。右键该资源文件,选择添加现有文件添加已经做好的qss文件,则形成如下目录结构则qss的路径为:注意最好不要添加前缀什么的,不同的资源类型,直接用文件夹进行管理就好了,添加前缀同时又用文件夹...原创 2020-03-31 19:48:19 · 446 阅读 · 0 评论 -
QT:获得坐标位置
全局坐标(显示器坐标)QPoint QMouseEvent::globalPos() QPoint QCursor::pos() [static] 相对坐标(窗口坐标)QPoint QMouseEvent::pos() 全局坐标转相对坐标QPoint QWidget::mapFromGlobal(const QPoint & pos) const 相对坐标转...原创 2020-03-31 19:51:27 · 1316 阅读 · 0 评论 -
QT:在S3C6410上点亮一个LED灯
首先进入main.cpp文件,里面的内容非常简单.#include"main_form.h" #includeQTOPIA_ADD_APPLICATION("led-testing",TMainForm)led-testing是要生成的可执行文件名.TMainForm是用designer设计图形界面主界面名.QTOPIA_MAIN在main_fo原创 2015-01-11 21:18:09 · 2251 阅读 · 0 评论 -
QT:信号与槽
sender.h#ifndef SENDER_H#define SENDER_H#include <QObject>class Sender : public QObject{ Q_OBJECTpublic: Sender();signals: void send_msg(); void send_msg(int x);};...原创 2018-05-24 20:25:06 · 261 阅读 · 0 评论 -
QT:自适应布局
拉入三个widget,左边放入button和treeView,中间放入LineEdit和ListView,右边放入TextEdit,三个都设置为垂直布局。此时控件不能随窗口自适应。窗口自适应布局接下来对整个窗口进行水平布局,可实现控件随窗口大小自适应。但存在的问题是三栏不能各自调整大小,这时需要另外一种布局管理器QSplitter。控件单独调整大小...原创 2020-03-31 19:56:18 · 5914 阅读 · 0 评论 -
QT:QGraphiceView 框架
QGraphicsView(视图窗口部件)GraphicsView和QPainter的区别GraphicsView是一个基于图元的Model/View架构的框架,每一个组件都是一个独立的元素。QPainter采用面向过程的描述方式绘图;GraphicsView采用面向对象的描述方式绘图。GraphicsView绘图时首先创建一个场景,然后创建图元对象(如一个直线对象、一个多边形对象),再使...原创 2018-04-27 22:11:01 · 1675 阅读 · 0 评论 -
QT:代码动态管理控件
通常在添加控件时,使用Qt Designer拖动就可以了,但是偶尔也会遇到需要使用代码动态添加控件的时候。在需要动态增减空间的部件上添加一个布局控件,然后在布局上增减控件,这样部件大小会跟着变化。 新增控件时,名称不要重复。 新增控件时,需要设置最小宽高,以免加入布局后缩到最小。 删除控件时,一定要在父部件上找,而不是在布局上。 删除空间时,先判断指针空间是否为空。添加控件:...原创 2018-05-24 20:24:44 · 1909 阅读 · 1 评论 -
QT:自定义控件
QT中原本的控件不能满足需求需要自定义控件然后将原控件提升为自定义控件。QT中原本QgraphicsView类不具备鼠标及按键的事件捕捉功能,所以需要对该类进行继承,然后添加鼠标响应事件。 1. 新建一个普通的类CustomQGraphicsViewclass CustomQGraphicsView :{public: CustomQGraphicsView();};2. 继...原创 2018-05-24 20:24:58 · 1165 阅读 · 0 评论 -
QT:互斥量
QMutex类提供了一种保护一个变量或一段代码的方法。QMutex主要包含3个方法:QMutex mutex;Mutex.lock();如果互斥量mutex处于解锁状态,那么当前线程立刻锁定它,否则当前线程被阻塞直到占用该mutex的线程对它解锁为止。Mutex.unlock();解锁。Mutex.tryLock();如果互斥量mutex处于解锁状态,那么当前线程立刻锁定它,否则当前线程立即返回。...原创 2018-06-03 22:43:21 · 1206 阅读 · 0 评论 -
QT:定时器
使用QTimer创建定时器QTimer主要使用两个方法:QTimer timer;timer.start(n ms);开启定时器,输入参数为每n 毫秒触发一次timeout信号。timer.stop();停止定时器。建立timeout信号与槽函数的连接:connect(timer,SIGNAL(timeout()),this,SLOT(on_timeout()));注意一定要先建立连接才能...原创 2018-06-03 23:01:57 · 1225 阅读 · 0 评论 -
QT:文件对话框
1. 选择文件 QString filename = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("请选择模板文件"), "./", tr("AOI (*.ini)"));2. 选择文件夹QString folder_nam...原创 2018-05-27 22:00:40 · 990 阅读 · 0 评论