- 博客(42)
- 资源 (3)
- 收藏
- 关注
原创 VS2019编译 Qt5.15.12 和 Qt6.5.3
debug-and-release: 编译debug和release,如需只编译debug,那么-debug即可。-debug-and-release: 编译debug和release,如需只编译debug,那么-debug即可。编译完之后,执行jom install 即可安装到上述-prefix参数指定的位置,此时build文件夹就可以删掉了。编译完之后,执行以下命令 即可安装到上述-prefix参数指定的位置,此时build文件夹就可以删掉了。在此目录下新建build目录,并cd进入build目录。
2024-04-29 16:32:59 1281
转载 VS2019+Qt5.15.2 编译 QtWebEngine(带MP4解码)
编译准备 下载源码:从https://download.qt.io/下载qt5.15.2版本源码。或者安装QT时选择带源码安装。个人比较喜欢原汁原味的下载。 看个人喜好选择从哪个圈下。 个人Index of /official_releases/qt/5.15/5.15.2/single 下的源码。 编译软件环境:Python 2.7(这么多年过去python3不支持挺蛋疼的)。Visual 2019(喜欢用其它版本也可以,出错自己想办法解决咯。组件能装多少就装多少)Perl 建..
2022-05-26 10:55:58 2211 1
转载 QT中使用DBUS
D-Bus和QT本文以一个实作为例,介绍D-Bus在QT下的绑定。在实作中,我们会在Session Bus上注册一个HotelService,通过这个Service,可以实现check in,check out以及query的动作。为避免歧义,本文对D-Bus中的一些关键术语的表述依然采用英文。这些术语包括:D-Bus, IPC, Message,Message Bus, System Bus, Session Bus, Service, Object, Method, Signal, In..
2022-05-13 09:02:33 1236
原创 打开文件夹并选定指定的文件
Windows下:explorer /select,E:\\file.txtLinux下(通过Dbus):参考网址:freedesktop.org QDBusConnection bus = QDBusConnection::sessionBus(); QDBusInterface dbus_iface("org.freedesktop.FileManager1", "/org/freedesktop/File.
2022-05-12 19:15:15 690
原创 QPainter绘制文本时自动换行
很简单,调用QPainter::drawText()时,传入Qt::TextWordWrap标志即可 !截取一点Qt的文档:void QPainter::drawText(const QRectF &rectangle, int flags, const QString &text, QRectF *boundingRect = nullptr)The flags argument is a bitwise OR of the following flags:Qt::Al
2022-05-11 17:43:13 3359 1
原创 Linux(Ubuntu)上给指定类型文件加上右键打开程序列表
首先需要为程序创建一个.desktop文件 (此步骤自行度娘!~)使用Exec=命令 %U添加,%U作用是传递多个URL,本地文件可以作为文件URL或作为文件路径传递。具体以pluma举例子:文件:/usr/share/applications/pluma.desktop,里面的字段Exec=pluma %U,MimeType=text/plain;表示text/plain类型的文件默认右键“打开方式”有pluma应用。如果修改Exec=pluma,则新打开的text/plain类型的文件默认右
2022-05-11 15:19:23 1045
原创 QT编写跨平台代码注意事项
1.注意大小写(文件名,路径,控件提升名称等)2.路径使用正斜杠,不使用反斜杠对于平台特定要求,使用QDir::toNativeSeparators()进行转换3.不在自定义的命名空间里面使用Q_DELCARE_METATYPEnamespace myspace{ struct stru{ int x; } Q_DELCARE_METATYPE(myspace::stru) //BAD!!!!}Q_DELCARE_METATYPE(myspace::stru) //GOOD!!!!
2022-03-02 14:30:51 745 1
原创 GCC下设置调试信息级别
gcc的-g选项可以在编译时生成调试信息,便于调试器对程序进行调试。通过分离程序,可以把调试信息从模块中分离出来形成单独的调试信息文件,类似于VS的pdb文件。gcc的调试信息可以设置生成级别,对应的参数为-glevel. level可以为0,1,2,3,级别越高,体积越大。Level0:0不生成调试信息Level1:只生成最小调试信息,不包含局部变量的调试信息Level2:则会生成比较多的调试信息,但是对应的文件体积会比级别1大很多。 默认值为2Level3:会生成扩展...
2022-02-26 16:54:03 1450
原创 Invalid parameter passed to C runtime function.
最近调试程序时,发现信息面板不停地打印如下信息:Invalid parameter passed to C runtime function.Invalid parameter passed to C runtime function.Invalid parameter passed to C runtime function.Invalid parameter passed to C runtime function.Invalid parameter passed to C runtime
2022-02-09 15:54:44 818 1
原创 天杀的QNetworkRequest终于加入超时机制了
QT总算是良心发现,从5.15版本开始支持了QNetworkRequest的超时设置,再也不用自己造轮子了!void QNetworkRequest::setTransferTimeout(int timeout = DefaultTransferTimeoutConstant)Sets timeout as the transfer timeout in milliseconds.Transfers are aborted if no bytes are transferred bef.
2022-01-26 14:08:16 2479 4
原创 不是所有的token在宏定义中都可以使用##连接
我定义了下面几个宏:#define CONNAT(a, b) CONNAT_IMPL(a, b)#define CONNAT_IMPL(a, b) a##b#define STR(s) STR_IMPL(s)#define STR_IMPL(s) #s然后再代码中使用:std::string str = STR(CONNAT(/home/boy/, zz));我的本意是想得到一个字符串"/home/boy/zz"但是GCC编译器给出了编译错误:error: pasting
2022-01-13 14:26:31 732
原创 Linux下GCC/G++编译出来的可执行程序无法双击运行
查看可执行文件,发现文件属性是shared library,而不是executable,导致这种情况的原因就是g++默认使用了-fpie参数。什么是pie?PIE(position-independent executable)是一种生成地址无关可执行程序的技术。如果编译器在生成可执行程序的过程中使用了PIE,那么当可执行程序被加载到内存中时其加载地址存在不可预知性。PIE还有个孪生兄弟PIC(position-independent code)。其作用和PIE相同,都是使被编译后的程序能够随
2021-12-09 18:44:06 2536
原创 Qt隐式共享机制带来的陷阱
为了提升性能,Qt框架里面使用了隐式共享技术(基于d-p模式),也可以理解为写时复制技术(COW)。在开发过程中我们一般不需要去关系隐式共享的底层运行机制,但是了解一下还是有必要的。 关于隐式共享,网上有很多相关介绍的文章,这里就不多赘述。写这篇文章的目的,只是记录一下这几天在项目上因隐式共享造成的一个BUG。相较于文档之类的理论只是,结合实际项目中的问题来理解隐式共享,可能会有更深的体会。 先看一下以下代码: //定义一个Data数据结构,包含一个成员x s...
2021-12-06 11:26:15 450
原创 一个点绕另一个点旋转之后的坐标计算
假设对坐标系上任意点(x,y),绕一个坐标点(rx0,ry0)逆时针旋转a角度后的新的坐标设为(x0, y0),有公式:x0= (x - rx0)*cos(a)- (y - ry0)*sin(a) + rx0 ; y0= (x - rx0)*sin(a) + (y - ry0)*cos(a) + ry0 ;
2021-11-01 19:55:57 6848 1
原创 Qt快捷键字符串映射表
Qt快捷键 映射"Esc",/*Qt::Key_Escape 0x01000000 */"Tab",/*Qt::Key_Tab 0x01000001 */"Shift+Tab",/*Qt::Key_Backtab 0x01000002 */"BackSpace",/*Qt::Key_Backspace 0x01000003 */"Return",/*Qt::Key_Return 0x01000004 */"Enter",/*Qt::Key_Enter 0x01000005 T
2021-10-28 17:52:03 1117
原创 QFormLayout的坑
需要使用QFormLayout实现一个很简单的布局:在一个QFrame里面使用QFormLayout布局,QFormLayout的filed是一个QProgressBar,程序运行后,前面的文本竟然看不到...........调试QFormLayout的布局逻辑代码,发现QFromLayout布局一行时,会先计算label和filed的sizeHint,并根据sizeHint来决定label和field的position和size。上面文本看不到的原因是因为QProgressBar的默.
2021-10-28 11:58:12 319
原创 QObject::tr()
QT开发过程中,QObject::tr()用得比较多,尤其是需要做多语言翻译时。譬如:QtGuiApplication1::QtGuiApplication1(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); ui.pushButton->setText(tr("你好"));} 如果程序安装了对应的翻译文件,那么pushButton的文本会自动替换为目标语言对应的翻译。上面这种调用应付一...
2021-10-26 15:51:03 1658
原创 bat脚本自动生成SVN仓库版本信息头文件
@echo offset src_dir=%~dp0::svn updatefor /f "usebackq delims=" %%i in (`"svn info | findstr "Rev""`) do set Reversion=%%iset rev=%Reversion:~18%echo Last Changed Rev:%rev%echo #define SVN_REVISION %rev% > "%src_dir%/include/"svnversion.h
2021-09-28 17:18:56 609
原创 QT中创建一个带BOM的UTF8编码文件
void CreateUTF8WithBom(const QString& path){ QFile f(filePath); f.open(QIODevice::WriteOnly | QIODevice::Truncate); QTextStream ts(&srcFile); ts.setGenerateByteOrderMark(true); //这句是重点 ts.setCodec("UTF-8"); ts << .
2021-08-21 17:42:46 1285
原创 QFileDialog如何选择多个目录
这是网上看的别人的实现思路,大概思路就是设置QFileDialog的listView或者treeView多选模式,再通过selectedFiles()获得选中项。QStringList GetMultiDirectory(){ QFileDialog fileDlg(this, tr("Select Directory"), ""); fileDlg.setFileMode(QFileDialog::DirectoryOnly); fileDlg.setOption(QFileDialo
2021-08-21 15:15:57 620
原创 QT插件机制中宏Q_PLUGIN_METADATA和Q_INTERFACES的作用
今天简单地了解了一下QT的插件机制,其实也没有什么可多说的,理论上说到底无非就是库的加载和函数地址的查找。但是QT对于插件机制的支持是建立在它独有的原对象系统基础之上,自然也有自己的一套插件实现规则,或者说是语法。一般来讲,照着QT给的文档和DEMO,很容易就能实现一个插件,这里面最主要的就是三个宏:Q_DECLARE_INTERFACEQ_PLUGIN_METADATAQ_INTERFACES那么,这三个宏到底在整个插件机制中到底起到一个以什么作用呢?Q_DECLAR...
2021-07-31 17:57:32 6962 2
原创 QWidget: isVisible() == !isHidden() 吗?
判断QWidget是否可见,调用isVisible()还是isHidden()?在写这篇文章之前,我一直以为是一样的,也就是:
2021-06-02 17:15:14 2344
原创 关于VS下面C++的异常捕获
项目上为了应对程序异常崩溃的情况,加入了DUMP生成机制,也就是调用windows下的API SetUnhandledExceptionFilter()对未处理的异常安装了一个处理函数,在处理函数里面调用MiniDumpWriteDump()生成DUMP文件。这部分代码比较简单,但是在实际测试过程中,发现很多时候程序崩了之后并没有生成DUMP文件。在网上找了一些资料,有用的不多,当然也有很多大神的文档,譬如MattPietrek写的关于结构化异常的分析文章(链接:https://www.cn...
2021-05-22 09:42:33 713 2
原创 C++11之静态断言static_assert
static_assertstatic_assert是编译时期的断言static_assert的断言表达式的结果必须是在编译时期可以计算的表达式,即必须是常量表达式静态断言接收两个参数:断言表达式和警告信息#include <assert.h>template <typename t, typename u> int bit_copy(t& a, u& b) { static_assert(sizeof(b) == sizeof(a),.
2021-05-17 09:19:09 526
原创 Qt中的topLevelWidgets()到底是哪些widgets?
先看QT文档对topLevelWidgets()的描述:[static] QWidgetList QApplication::topLevelWidgets()Returns a list of the top-level widgets (windows) in the application.Note: Some of the top-level widgets may be hidden, for example a tooltip if no tooltip is currently sh
2021-05-17 09:15:48 3164
原创 QWidget::setGeometry()不生效问题解决方案
开发过程中经常碰到setGeometry()不生效的问题,发现只要在setGeometry()之前调用一下show()或者setVisible(true)就可以了!问题就出在setVisible(true)!!!setVisible()会判断当前控件的WA_WState_Created属性,意思就是看看控件是否已经创建了window,如果为没有创建,就调用create()方法创建一个window,坏就坏在这里!跟代码发现QT为控件创建新窗口时,会自动校正window的geometry,也就是说之前设
2021-05-17 09:12:21 6222 2
原创 QFileDialog记录上次打开位置
QFileDialog几个选择文件和文件夹的方法都有一个默认路径参数,如:QString getExistingDirectory(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = ShowDirsOnly)参数const QString &dir = QString()..
2021-05-17 09:10:15 3546
原创 QWidget窗口置顶闪烁问题
QWidget有窗口属性设置函数:void setWindowFlags(Qt::WindowFlags type)一般调用改函数即可让窗口置顶显示QWidget* pWidget = new QWidget();pWidget->setWindowFlags(pWidget->windowFlags() | Qt::WindowStaysOnTopHint)但是注意看setWindowFlags()函数的说明:Note: This function calls s
2021-05-17 08:57:14 3418 11
原创 QTextEdit设置文本样式
QTextEdit可以通过qss设置边框属性,但是由于QTextEdit本身显示的是一个HTML,所以不能像其他的控件直接使用qss对文本设置样式。看一个我们再QtDesigner中对一个QTextEdit进行文本编辑的例子:上图的HTML中有好几个标签都有样式,譬如<body>,<p>,<span>等,到底应该修改哪个标签的样式呢? 1.修改文本边距和行高<p style="margin-top:12px; margin-bott...
2021-05-17 08:52:29 4286
原创 使用QTemporaryFile判断目标路径是否可写
在判断一个目标路径是否可写时,QFileInfo的isWritable()并不好用,一般我们会基于QFile尝试在目标路径新建一个临时文件,通过判断文件是否创建成功间接判断目标路径是否可写。如果自己实现这个逻辑,需要做文件打开,关闭,删除等一系列的处理。我们可以借助QTemproryFile类实现同样的目的.bool IsDirWritable(const QString& dir){ QTemporaryFile testFile(dir+ "\\XXXXXX");
2021-05-17 08:47:00 326
数据结构算法与应用-c++描述(PDF格式)
2008-11-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人