自定义QWidget类使Qt图像控件能自动缩放

每次给这类文章取名字都很烦,一不小心就又臭又长了!>.< ...... 下面转入正(cai)题(guai) 相信大家一开始也和我一样,用QLabel来充当图像的显示控件,不过应该很快就会发现QLabel显示出来图像后,如果再改变父级控件的大小,此时QLabel的图像不会跟着变大而是保持原来的大小。更为糟糕的是,父级控件无法缩小了,因为QLabel的图像不会自动缩小,限制了父级控件的minimumSize! 其实是一个很囧的问题,网上一搜会发现几年前就有人提出怎么没有一个专门的QImageLabel啊?可能priority太低吧……Anyway,下面介绍通过自定义类(继承QWidget)实现一个可以自动缩放图像的控件。 Continue reading “自定义QWidget类使Qt图像控件能自动缩放”

让Qt Designer设计的Widget随MainWindow增大而增大

入门Qt,各位老鸟见笑了。网上一搜有这个问题的还不少,而且一些中文博客/论坛用一些旁门左道误导不明真相的群众,还是写下本文吧。

问题描述

通过Qt Creator中的Designer(或者独立的Qt Designer程序)设计Qt程序外观的时候,里面添加的小部件(Widgets)不能随着主窗体(MainWindow)的增大而增大。

解决办法

Continue reading “让Qt Designer设计的Widget随MainWindow增大而增大”

Linux下Qt创建和调用共享库文件.so

费了点功夫,总算get了编写共享库(Shared Library,Windows下称为“动态链接库”,即Dynamic Link Library)和调用的这个新技能!

动态链接库的好处是不言而喻的,一个稍微复杂一点的程序,顶层设计的时候良好的类库划分可以让工作变得很简单,而将不同类编译成共享库文件可以实现程序的模块化,提高代码复用程度,在保证接口兼容的情况下更新一个程序只用更新共享库(Windows下是dll,Linux下常见的是so)即可。

下面以Linux下的Qt Creator这个IDE为例,讲述Qt(严格意义上是C++)共享库文件的编译和调用。

Continue reading “Linux下Qt创建和调用共享库文件.so”

DragonFly BSD编译安装Qt 5.2.0

BSD系统在Qt世界里压根不是Tier 1的级别啊,看看Digia只提供Windows, Linux, Mac, Android的预编译文件就知道了。。没关系,好歹Qt是个开源软件,自己动手编译,丰衣足食。下载Qt 5.2.0的源代码这一步我就跳过去了,下面的路径都是Qt源码目录里的。

示例环境:DragonFly BSD 3.6.0(因DragonFly的dports是基于FreeBSD的ports树,所以下面的操作也适用于FreeBSD,详细附在正文后)

修改源码

Qt 5.2.0没有DragonFly BSD的mkspec,可以在FreeBSD的mkspec基础上做点改动来适配dfly,此外qtbase的qfileselector.cpp也需要做一个dirty patch不然编译会出错。

Continue reading “DragonFly BSD编译安装Qt 5.2.0”

Qt Creator在Windows上的调试器安装与配置

如果安装Qt时使用的是Visual Studio的预编译版,那么很有可能就会缺少调试器(Debugger),而使用MSVC的Qt对应的原生调试器是CDB(对应MinGW的Qt使用GDB调试器)。本文介绍如何下载安装CDB,并在Qt Creator配置之。

示例环境:Windows 8 x86 + Visual Studio 2012 + Qt 5.2.0

Continue reading “Qt Creator在Windows上的调试器安装与配置”

Qt 5.2+VS2012+OpenCV 2.4.7的环境配置

如果你安装的是使用Microsoft Visual Studio编译器的Qt(例如我安装的这个Qt,安装包文件名为:qt-windows-opensource-5.2.0-msvc2012-x86-offline.exe),则不需要网传的对OpenCV进行编译的这个麻烦过程,直接利用VS的预编译文件即可。

需要注意的一点是Qt不支持Visual Studio Express版。另外你最好先在Visual Studio下完成OpenCV简单demo的编译(参看我之前的博文),确保OpenCV环境设置正确。

