
Qt日常记录
友善啊,朋友
这个作者很懒,什么都没留下…
展开
-
Qt计算一列竖文本的尺寸
【代码】Qt计算一列竖文本的尺寸。原创 2024-07-29 15:29:05 · 398 阅读 · 0 评论 -
QVariant存放QWidget*
QVariant仅存放QWidget对象的地址,销毁时不会销毁对应的QWidget对象。这种写法可以带来很多便利。原创 2023-05-19 17:26:37 · 2156 阅读 · 3 评论 -
QRegularExpression替换QRegExp的一段代码
QString str = "3639BACB 3639BACC"; QRegularExpression re("[0-9]{4}[A-E]{4}"); int index = 0; while(index < str.length()) { auto match = re.match(str, index); if(match.hasMatch()) { index = match...原创 2022-04-11 17:24:22 · 828 阅读 · 0 评论 -
Qt获取整数的每一位
int n = 5638583; QList<int> list; for (const auto & c : QString::number(n)) { list << c.digitValue(); } qDebug()<<list;原创 2021-11-23 16:17:00 · 2050 阅读 · 0 评论 -
QWidget获取窗口某点的颜色
从 QColorDialog 的源码中翻出来并整理了一下: QScreen *screen = QGuiApplication::screenAt(pressPos); if (!screen) screen = QGuiApplication::primaryScreen(); auto gpos = mapToGlobal(pressPos); const QPixmap pixmap2 = screen->原创 2021-11-05 01:00:48 · 941 阅读 · 0 评论 -
一个消息映射派发列表的思路
根据不同的消息类型发送不同的信号,信号的参数类型相同。定义一个函数指针的类型 typedef void (类名::*procHandleQJson) (QJsonArray);该类型作为map的值 QMap<QString,procHandleQJson> map;收到消息统一根据key派发void dispatchMsgQJson(QJsonArray array){ if(array.size() == 0) retur原创 2020-09-28 17:49:42 · 200 阅读 · 0 评论 -
实用的Qt窗口标志(Qt::WindowFlags)
窗口标志枚举类型用于指定小部件的各种窗口系统属性。其中一些标志取决于底层窗口管理器是否支持它们。以下是一些比较实用的窗口标志:1、Qt::Widget:这是QWidget的默认类型。如果有父窗口则为子窗口小部件,如果没有父窗口则为独立窗口小部件。2、Qt::Window:小部件是一个窗口,通常带有窗口系统框架和标题栏,而不管小部件是否有父级。如果有父级,小部件在顶层。默认标题栏有最小话、最大化、关闭按钮。如果小部件没有父级,则无法取消设置此标志。 QWidget * w = new QW原创 2021-03-20 23:04:22 · 4492 阅读 · 0 评论 -
信号槽连接和断开的几种常用形式
一、使用SIGNAL()和SLOT()宏的形式:[static] QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)1、创建从发送方对象中的信号到接收方对象中的方法的给定类型的连接。返回连接的句柄,稍后可用原创 2021-03-13 17:30:47 · 2125 阅读 · 0 评论 -
字符串分割QString::split
同样是字符串分割,split()和section()相比不同之处在于前者将分割内容以list返回。split()有多种重载形式。QStringList QString::split(QCharsep, QString::SplitBehavior behavior = KeepEmptyParts, Qt::CaseSensitivity cs = Qt::CaseSensitive) const参数3设置是否区分大小写。参数2配置如何处理空字符串:QString::KeepEmpty.原创 2021-02-21 16:57:26 · 10076 阅读 · 0 评论 -
字符串分割QString::section
section用来获取分割字符串,有多个重载版本。QString section(QChar sep, int start, int end = -1, SectionFlags flags = SectionDefault) const;参数1是分割符,取从参数2开始到参数3结束,参数3未指定则一直取到最后,参数4是分割选项。#define debug qDebug()<<int main(int argc, char *argv[]){ QString csv =原创 2021-02-21 15:26:57 · 4381 阅读 · 0 评论 -
QToolTip的使用一例
class hasToopButton : public QPushButton { public: hasToopButton(const QString &text, QWidget *parent) :QPushButton(text,parent) { } protected: void enterEvent(QEvent *)override { ...原创 2020-10-28 15:28:29 · 898 阅读 · 0 评论 -
QString::arg的几种重载版本
为了适配多种数据类型,QString::arg有多个重载版本。1、QString::arg(const QString &a, int fieldWidth = 0, QChar fillChar = QLatin1Char(' '))参数2是最小宽度,不足此宽度则用参数三补全:#define debug qDebug()<<int main(int argc, char *argv[]){ debug QString("hi,my name is %1")..原创 2021-02-18 21:49:11 · 1128 阅读 · 0 评论 -
QStringRef
QStringRef是对一个QString的部分引用。如下图,当从第0个字符开始引用的时候,可见首个字符的地址是一样的:QString为字符串操作提供了各种成员比如mid()、left()、right()等。它们都创建会一个新的字符串,都有一个申请空间和深拷贝的过程。与此相反,QString::midRef()、QString::leftRef()与QString::rightRef()可以用来获取一个QStringRef。效率起见,在能用上QStringRef的地方尽量用QString原创 2021-02-16 21:30:44 · 4499 阅读 · 0 评论 -
控制QString与C风格字符串转换的宏
1、QT_NO_CAST_FROM_ASCII 禁止将C语言风格的字符串或指针转自动转成Unicode。 char cc[] = "hello"; QString str = cc; debug str; QString str2 = "hello"; debug str2;这里进行了转换,将C语言风格的字符指针:const char * p = "hello";和C语言风格的字符串cc[]转成一个QString,在pro文件中添加:DEFI原创 2021-02-16 20:46:31 · 672 阅读 · 0 评论 -
std::string/QString原始字符串字面值常量
当要写一个字符串里面有很多斜杠的时候(比如正则表达式),为了便于书写和不出错,可以使用原始字符串字面值常量。1、std::string的原始字符串字面值常量#define debug qDebug()<<#define cppdebug std::cout <<int main(int argc, char *argv[]){ std::string s = R"(asdfghjkl\n\t\y\z6666\\\\\////)"; cppdebug原创 2021-02-14 17:53:33 · 1396 阅读 · 0 评论 -
自定义类型重载std::cout和qDebug()
struct ceshi{ int frist; int second; ceshi(int one = 0,int two = 0):frist{one},second{two} { } friend std::ostream& operator<<(std::ostream&,const ceshi&); friend QDebug operator<<(QDebug dbg, const ces.原创 2021-02-12 10:11:25 · 987 阅读 · 0 评论 -
信号阻塞器QSignalBlocker的用法
QSignalBlocker在构造函数中阻塞信号,在析构函数中它将状态重置为构造函数运行前的状态。QSignalBlocker用来代替blockSignals()。当使用blockSignals()来阻塞信号时,总要成对使用blockSignals(true)和blockSignals(false)。一不小心少写一个则信号一直阻塞后果难料,使用QSignalBlocker代替则不会有问题。测试代码:#include "widget.h"#include "ui_widget.h"#incl原创 2021-01-19 22:46:08 · 3404 阅读 · 0 评论 -
使用Qt反射机制调用函数一例
使用场景:多个自定义图形项(类名称都不同)里都定义了名称同样的函数 QSizeFgetItemSize();要遍历场景中的图形项调用此函数。 foreach (QGraphicsObject* item, deviceList) { const QMetaObject* mobj = item->metaObject(); for(int i = 0; i < mobj->methodCount(); i++) { .原创 2021-01-05 11:16:00 · 829 阅读 · 0 评论 -
重置文件夹
void resetTempFolder(QString filePath){ QFile uiFile(filePath); QFileInfo info(uiFile); QDir dir(info.absoluteDir()); if(dir.exists(QStringLiteral("tempFolder"))) { dir.cd(QStringLiteral("tempFolder")); dir.removeRecur.原创 2020-12-15 10:58:23 · 388 阅读 · 0 评论 -
Qt在Release模式下调试
默认Release模式下是不能调试的,只需要加上:QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFOQMAKE_LFLAGS_RELEASE = $$QMAKE_LFLAGS_RELEASE_WITH_DEBUGINFO即可使用调试,但是要注意这样会使生成的exe文件大小急剧增大(亲测从11MB—>360MB),所以发布正式版本的时候要注释掉这两句。...原创 2020-12-15 09:55:33 · 3837 阅读 · 1 评论 -
C++/Qt随机数
1、c++标准库随机数标准库随机数由引擎和分布两部分构成。头文件:#include <random>生成0~9的均匀分布的随机数: std::uniform_int_distribution<int> u(0,9);//均匀分布 std::default_random_engine e;//随机数引擎 qDebug()<<"随机数引擎可产生随机数的范围:"<<e.max()<<e.min(); for(i原创 2020-12-13 23:47:15 · 1981 阅读 · 0 评论 -
Qt:获取枚举的名称和值
class Widget : public QWidget{ Q_OBJECTpublic: Widget(QWidget *parent = nullptr); ~Widget(); enum ceshi { ceshi01 = 9, ceshi02, ceshi03 }; Q_ENUM(ceshi)};#endif // WIDGET_H const QMetaObject .原创 2020-11-21 12:28:35 · 3427 阅读 · 0 评论 -
在const函数里发信号
信号定义的时候要在后面加上const,这样的信号才能在const函数里发送,否则会报错原创 2020-10-29 00:24:13 · 765 阅读 · 0 评论 -
获取数字对应的二进制的每一位
uchar A = 0x61; uchar cont = 0x01; QString s; for(int i = 0; i < 8; ++i, cont <<= 1) { qDebug()<<cont; if (cont & A) s.insert(0,"1"); else s.insert(0,"0"); } qD...原创 2020-08-10 22:45:20 · 1784 阅读 · 0 评论 -
QT:json值的修改--QJsonValueRef
首先构建一个json对象: QJsonArray versionArray; versionArray.append(4.8); versionArray.append(5.2); versionArray.append(5.7); QJsonObject pageObject; pageObject.insert("Home", "https://www.qt.io/"); pageObject.insert("Download", "http原创 2020-07-26 17:58:10 · 5367 阅读 · 0 评论 -
Qt::获取两个字符串的前缀和后缀的相同部分
QString get_same_str(QString & str1,QString & str2){ int size = std::min(str1.size(),str2.size()); QByteArray ba = str1.toLatin1(); const char *p1 = ba.data(); QByteArray ba2 = str2.toLatin1(); const char *p2 = ba2.data(); .原创 2020-07-01 16:45:44 · 1248 阅读 · 0 评论 -
Qt各种数据转换记录
1.10进制int转ucharint a = 12;uchar OutputNum = uchar(QString::number(a,16).toUpper().toInt(nullptr,16));效果:12 -> 0x0c原创 2020-06-17 18:20:09 · 774 阅读 · 0 评论 -
设置委托中控件的样式的2个注意事项
QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const1.重写委托的createrEditor函数的时候不能去掉const,否则设置样式不起作用2.设置下拉框的样式如下:"QComboBox{border-radius: 6px;border: 1px solid #%1;padding:6px 10px 6px 10p.原创 2020-06-16 11:52:07 · 264 阅读 · 0 评论 -
Qt碎片知识收集
本帖收集各种零碎的Qt知识1.QComboBox如何设置下拉显示的最大个数:setMaxVisibleItems();2.不使用disconnect阻塞信号发送:blockSignals(true);//开启阻塞该对象的信号--会产生信号的操作--blockSignals(false);//取消阻塞该对象的信号3.QTableWidget在设置item之前需要先设置表格的行数和列数数据才会显示出来4.QPushButton的图标放在右边:QPushButton* testBu原创 2020-06-14 22:58:15 · 397 阅读 · 0 评论 -
qt中各种类型转成uchar
1.QString转成uchar,不够前面补0QString str = "65535";转成uchar1)QString转成16进制,4字节,不够前面补0:QString int_to_str_16 = QString("%1").arg(str.toInt(), 4,16,QLatin1Char('0'));2)uchar的范围是0-255 所以要拆开成2部分:uchar u1 = uchar(int_to_str_16.left(2).toInt(nullptr,16));原创 2020-06-04 13:11:29 · 4509 阅读 · 0 评论 -
Qt如何disconnect一个lambda匿名函数
方法1:QObject::disconnect(senderInstance, &Sender::mySignal, this, nullptr);方法2:QObject *obj = new QObject(this);QObject::connect(senderInstance, &Sender::mySignal, obj, [this](){ obj-...原创 2020-04-18 15:49:55 · 2377 阅读 · 2 评论 -
qt 设置多语言
1、在 pro 文件中设置:TRANSLATIONS += helloworld_en.ts \ helloworld_zh.ts \ helloworld_zhf.ts2、在qt creator中选工具->外部->Qt 预言家->更新翻译,文本将更新到这些翻译文件中。3、使用qt Linguist 工具打开翻译文件,将文本翻译成自己想要的内容,然后点击工具里的“发布”,会生成 *.qm 文件。4、将生成的原创 2020-04-16 09:49:02 · 1585 阅读 · 0 评论 -
QT 一段代码运行时间
QTime runTime; runTime.start(); qDebug() << "运行时间:" << runTime.elapsed();原创 2019-07-16 17:01:49 · 868 阅读 · 0 评论 -
QT:获取两个list中的不同值
QStringList result; for(QString str:QStringList A) { if(!B.contains(str)) { result<<str; } } return result;...原创 2019-05-24 14:35:45 · 2639 阅读 · 0 评论