Jump to Navigation

Welcome!

  NullGet是使用Qt编写的,运行于多种平台的GUI界面的多线程多协议断点续传下载软件。  使用NullGet可以轻松下载网络的多种协议的数据流,加快下载速度,支持断点续传,目前支持的协议有:HTTP,HTTPS,FTP,MMS,RTSP。而且它能运行于当前大多数流行的操作系统,包括Windows,Linux,FreeBSD等。     下载NullGet

  NullFXP 是一个基于Qt 4 开发的SFTP/FTP 客户端软件。目前已经实现基本的多文件上下传功能。详细信息查看本站项目说明页面。     下载nullfxp

  我们的目标是打造一个开源的,跨平台的,多线程的,运行稳定的下载软件,另一个就是整理Qt库开发跨平台GUI应用程序的相关资料。欢迎各位朋友对本站开源项目提供意见及建议,欢迎有兴趣的朋友参与本站开源项目,请联系 drswinghead at gmail dot com

在freebsd 7.0上安装上了kde 4.1.0

通过ports安装,不复杂,但费时间,硬盘空间也用了不少,总算正常启动起来了。

kde4 很好,很强,启动了kde4桌面,感觉不到在用什么系统,所能感受到的只有KDE4。

从安装kde4,到试用了一会,freebsd 做桌面还有很多问题,现在就没法正常使用flash插件看网上视频。

开发环境现在一般只用一个emacs全搞定,也就是开发环境肯定没问题。

2008-06-17
装上了在线歌曲播放器amarok 2.0 alpha 2 版,armarok是基于kde的在线播放器,上面上许多的歌曲源(现在都是英文的),支持直接搜索,支持自己添加歌曲源,支持播放本地音频、视频。
amarok 主页: http://amarok.kde.org/

2008-06-17
装上了 fcitx-3.5 中文输入法。

nullfxp同步模块

文件夹同步算法研究

1) 扫描本地同步目录,记录目录下所有文件.
2)扫描远程同步目录,记录目录下所有文件,并发送到本地端.
3) 不分大小写的排序本地/远程同步目录的文件列表。
4) 通过归并比较,得到四组文件:本地仅有的文件,远程仅有的文件,本地新的文件,远程新的文件。

Category:

OpenGL图象

       OpenGL是一种渲染2D和3D图象的标准API。Qt程序可以使用QtOpenGL模块绘制3D图象,这依赖于系统的OpenGL库。这一节假设你已经熟悉了OpenGL。如果OpenGL对你来说是新的,一个开始学习的好地方是http://www.opengl.org/
       在Qt程序中使用OpenGL绘图是非常直接的:我们必须继承QGLWidget,重新实现几个虚函数,并把程序与QtOpenGL和OpenGL库链接。因为QGLWidget继承自QWidget,我们已经知道的大多数依然可用。主要的不同是我们使用标准的OpenGL函数执行绘图而不是用QPainter。
       为了展示这是如何工作的,我们预览一下图8.17中展示的四面体程序的代码。该程序展示了一个3D的四面体,或者叫四边骰子,它的每一面都使用不同的颜色绘制。用户可以通过按下鼠标并拖动来旋转该四面体。用户也可以通过双击它并从弹出的QcolorDialog选择一种颜色设置其中一面的颜色。
图8.17 四面体程序

Category:

打印

       在Qt中打印与在QWidget, QPixmap, 或者 QImage上绘图相似。它包含下面几步:
1.创建一个QPainter当作一个绘图设置。
2.弹出一个QprintDialog,让用户选择一个打印机并设置几个参数。
3.创建一个在Qprinter上执行操作的QPainter。
4.使用该QPainter绘制一页。
5.调用QPrinter::newPage()前进到下一页。
6.重复第4和5步直到所有页都绘制完毕。

       在Windows和Mac OS X 上,Qprinter使用所在系统的打印机驱动程序。在Unix上,它生成PostScript并把它发送到lp或者lpr(或者到QPrinter::setPrintProgram()所设置的程序)。Qprinter也可通过调用setOutputFormat(QPrinter::PdfFormat)用于生成PDF文件。

图8.12 打印一个QImage

       让我们以一个仅在打印单页的简单例子开始。第一个例子打印一个QImage:

Category:

使用QImage的高质量渲染

       在绘图的时候,我们可能要面对速度和精确的平衡。例如,在X11和Max OS X上,在QWidget或者Qpixmap上绘图依赖于平台的本地绘图引擎。在X11上,要保证与X服务器的通信最少,仅有绘图命令被传递而不是实现的图象数据。这种方法的主要缺点是Qt受平台的本地支持所限制:
在X11平台上,你抗钜齿功能和小型坐标支持仅当X服务器上有Xrender 扩展才可用。
       在 Mac OS X平台上,本地别名图形引擎使用与X11和Windows平台不同的绘制多边形的算法,因而也就有稍微不同的结果。
       当精确比效率更重时,我们可以向一个QImage上绘图并把结果拷贝到屏幕上。这总是使用Qt自己的内部绘图引擎,在所有的平台都能给出一致的结果。唯一的限制是我们要绘制的QImage必须在创建的时候给出QImage::Format_RGB32或者QImage::Format_ARGB32_Premultiplied。

Category:

绘图器变换

       对QPainter的默认坐标系统,点(0,0)位于绘图设备左上角,x坐标向右增长,y坐标向下增长。每个象素占据默认坐标系统中大小为1x1的区域。
       要明白的一个重要事件是一个象素的中心位于“半象素”的地方。例如,左上角象素覆盖的区域在点(0,0)和(1,1)之间,它的中心位于(0.5,0.5)。如果我们要QPainter在(100,100)处画一个象素,它将通过在两个方向平移+0.5个象素把结果进行近似取值,这将导致该点中心被画在(100.5,100.5)。
       这个区别看上去首选是理论上的,但它在实际中也非常重要。首先,平移+0.5仅发生在抗钜齿功能被禁用时(默认是这样的),如果抗钜齿功能是激活的并且我们试图在位置为(100,100)的地方画一个黑色象素,QPainter将把(99.5, 99.5), (99.5, 100.5), (100.5, 99.5), 和 (100.5, 100.5)四个象素将被设置浅灰色,以制造一种象素正好位于四个点汇合处理的假象。如果这种影响是不期望的,我们可以通过指定半象素坐标来避免,如,(100.5, 100.5)。

Category:

使用QPainter进行绘图

       要开始向一个绘图设备上绘图(一般是一个物件),我们仅需要简单地创建一个QPainter并传递一个指向该设备的指针。例如:

Category:

第8章 2D和3D图象

  • 使用QPainter进行绘图
  • 绘图器变换
  • 使用QImage的质量渲染
  • 打印
  • OpenGL图象
  •        Qt的2D图象引擎是基于QPainter类的。QPainter可绘制几何形状(点,线,矩形,椭圆,弧,弦,饼图,多边形,和贝赛尔曲线),还有pixmap,图象和文本。此外,QPainter还支持许多高级功能如抗钜齿(对文本或者图形边缘),alpha混合,坡度填充工矢量路径。QPainter还支持变换,它使得绘制分辨率独立的2D图象成为可能。
           QPainter可用于在一个“绘图设备“绘图,如QWidget,Qpixmap或者QImage。它在我们编写带有自己的外观的自定义物件或者自定义项类时非常有用。QPainter还能用于连接Qprinter执行打印和生成PDF文档。这意味着我们能经常使用相同的代码在屏幕上显示数据和生成打印报告。
           QPainter的另一选择是使用OpenGL。OpenGL是一种绘制2D和3D图象的标准库。Qt 的OpenGL模块使得把OpenGL整合到Qt程序中变得非常容易。

    Category:

    在密集处理过程中保持响应

           当我们调用QApplication::exec()时,我们就启动了Qt的事件循环。Qt在启动的时候抛出几个显示以及绘制物件的事件。在这之后,事件循环就不停运行,不断地检查中否有什么事件发生并把这些事件分发到程序的QObject。
           当一个事件正在处理过程中,其他事件可能产生并追加到Qt的事件队列中。如果我们花费太多的时间处理特定的事件,用户界面可能会变得无法响应。例如,在程序把文件保存到磁盘上时任何窗口系统生成的事件将不能被处理,直到该文件保存完成。在保存过程中,程序不能响应窗口系统的请求来重绘它自己。
           一种解决方法是使用多线程:一个用于程序的用户界面的线程和另一个用于执行保存(或者任何其他耗时的操作)的线程。这样,程序的用户界面在保存文件的过程中依旧能保持响应。我们将在第18章中看如何实现它。
           一种的解决方法是在文件保存代码中频繁调用QApplication::processEvents()。该函数告诉Qt处理任何未决的事件,然后再把控制返回给调用者。实际上,QApplication::exec()只比一个在while循环中的processEvents()函数调用强一点。

    Category:

    安装事件过滤器

           Qt的事件模型的一个强大的功能是一个QObject实例能够在另一个QObject实例看到它的事件前监控它的事件。
           我们假设我们有一个给几个QLineEidt组成的CustomerInfoDialog物件,我们希望使用安全可靠键把焦点从一个移动到下一个QLineEdit上。这一非标准的行为可能对使用都经过良好训练的内部程序非常合适。一个直接的解决方法是创建QLineEdit的子类并重新实现keyPressEvent()来调用 docusNextChild(),代码如下所示:

    Category:

    页面

    订阅 www.qtchina.tk RSS


    Main menu 2

    by Dr. Radut