使用Qt Creator这个IDE而不是VS的好处在于Qt Creator能够非常方便地调用所有Qt的组件,而且更加轻量级、启动也很快速,开发跨平台应用时也更加方便(主流平台下都有Qt Creator,而只有Windows才有Visual Studio)。

Qt程序的项目配置文件保存在.pro文件里,类似于VS2012中所配置的,Qt也没有“全局”的INCLUDE和LIB(库)路径的修改功能,而是通过对pro文件的改动来配置编译时需要包含的路径和库文件。

Continue reading “Qt 5.2+VS2012+OpenCV 2.4.7的环境配置”

C++版(Qt)灵格斯LD2/LDX文件解析/读取工具

感慨一下开源的力量真是巨大。

自我感觉KDictionary的大部分功能都已经实现的大差不差了,所以现在想着手实现下一个重要特性:离线词典。瞄准了灵格斯词霸的海量词库文件,一大堆的LD2/LDX文件,而且封闭的文件格式也已经被高手破解了!

然后鄙人花了几天功夫,再一次Qt的现学现卖,把Java代码移植到了C++(使用了Qt库)。为什么要移植?因为Plasmoid不能用Java写啊……而且我不想学Java

Continue reading “C++版(Qt)灵格斯LD2/LDX文件解析/读取工具”

用纯QML写的Plasmoid词典工具KDictionary

 

(话外音:图片被扔在文章末尾了)

花了一天来完成这个Plasmoid(KDE Plasma桌面小工具),可谓是现学现卖啊,一边网上查手册一边在机器上写。主要是对已有的Dictionary这个Plasmoid极度不满(不然我也不会自己写一个),去project.kde.org上一看吓我一跳,Dictionary的上次更新已经是两年前的事情了。而且还是用的C++,还没port到QML呢!

Continue reading “用纯QML写的Plasmoid词典工具KDictionary”

Qt在轻量级桌面环境的逆袭

Razor-qt和LXDE-qt合并了,合并后项目名称沿用LXDE-qt(估计是因为LXDE的名声还是比Razor响亮吧)。本文纯粹是自己的想法拿来分享一下,没有什么技术含量的内容。老鸟不要拍砖。

Razor-qt是近两年兴起来的桌面环境(Desktop Environment,简称DE),用Qt 4写的。Razor-qt证明了Qt写出来的DE并非都是像KDE那样重量级的。那个试图阻挡历史潮流的TDE就不拉出来讲了,TDE就是KDE 3.x的续命散。

LXDE应该很多人都熟悉,但是GTK+ 2.x已经进入了停止开发维护的状态,LXDE难以为继,在选择迁移到GTK+ 3.x还是Qt的时候,LXDE团队决定迁移到Qt工具集。具体原因大家可以直接去LXDE的blog看,大概就是讲Qt 4和Qt 5之间升级的话非常平滑,而且Qt和GTK+ 3.x的系统资源占用大同小异(都比GTK+ 2.x多一点)。

后来LXDE就开始LXDE-qt项目了。这个消息出来差不多一个月,昨天就听说Razor-qt和LXDE-qt合并了。其实这些相似的Light DE确实应该抱团取暖,不然开发进度根本保障不了。至此,Qt在轻量级桌面环境的逆袭之旅就拉开帷幕了!!!

想想看,目前轻量级DE里面,就Xfce还在GTK+阵营(但是Xfce还是依赖于GTK+ 2.x,看目前对GTK+ 3.x的部分兼容来看,估计Xfce会迁移到GTK+ 3.x)。e17是ELF(一定程度上可忽略)。WM不是DE,别把jwm、icewm这些东西拿出来讲。等LXDE-qt的稳定版本发布,Qt就能在轻量级和重量级DE两端和GTK+抗衡了!现在Qt社区化开源运作程度应该是比Nokia时代的强,毕竟Digia难以像Nokia那样“霸道”地左右Qt的路线。

Kill GNOME! Kill Xfce! Long live KDE! Long live Qt!