![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
QT
vegetablesssss
一只菜鸟。
展开
-
QT内存管理机制
当一个对象是另一个对象的子对象时,父对象负责管理子对象的生命周期。当父对象被销毁时,它所拥有的子对象也会被销毁,从而释放相关的内存。可以通过 setParent() 方法来设置父对象,或者在对象构造函数中传入父对象指针来建立父子关系。3.对象删除延迟:Qt 提供了 QObject::deleteLater() 方法,用于将对象的删除操作延迟到稍后的事件循环中执行。这样做可以确保在安全的上下文中删除对象,避免在对象的槽函数或信号处理函数中直接删除对象,从而引发潜在的问题。原创 2024-05-14 10:01:47 · 213 阅读 · 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 · 455 阅读 · 0 评论 -
QT事件过滤器
引言事件过滤器,顾名思义就是对某个控件的事件进行过滤,以改变原有的事件所执行的动作,比如说,在一个QLineEdit中按下键盘上的A字母键,正常情况下就是在LineEdit中输入一个字母A,如果我想改变该事件处理方式,正常情况下可以自定义类继承QLineEdit类,然后重写keyPressEvent方法即可,但是如果有很多控件都需要改变事件的处理方式,这种情况下使用自定义类就显得比较复杂,于是我们就可以使用事件过滤器。实现方式:1 在目标对象上调用installEventFilter(),注册监视对象原创 2021-10-13 11:21:04 · 677 阅读 · 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 · 207 阅读 · 0 评论 -
QComboBox设置为支持下拉框搜索模式
pComboBox->setEditable(true);QCompleter* pCompleter = new QCompleter(pComboBox->model());pCompleter->setFilterMode(Qt::MatchContains);pComboBox->setCompleter(pCompleter);效果:原创 2021-09-02 14:41:44 · 1845 阅读 · 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 · 485 阅读 · 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 · 6988 阅读 · 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 · 1646 阅读 · 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 · 1050 阅读 · 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 · 1426 阅读 · 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 · 16009 阅读 · 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 · 223 阅读 · 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 · 1454 阅读 · 0 评论 -
QT中的closeEvent方法
该方法是QWidget中的一个虚函数,可以通过重写该函数来达到控制窗体关闭的目的。virtual void closeEvent(QCloseEvent* event) override;可以通过参数event来控制是否让窗体关闭。QT官方文档对该函数的解释为:当Qt从窗口系统收到对顶级窗体的关闭请求时,将使用给定事件调用此事件处理程序。默认情况下,事件被接受并且部件关闭。 您可以重新实现此功能,以更改小部件响应窗口关闭请求的方式。 例如,可以通过在所有事件上调用ignore()来防止窗口关闭。原创 2021-02-01 15:26:38 · 10488 阅读 · 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 · 1617 阅读 · 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 · 7818 阅读 · 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 · 738 阅读 · 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 · 1566 阅读 · 0 评论