
QT
vegetablesssss
一只菜鸟。
展开
-
QT5.15.2加载pdf为QGraphicsScene的背景
必须要安装QT源码,可以看到编译器lib目录已经有pdf相关的lib文件,d是debug1.找到源码目录:D:\soft\QT\5.15.2\Src\qtwebengine\include复制这两个文件夹到编译器的包含目录中:D:\soft\QT\5.15.2\msvc2019_64\include。原创 2025-03-17 20:45:27 · 323 阅读 · 0 评论 -
QxOrm生成json
注意运行时要把QxOrmd.dll和exe放在同一目录。将QxOrm中上面三个目录拷贝到新建的Qt项目中。lib目录中会生成dll和lib文件。pro文件添加使用QxOrm第三方库。下载Qxorm-1.5版本。原创 2025-02-13 21:17:40 · 240 阅读 · 0 评论 -
拖动锚点旋转QGraphicsItem
AnchorGraphicsItem 即为锚点,可将它放置在QGraphicsItem中心的水平位置,QGraphicsItem为AnchorGraphicsItem 的父类,拖动AnchorGraphicsItem 即可旋转QGraphicsItem。原创 2025-02-08 17:38:03 · 176 阅读 · 0 评论 -
QGraphicsItem拖动时自动对齐和吸附
【代码】QGraphicsItem拖动时自动对齐和吸附。原创 2025-02-06 13:29:19 · 143 阅读 · 0 评论 -
使用QGraphicsProxyWidget将widget绘制在QGraphicsView中
需要注意的是,在使用QGraphicsProxyWidget时,如果调用MyGraphicsItem 的paint方法无法显示QTableWidget时,需要显示调用QGraphicsProxyWidget的paint方法才能显示,或者直接调用widget的render方法来进行绘制。上面是一个例子,使用QGraphicsProxyWidget将QTableWidget绘制在QGraphicsView中。该表格可以拖动行宽和列高并且不显示滚动条,自动调整大小,也可以右键增加行或者列。原创 2025-01-09 21:59:23 · 252 阅读 · 0 评论 -
QPainter,QPen,QBrush详解
QPainter的构造函数传入的对象为QPaintDevice,意为在哪个设备上绘制,当前widget即为绘制对象。Qt::BrushStyle::Dense7Pattern控制画刷样式为一系列小圆点,有各种样式都可以设置。对于普通widget,可以重写paintEvent事件来进行绘制。给QPainter设置QPen和QBrush对象即可进行绘制。QBrush:画刷,控制图形的填充颜色样式。QPen:画笔,控制图形的边框轮廓。QPainter:画家。原创 2025-01-06 21:27:58 · 284 阅读 · 0 评论 -
QT三点绘制圆弧
第一种是使用QPaintPath绘制,moveTo方法移动到起点。求算三点构成三角形的外接圆的圆心和半径。第二种是使用drawArc绘制。原创 2025-01-02 09:37:25 · 346 阅读 · 0 评论 -
QGraphicsView,QGraphicsScene,QGraphicsItem坐标和事件
QGraphicsScene中的坐标为绝对坐标,重写mousePressEvent方法,可以通过QGraphicsSceneMouseEvent的scenePos方法获取鼠标点击的场景坐标。原创 2024-12-31 22:03:10 · 327 阅读 · 0 评论 -
undefined reference to `vtable for错误
根本原因是在使用 Q_OBJECT 宏时,Qt 的元对象系统会生成一些额外的代码(例如信号、槽和动态属性的支持)。每当使用 Q_OBJECT 宏时,Qt 的 Meta-Object Compiler (MOC) 需要自动生成一个 .moc 文件,在我这个错误中,我发现没有生成moc文件,后面发现是我没有在pro文件中加入自己写的类文件,在使用Q_OBJECT宏的类中,一定要分开写头文件和cpp文件,并且加入到pro文件中,不然编译会报错。原创 2024-12-25 23:29:11 · 303 阅读 · 0 评论 -
QT安装5.15之后的版本和安装后添加其他漏装模块
安装完成之后,如果发现某个模块漏装了,可以在安装目录下MaintenanceTool.exe工具添加子模块安装,不需要卸载重装。注意5.15版本需要勾选Archive筛选才可以看到。原创 2024-12-25 22:15:15 · 286 阅读 · 0 评论 -
pyqt和pycharm环境搭建
python安装:python3.9.13 64位(记得勾选Path环境变量)pycharm安装:community免费版安装PyQt5和PyQt5-tool。原创 2024-12-23 22:15:04 · 1094 阅读 · 0 评论 -
QListWidget中的svg拖放到QGraphicsView中显示
要触发dropEvent方法必须先触发dragEnterEvent和dragMoveEvent方法。dragEnterEvent控制是否可以拖进去。dropEvent控制鼠标拖动放下事件。主要是涉及到以下三个方法。原创 2024-12-17 17:14:08 · 217 阅读 · 0 评论 -
使用QGraphicsItem来加载svg实现移动放大缩小
继承QGraphicsView 重写滚轮事件可以实现视图缩放。使用下面的方法可以实现QGraphicsItem的拖动功能。原创 2024-12-11 14:15:27 · 479 阅读 · 0 评论 -
QT内存管理机制
当一个对象是另一个对象的子对象时,父对象负责管理子对象的生命周期。当父对象被销毁时,它所拥有的子对象也会被销毁,从而释放相关的内存。可以通过 setParent() 方法来设置父对象,或者在对象构造函数中传入父对象指针来建立父子关系。3.对象删除延迟:Qt 提供了 QObject::deleteLater() 方法,用于将对象的删除操作延迟到稍后的事件循环中执行。这样做可以确保在安全的上下文中删除对象,避免在对象的槽函数或信号处理函数中直接删除对象,从而引发潜在的问题。原创 2024-05-14 10:01:47 · 342 阅读 · 0 评论 -
QObject源码剖析-d指针和q指针
可以看到QObjectPrivate为QObjectData的子类,从QObject的构造函数可以看出,QObject和QObjectPrivate互相拥有对方的对象指针,那么QObject为什么要这么做呢?实际上QObject的成员变量都放在QObjectPrivate中,为什么要将成员变量放在QObjectPrivate中然后在QObject中使用D指针d_ptr呢?其实q指针和d指针利用的变成技巧c++PIMPL,有兴趣可以去查找相关资料。上面的d_ptr和q_ptr就是d指针和q指针。.......原创 2022-07-22 15:03:22 · 491 阅读 · 0 评论 -
QT事件过滤器
引言事件过滤器,顾名思义就是对某个控件的事件进行过滤,以改变原有的事件所执行的动作,比如说,在一个QLineEdit中按下键盘上的A字母键,正常情况下就是在LineEdit中输入一个字母A,如果我想改变该事件处理方式,正常情况下可以自定义类继承QLineEdit类,然后重写keyPressEvent方法即可,但是如果有很多控件都需要改变事件的处理方式,这种情况下使用自定义类就显得比较复杂,于是我们就可以使用事件过滤器。实现方式:1 在目标对象上调用installEventFilter(),注册监视对象原创 2021-10-13 11:21:04 · 719 阅读 · 0 评论 -
QT多线程
QT多线程有两种实现方式:1、继承QThread自定义类继承自QThread,重写run方法class MyThread : public QThread{ Q_OBJECTpublic: explicit MyThread(QObject *parent = 0);protected: //QThread的虚函数 //线程处理函数 //不能直接调用,通过start()间接调用 void run();signals: void isD原创 2021-09-11 16:36:58 · 259 阅读 · 0 评论 -
QComboBox设置为支持下拉框搜索模式
pComboBox->setEditable(true);QCompleter* pCompleter = new QCompleter(pComboBox->model());pCompleter->setFilterMode(Qt::MatchContains);pComboBox->setCompleter(pCompleter);效果:原创 2021-09-02 14:41:44 · 2749 阅读 · 0 评论 -
QInputDialog使用
最近突然发现了一个Qt内置比较好用的类QInputDialog,可以通过这个对话框来获取到想要的输入的数字和字符串,可以避免自己写界面,比较方便,下面简单介绍一下用法。bool isok;int value = QInputDialog::getInt(nullptr, "title", "label", 100, 1, 10000, 1, &isok, Qt::Dialog | Qt::WindowCloseButtonHint);if (!isok) return;值得一提的是最后一原创 2021-08-11 20:06:28 · 547 阅读 · 0 评论 -
QMap和std::map判断key是否存在
无论是QMap还是std::map判断key是否存在都可以通过count和find方法count:有返回1,五返回0find:有返回对应的迭代器,无返回尾后迭代器end() map<int, string> m; m.insert(pair<int, string>(1, "12")); m.insert(pair<int, string>(1, "34")); if (m.count(1) > 0) { } if (m.find(1) !=原创 2021-07-29 16:48:10 · 7203 阅读 · 0 评论 -
QString为数字判断
QString text = "fsdfsdf"; QByteArray ba = text.toLatin1();//QString 转换为 char* const char* s = ba.data(); while (*s && *s >= '0' && *s <= '9') s++; if (*s) { //不是数字 } else { //数字 }原创 2021-06-09 16:03:22 · 1706 阅读 · 0 评论 -
VS2019+QT5.9环境调试无法查看到QString变量的值
下载安装 qt-vsaddin-msvc2019-2.5.2-rev.01.vsix插件即可网址:https://download.qt.io/official_releases/vsaddin/2.5.2/原创 2021-06-08 17:41:26 · 1124 阅读 · 0 评论 -
tableWidget里每个item加控件
ui->tableWidget->setColumnCount(2); QStringList header; header << "name" <<"address"; //ui->tableWidget->setColumnWidth(0,30);//设置列宽 ui->tableWidget->setHorizontalHeaderLabels(header); ui->tableWidge...原创 2021-06-08 09:55:46 · 1509 阅读 · 1 评论 -
QComboBox中的currentIndexChanged信号使用
QComboBox中的currentIndexChanged信号存在重载,在使用时,如果使用QT5新版的信号槽语法,须进行强制类型转换。 connect(ui->comboBox,static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),this,&Widget::onCurrentIndexChanged); connect(ui->comboBox,static_cast&.原创 2021-05-27 16:04:07 · 17315 阅读 · 5 评论 -
将ARGB数值存放在数组中
QColor m_color;QSize size;int len = size.width() * size.height() * 4;unsigned char* pBuf = new unsigned char[len+ 1];memset(pBuf, 0, len + 1);int pos = 0;for (int i = 0; i < size.width(); i++){ for (int j = 0; j < size.height(); j++) { pBu原创 2021-03-22 09:57:19 · 261 阅读 · 0 评论 -
QMap和std::map的遍历方法
QMap<QString,QString> mapField;for (auto t : mapField.keys()){ QString keyValue = t; QString valueValue = mapField.value(t);}QMap<QString, QString>::iterator iter = mapField.begin();while (iter != mapField.end()){ QString keyValue原创 2021-03-10 14:08:18 · 1523 阅读 · 0 评论 -
QT中的closeEvent方法
该方法是QWidget中的一个虚函数,可以通过重写该函数来达到控制窗体关闭的目的。virtual void closeEvent(QCloseEvent* event) override;可以通过参数event来控制是否让窗体关闭。QT官方文档对该函数的解释为:当Qt从窗口系统收到对顶级窗体的关闭请求时,将使用给定事件调用此事件处理程序。默认情况下,事件被接受并且部件关闭。 您可以重新实现此功能,以更改小部件响应窗口关闭请求的方式。 例如,可以通过在所有事件上调用ignore()来防止窗口关闭。原创 2021-02-01 15:26:38 · 11605 阅读 · 0 评论 -
QT实现ListWidget和StackWidget切换和对齐
#include "widget.h"#include "ui_widget.h"#include<QListWidgetItem>Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); QListWidgetItem *pLwItem = new QListWidgetItem(); pLwItem->setTe原创 2021-01-25 15:13:37 · 1726 阅读 · 0 评论 -
QT中connect、disconnect和信号槽实现原理
connect用于连接信号和槽函数,但是我们经常忽略最后一个参数,本人在写代码时遇到了bug,选择一个符号进行多次标绘,再选择其他符号时,会将上一次选择的符号也进行标绘,主要时connect最后一个参数搞的鬼。当conncet最后一个参数不写时,connect多少次,槽函数就执行多少次,本人遇到的bug需要将最后一个参数设为Qt::UniqueConnection,避免多次连接,只连接一次。disconnect() 等同于disconnect(this, 0, 0, 0), 删除this的信号与任何槽的原创 2020-12-26 11:50:11 · 8246 阅读 · 1 评论 -
QT中为ListWidget中的item添加右键菜单
//listWidget属性设置为自定义菜单ui->listWidgetCommon->setContextMenuPolicy(Qt::CustomContextMenu);connect(ui->listWidgetCommon, &QListWidget::customContextMenuRequested, [=](const QPoint& pos){ QMenu* pMenu = new QMenu(ui->listWidgetCom原创 2020-12-26 11:48:20 · 779 阅读 · 0 评论 -
QT实现ListWidget排列图片
最近工作遇到了要将点线面符号排列在控件上的问题,采用QListWidget实现:ui->listWidgetCommon->setViewMode(QListWidget::IconMode);//设置内容为图片ui->listWidgetCommon->setIconSize(QSize(50, 50));//设置图片的大小ui->listWidgetCommon->setSpacing(10);//设置每个item之间的间隔大小ui->listWidge原创 2020-12-26 11:44:44 · 1681 阅读 · 0 评论