- 博客(72)
- 资源 (7)
- 收藏
- 关注
原创 用50行代码实现Linux系统usb设备插拔检测(基于Qt的神技能)
本文介绍一种简单有效的办法,不需要了解usb接口背后的细节,借助linux系统提供的lsusb命令和Qt的QProcess类即可实现。
2022-10-19 11:22:18
4468
1
原创 在Linux系统安装Python3.5 及Matplotlib库
在Linux上安装Python3.5,按照官方文档非常简单,就像安装其他程序一样几个通用的命令,但是想要安装后满足需求,也不是很容易。更何况,我们现在按照Python的目的都是为了进行机器学习相关分析,安装Matplotlib也是一个刚需。在安装Matplotlib时也需要安装其他一些依赖的系统库,甚至会造成Python的重新安装,本文就介绍在RedHat7.1上安装Python3.5和Matpl...
2018-05-14 17:00:43
5816
原创 调试时直接显示QString的字符值(包含windows和linux)
调试小窍门:调试时直接显示QString的字符值(包含windows和linux)
2017-10-25 17:06:48
7109
原创 在Windows 系统安装基于Python3.5 版本的Matplotlib库
在Windows操作系统上安装Python3.5版本的Matplotlib记录
2017-08-10 08:59:12
7128
1
原创 Qt那些类---用QCryptographicHash类生成MD5,SHA-1,SHA-2
Qt类QCryptographicHash的使用介绍,用于生成hash散列表的类,目前能够实现的加密方式有:MD4, MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512。
2017-08-08 15:25:34
2650
翻译 14. (多线程)Multithreading
传统的GUI应用只有一个线程,一次只执行一个操作。如果用户从界面进行了一个非常耗时的操作,在操作正在执行的时候,界面是没有任何响应的。在第七章事件处理中提出了这个问题的一个解决方案。多线程是另一个解决方案。在一个多线程的应用中,GUI运行在独自的线程中,其他的操作则发生其他的一个或者多个线程中。在多线程应用中,不管进行多么密集的操作,界面仍然能够正常相应。在单处理器的机器上,由于多线程的影响,
2017-05-31 16:14:05
1661
原创 对那些想要电子版的网友说声对不起
翻译这本书纯属个人兴趣,但由于时间关系已经很久没有做了。很惭愧。 看了很多网友留言说想要电子版,很遗憾,当初是一章一章翻译的,没有整合在一起,所以我也没有电子版。因为水平有限,翻译的质量就不多说了,希望大家把这里的文章做个参考,批判着学习的态度来看吧,如果真的想学习,可以买本书,国内已经有翻译本书的书籍了。 个人意见,我觉得这本书的前七章还是比较有价值的,是用来进门的。后面的那些章
2009-08-20 22:11:00
4931
5
翻译 10-3 实现自定义模型(Implementing Custom Models)
Qt预定义的类已经提供了方便处理和显示数据的方式。然而,一些数据源不能直接使用这些定义好的模型,这就需要创建自定义的模型,优化对这些数据的处理。在创建自定义模型之前,让我们首先回顾一下Qt的model/view结构的主要概念。在一个模型中每一个数据都有一个模型的索引(a model index)和一组属性,这些属性称为角色(roles),这些属性能够用任何类型的数据保存。在这一章的前几节最常用
2008-10-26 10:39:00
8514
11
翻译 10-2 使用已有的模型类(Using Predefined Models)
Qt已经提供了一些可以和视图类配合使用的模型: QStringListModel 保存一系列字符串
2008-05-06 21:52:00
6924
3
翻译 10-1 使用数据视图便捷类(Using the Item View Convenience Classes)
通常使用Qt提供的数据视图便捷类(item view convenience class)要比定义一个模型简单的多,适合无需分离模型和视图的操作。在第四章中我们使用了QTableWidget和QTableWidgetItem实现了表格的功能。在这一节中,我们将介绍这些便捷类的使用。第一个例子是一个只读的QListWidget,第二个例子是一个可编辑的QTableWidget,第三个例子显示的是
2008-04-20 11:05:00
10424
10
翻译 第10章 数据视图类(Item View Classes)
很多Qt应用程序都允许用户查找,查看,编辑一个数据集中的一个具体数据。这些数据可能存在在一个文件中,或者在数据库中,也可能来自于网络。Qt提供的数据视图类能很好的处理这些数据。在Qt早先的版本中,数据视图控件中保存了一个数据集中的所有数据。用户在这个控件中对数据进行查找,编辑等操作,有时候还要把数据写回到数据源中。这种处理方式很容易使用,但是当数据量很大时就会影响程序性能,也不能将一个数据源用
2008-04-20 10:53:00
6736
翻译 9-3 处理剪贴板(Clipboard Handling)
很多应用程序使用Qt提供的剪贴板。例如:QTextEdit类提供了cut(),copy()和paste()槽函数,也能相应键盘的快捷键。客户程序只要编写很少的代码,甚至不写代码。如果我们正在开发自己的类,可以使用函数QApplication::clipboard()得到Qt的剪贴板,该函数返回的是一个QClipboard类型对象的指针。使用这个指针很容器对剪贴板进行读写访问,调用setText
2008-03-04 21:53:00
7079
5
翻译 9-2 支持自定义数据类型的托拽(Supporting Custom Drag Types)
在上一节的例子中,我们使用类QMimeData表示普通的MIME类型。调用QMimeData::setText()进行对文本的托拽,调用QMimeData::urls()得到托拽到url文本列表。如果我们想托拽普通的文本,HTML文本,图片,URLs,颜色等,都可以使用QMimeData类。但是 如果我们需要对自定义的类型进行托拽,就需要使用下面的方法:1. 用QByteArray
2008-02-26 08:46:00
6119
3
翻译 9-1 支持托拽功能(Enabling Drag and Drop)
9-1 支持托拽功能(Enabling Drag and Drop)名次解释:Drag:拖动,拉动,计算机中就是用鼠标拖动的过程Drop:滴下,落下,松开,计算机中就是鼠标拖动到某一个位置后放开左键的过程,Drag后总会Drop的。Drag和Drop是两个完全不同的动作。Qt中的控件可以作为拖动(drag)的地点,也可以作为松开(drop)的地点,或者同时作为拖动和松开的地点
2007-10-16 21:48:00
8799
3
翻译 8-5 用OpenGL绘图(Graphics with OpenGL)
8-5 用OpenGL绘图(Graphics with OpenGL)OpenGL是绘制2D和3D模型的标准API。在OpenGL基础上,Qt可以使用QtOpenGL模块绘制3D图形。本节假设您已经熟悉OpenGL。如果对OpenGL不了解,可以浏览http://www.opengl.org/。在Qt应用程序中使用OpenGL绘图非常简单:我们需要从QGLWidget继承自己的
2007-10-08 22:24:00
10284
3
翻译 8-4 打印(Printing)
在Qt中,打印与在QWidget,QPixmap或者QImage绘图很相似,一般步骤如下:1、创建绘图设备的QPrinter;2、弹出打印对话框,QPrintDialog,允许用户选择打印机,设置属性等;3、创建一个QPrinter的QPainter;4、用QPainter绘制一页;5、调用QPrinter::newPage(),然后绘制下一页;6、重复步骤4,5,直
2007-10-08 22:12:00
11376
原创 坚持一件事比决定一件事难多了
最初决定翻译这本书是学习的需要,也是 想在全民blog的年代在网络上也有自己的一片天地。就是这样简单。虽然也想到了坚持会很难,但是我还是一直给自己打气,也一直在坚持,但是整整一个6月,却一篇都没有翻译,我不想找什么理由,如果有就是我自己太懒了。决定很容易坚持却很难。7月,在炎热中,我把8.2和8.3上传完,发现已经快翻译了全书一半了,不由得开心,也有点担心,我还能翻译下去吗?从开始写blo
2007-07-24 22:15:00
5408
15
翻译 8-3 使用QImage进行高质量绘制(High-Quality Rendering with QImage)
在进行绘图时,我们经常要面对速度和效率两者之间矛盾。在X11和MacOsX系统上,在QWidget和QPixmap绘图要依赖平台自身的绘图引擎。在X11上,与X server的通信很少,Qt只是发送绘图命令而不是真正的绘图数据。这种画法的不足是Qt要收到平台自身绘图引擎的限制。在X11上,消除锯齿和支持分数坐标这些功能只有在Xserver上安装了XRender扩展才能实现;在MacO
2007-07-24 21:50:00
16926
翻译 8-2 坐标变换(Painter Transformations)
在QPainter的初始坐标系统中,点(0,0)位于绘图设备的左上角。X轴坐标向右递增,y轴向下递增,一个象素占据1×1的面积。需要说明的一点是一个象素的中心位于坐标的一半处。例如,左上角位于点(0,0)和点(1,1)之间区域的象素,它的中心位于(0.5,0.5)。如果我们使用QPainter绘制一个位置在(100,100)的象素,QPainter会在每个坐标值上增加0.5,以坐标(10
2007-07-24 21:46:00
10915
翻译 8-1 用QPainter绘图(Painting with QPainter)
要在绘图设备(paint device,一般是一个控件)上开始绘制,我们只要创建一个QPainter,把绘图设备指针传给QPainter对象。例如:oid MyWidget::paintEvent(QPaintEvent *event){ QPainter painter(this); ...} 使用QPainter的draw…()函数我们可以绘制各种
2007-05-29 21:52:00
32123
3
翻译 第八章序 2D和3D图形系统(2D and 3D Graphics)
Qt的2D图形系统的基础是类QPainter。QPainter能够绘制各种几何图形(点,线,矩形,椭圆,圆弧,弦,扇形,多段线,贝赛尔曲线),还能绘制位图,图像和文字。此外QPainter还提供了很多高级功能:如平滑(平滑文字和几何图形的边界),透明度,渐变色,和矢量路径。QPainter还支持矩阵变换,使绘制2D图形和分辨率无关。 QPainter能够在“绘图设备”上绘图,如QWi
2007-05-29 21:35:00
6167
翻译 7-3 系统繁忙时的响应(Staying Responsive During Intensive Processing)
当我们调用QApplication::exec()时,Qt就开始了事件循环。启动时,Qt发出显示和绘制事件,把控件显示出来。然后,事件循环就开始了,不停检查是否有事件发生,然后把事件分派到程序中的QObject对象。一个事件正在处理时,其他的事件已经产生并加入到Qt的事件队列中,如果我们在处理某一个事件时花费了很多事件,这期间用户界面就不会有任何响应。例如,在程序保存文件时,窗口产生的事件
2007-05-29 20:56:00
9506
翻译 7-2 安装事件过滤器(Installing Event Filters)
Qt的事件模型一个强大的功能是一个QObject对象能够监视发送其他QObject对象的事件,在事件到达之前对其进行处理。假设我们有一个CustomerInfoDialog控件,由一些QLineEdit控件组成。我们希望使用Space键得到下一个QLineEdit的输入焦点。一个最直接的方法是继承QLineEdit重写keyPressEvent()函数,当点击了Space键时,调用focu
2007-05-29 20:52:00
11077
3
翻译 7-1 重写事件处理函数(Reimplementing Event Handlers)
在Qt中,一个事件是QEvent的子类的对象。Qt能够处理上百种类型的事件,每一类型的事件由一个枚举值确定。例如,对鼠标点击事件,QEvent::type()返回的值为QEvent::MouseButtonPress。很多情况下,一个QEvent对象不能保存有关事件的所有信息,例如,鼠标点击事件需要保存是左键还是右键触发了这个信息,还要知道事件发生时鼠标指针的位置,这些额外的信息储存
2007-05-24 10:15:00
6561
原创 第七章(序)事件处理-(Event Processingn)
事件是视窗系统或者Qt本身在各种不同的情况下产生的。当用户点击或者释放鼠标,键盘时,一个鼠标事件或者键盘事件就产生了。当窗口第一次显示时,一个绘制事件会产生告诉新可见的窗口绘制自己。很多事件是为了相应用户动作产生的,也有一些事件是由 系统独立产生的。在用Qt编程时,我们很少要考虑事件,当一些事件发生时,Qt控件会发出相应的信号。只有当实现用户控件或者需要修改现有控件的行为时,我们才需
2007-05-24 09:59:00
4016
2
翻译 6-6 多文档界面(Multiple Document Interface)
一个主窗口区域内能够提供多个文档的程序称之为多文档程序,或者MDI程序。在Qt中,一个MDI程序是由QWorkspace类实现的,把QWorkspace做为中央控件,每一个文档窗口做为QWorkspace的子控件。MDI程序的惯例是提供一个window菜单,管理窗口的显示方式和当前打开的窗口列表。正在活动的窗口由选中记号标示。用户可以点击window菜单中窗口列表中的一个窗口把它激活。
2007-05-17 21:51:00
6778
翻译 6-5 可停靠控件和工具栏(Dock Widgets and Toolbars)
可停靠控件能够停靠在QMainWindow中或者作为一个独立窗口浮动。QMainWindow提供了四个可停靠控件的地方:上方,下方,左方,右方。Microsoft Visual Stadio程序和Qt Linguist程序使用大量的可停靠窗口实现更为复杂的用户界面。在Qt中,可停靠窗口是QDockWidget的一个实例。Figure 6.13. A QMainWindow with a
2007-05-09 22:20:00
7204
1
翻译 6-4 滚动区域(Scrolling Areas)
英汉对照:viewport(视图)QScrollArea类提供了一个可以滚动的可视窗口和两个滚动条。如果我们想给一个控件加上一个滚动条,从QScrollArea继承会比设计我们自己的QScrollBar类实现滚动函数更简单。Figure 6.11. QScrollAreas constituent widgets 调用QScrollArea的setWidget()函
2007-04-26 22:18:00
5595
翻译 6-3 分隔控件(Splitters)
中英文对照Splitter handles(分隔条) 一个QSplitter控件中可以包含其他控件,这些控件被一个分隔条隔开,托拽这个分隔条,里面的控件的大小可以改变。QSplitter控件经常做为布局管理器使用,给用户提供更多的界面控制。QSplitter控件中的子控件总是按顺序自动并肩排列(或者上下排列)。相邻的控件之间有一个分隔条。下面是创建图6.7的窗体的代码:int main
2007-04-26 20:44:00
11886
1
翻译 6-2 分组布局(Stacked Layouts)
QStackedLayout类把子控件进行分组或者分页,一次只显示一组或者一页,隐藏其他组或者页上的控件。QStackedLayout本身并不可见,对换页也不提供本质的支持。图6.5中的建头和黑灰色的框架是Qt Designer提供为了方便设计。为了方便起见,Qt还提供了类QStackedWidget,这个类的布局管理器为QStackedLayout。Figure 6.5. QStack
2007-04-26 20:38:00
9816
1
翻译 6-1 排列窗体上的控件(Laying Out Widgets on a Form)
中英文对照:form(窗体),layout(布局或者排列,意思是进行窗体上控件的排列的过程,如大小位置等)absolute positioning(绝对位置定位),manual layout(手工布局), layout managers(布局管理器)Qt中有三种方式对窗体上的控件进行布局管理:绝对位置定位(absolute positioning),手工布局(manual layou
2007-04-25 21:54:00
10566
1
翻译 第六章序-布局管理(Chapter 6. Layout Management)
窗体上的所有的控件必须有一个合适的尺寸和位置。Qt提供了一些类负责排列窗体上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QStackLayout。(有时在译文中我会把这些类叫做布局管理类)这些类简单易用,无论在代码中还是用Qt Designer开发程序都能用到。 使用这些Qt布局管理类的另一个原因是,在程序改变字体,语言或者在不同的平台上运
2007-04-24 22:16:00
3511
翻译 5-4 双缓冲技术(Double Buffering)(5、类PlotSettings实现)
下面是PlotSettings的实现:PlotSettings::PlotSettings(){ minX = 0.0; maxX = 10.0; numXTicks = 5; minY = 0.0; maxY = 10.0; numYTicks = 5;}在构造函数中,把两个坐标轴的初始化为从0到10,分为5个刻度
2007-04-24 22:13:00
2939
翻译 5-4 双缓冲技术(Double Buffering)(4、私有函数的实现)
以下是私有函数的实现: void Plotter::updateRubberBandRegion(){ QRect rect = rubberBandRect.normalized(); update(rect.left(), rect.top(), rect.width(), 1); update(rect.left(), rect.top(), 1
2007-04-24 22:11:00
3117
翻译 5-4 双缓冲技术(Double Buffering)(3、事件处理函数)
以下是Plotter控件的事件处理函数部分 void Plotter::paintEvent(QPaintEvent * /* event */){ QStylePainter painter(this); painter.drawPixmap(0, 0, pixmap); if (rubberBandIsShown) { paint
2007-04-24 22:06:00
3700
翻译 5-4 双缓冲技术(Double Buffering)(2、公有函数实现)
#include #include using namespace std;#include "plotter.h"以上代码为文件的开头,在这里把std的名空间加入到当前的全局命名空间。这样在使用里的函数时,就不用前缀std::了,如可以直接使用函数floor(),而不用写成std::floor()。 Plotter::Plotter(QWidget *paren
2007-04-24 21:59:00
4323
翻译 5-4 双缓冲技术(Double Buffering)(1、简介和源代码部分)
这一节实在是有些长,翻译完后统计了一下,快到2w字了。考虑到阅读的方便和网络的速度,打算把这节分为5个部分,第一部分为双缓冲技术的一个简介和所有的代码,如果能够看懂代码,不用看译文也就可以了。第二部分为Plotter控件的公有函数的实现,第三部分为Plotter的事件处理函数的实现,第四部分为Plotter控件的私有函数实现,第五部分为辅助类PlotSettings的实现。这里给出一些常
2007-04-24 21:52:00
5461
1
翻译 5-3 把自定义控件集成到Qt Designer中(Integrating Custom Widgets with Qt Designer)
要想在Qt Designer中使用自定义控件,必须要使Qt Designer能够知道我们的自定义控件的存在。有两种方法可以把新自定义控件的信息通知给Qt Designer:“升级”法和插件法。升级法最为简便快捷。顾名思义,升级法就是把Qt自有的控件进行升级改造一番。找一个Qt自有的控件,如果它和我们新加的自定义控件有着相似的API,那么只要在Qt Designer的对话框里面完成一些新控
2007-04-10 10:51:00
5167
google test 1.8 release
2019-03-07
用C++实现SHA-2算法家族
2017-08-08
C++ GUI Programming with Qt 4, Second Edition
2017-05-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人