代码改变世界

随笔分类 - QT

Win7+VS2005编译Qt4.7.3+phonon

2013-03-21 10:35 by bingcaihuang, 2153 阅读, 收藏, 编辑
摘要: Qt官网上下载的源代码在编译时并没有将phonon继承进去,只提供了源代码,而在Win7+VS2005中编译phonon时遇到不少的问题,因为phonon只是一个前端程序,要使用其实现多媒体的播放还需要配合Qt基本库、phonon_backend(后端插件)和多媒体播放后台等等。phonon只提供了一套API接口给客户端程序调用,同时为后端插件提供一个规范,向后端插件传递客户端程序发出的指令,并且从后端插件返回给客户端程序当前媒体的状态和信息,起到桥梁的作用。而后端插件才是实际进行读入媒体、解码并且播放的部分,所以要在Qt环境下使用phonon需要:编译Phonon库:通常情况下Qt默认没有编 阅读全文

Q_UNUSED()

2011-08-07 10:02 by bingcaihuang, 602 阅读, 收藏, 编辑
摘要: Q_UNUSED() 没有实质性的作用,用来避免编译器警告01//比如说0203inttestFunc(inta,intb,intc,intd)04{05inte;06returna+b+c;07}0809//编译器会有警告 d和e未使用;1011//于是12inttestFunc(inta,intb,intc,intd)13{14inte;1516Q_UNUSED(d)17Q_UNUSED(e)18returna+b+c;19}2021//多数时候,这样用总不是太好2223//比如 e,就不该出现,2425//对于d,也可以 注释掉2627inttestFunc(inta,intb,intc 阅读全文

QT发布程序中文乱码完全解决方案 Qt for Windows

2011-07-30 10:03 by bingcaihuang, 1392 阅读, 收藏, 编辑
摘要: 我讨厌在程序中用tr()进行中文转换,我写的程序也没打算给老外用,因此希望程序中直接使用中文字符串,讨厌任何形式的转换操作。好在开发环境中运行程序显示中文没有问题,可部署到新机器上中文却是乱码,搜索了很多帖子,给出的答案都不尽详实(或许我没看到,抱歉),不是缺少必要的语句就是顺序有误。于是自己根据这些帖子的提示(还是要十分感谢这些帖子),试验了很多次,终于找到了终极方案,现与大家分享: 1. 在主程序main开始处增加以下语句,注意要按顺序书写:QApplication::addLibraryPath("./plugins");QTextCodec::setCodecFor 阅读全文

QWidget QMainWindow QDialog 三者区别

2011-07-24 21:55 by bingcaihuang, 939 阅读, 收藏, 编辑
摘要: Qt类是一个提供所需的像全局变量一样的大量不同的标识符的命名空间。通常情况下,你可以忽略这个类。QObject和一些其它类继承了它,所以在这个Qt命名空间中定义的所有标识符通常情况下都可以无限制的使用。QWidget类是所有用户界面对象的基类。 窗口部件是用户界面的一个原子:它从窗口系统接收鼠标、键盘和其它事件,并且在屏幕上绘制自己的表现。每一个窗口部件都是矩形,并且它们按Z轴顺序排列的。一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分。QMainWindow类提供一个有菜单条、锚接窗口(例如工具条)和一个状态条的主应用程序窗口。主窗口通常用在提供一个大的中央窗口部件(例如文本编 阅读全文

浅析在QtWidget中自定义Model

2011-07-24 21:39 by bingcaihuang, 398 阅读, 收藏, 编辑
摘要: Qt4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系。这种结构带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的数据源可以被这些item view使用。这里对model/view的结构进行了描述,结构中的每个组件都进行了解释.。一直觉得Qt里的Model-View概念极其神秘, 因为看过很多一知半解的source code, 却总是咋看咋不懂,急了满头大汗之余不禁感叹 — 老了,脑子不够用了!这两天因为在写rssreader的关系,用到了MVC, 总算有点压力学习学习ModelView的奥秘,而 阅读全文

详解 Qt 线程间共享数据

2011-07-14 23:17 by bingcaihuang, 4320 阅读, 收藏, 编辑
摘要: 使用共享内存。即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的。Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容。Qt线程间共享数据主要有两种方式:使用共享内存。即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到共享数据的目的;使用singal/slot机制,把数据从一个线程传递到另外一个线程。第一种办法在各个编程语言都使用普遍,而第二种方式倒是QT的特有方式,下面主要学习一下这种方式:在线程之间传递signal与在一个线程内传递signal是不一样的。在一个线程内传递signal 阅读全文

windows下编译QextSerialPort

2011-04-16 02:13 by bingcaihuang, 2199 阅读, 收藏, 编辑
摘要: QextSerialPort是一个跨平台的第三方串口类,可以很方便地在QT中对串口读写操作。但是默认使用的读写方式是查询方式,一般都是在程序中使用定时器。如果需要快速响应串口读写,可以使用多线程方式。最近了解了下QextSerialPort,写了个小程序用VSPM模拟串口接收到数据,于MainWindows中显示。编译QextSerialPort前提是要了解QMAKE,编写QextSerialPort工程.pro文件如下:view plaincopy to clipboardprint?PROJECT=qextserialportTEMPLATE=vclibCONFIG+=releaseCON 阅读全文

QT之正则表达式

2011-04-03 09:25 by bingcaihuang, 2823 阅读, 收藏, 编辑
摘要: Qt之正则表达式 Qt的QtCore组件下的QRegExp类对正则表达提供了很好的支持. 首先,正则表达式是干什么的呢,,比如,你想从一个句子text中找到姓'王'的人,想把文字中的所有手机号找出来...正则表达室能很好得完成这样的工作,,,它就是按自己想要的规则来匹配文本的. 对于QRegExp这个类,是很简单的...Qt文档里有,就不多说了...下面主要是正则表达室的"语法"规则:(文章引自:http://blog.csdn.net/Blue_Light/archive/2010/01/18/5206538.aspx)引言 正则表达式(regular e 阅读全文

QRegExp正则表达式

2011-04-03 09:24 by bingcaihuang, 980 阅读, 收藏, 编辑
摘要: "^\d+$" //非负整数(正整数 + 0)"^[0-9]*[1-9][0-9]*$" //正整数"^((-\d+)|(0+))$" //非正整数(负整数 + 0)"^-[0-9]*[1-9][0-9]*$" //负整数"^-?\d+$" //整数"^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]* 阅读全文

QT多线程的学习

2011-03-29 12:44 by bingcaihuang, 521 阅读, 收藏, 编辑
摘要: 有一段时间没有关注blog了,最近在写一个QT多线程方面的程序,顺便转点学习资料QT通过三种形式提供了对线程的支持。它们分别是,一、平台无关的线程类,二、线程安全的事件投递,三、跨线程的信号-槽连接。这使得开发轻巧的多线程Qt程序更为容易,并能充分利用多处理器机器的优势。多线程编程也是一个有用的模式,它用于解决执行较长时间的操作而不至于用户界面失去响应。在Qt的早期版本中,在构建库时有不选择线程支持的选项,从4.0开始,线程总是有效的。线程类Qt 包含下面一些线程相关的类:QThread提供了开始一个新线程的方法QThreadStorage提供逐线程数据存储QMutex 提供相互排斥的锁,或互 阅读全文

Qt中的信号和槽之connect----多线程调用全解析(同步/异步)

2011-03-29 12:44 by bingcaihuang, 3837 阅读, 收藏, 编辑
摘要: 学Qt也有一段时间了,,,可是对它的connection 函数却不是很了解,也没有考虑一些问题... 比如,信号调用槽问题,是同步的,还是异步的: connect是4个参数吗??其实不是,它有5个参数,前4个都很熟悉,第五个参数是一个enum Qt::Connection Type类型的,它一共有六个值,下面是Qt Assistant中给出的明确说明,,This enum describes the types of connection that can be used between signals and slots. In particular, it determines wheth 阅读全文

QString 与中文问题

2011-03-17 12:25 by bingcaihuang, 804 阅读, 收藏, 编辑
摘要: 写的不错,转一下:首先呢,声明一下,QString 是不存在中文支持问题的,很多人遇到问题,并不是本身 QString 的问题,而是没有将自己希望的字符串正确赋给QString。很简单的问题,"我是中文"这样写的时候,它是传统的 char 类型的窄字符串,我们需要的只不过是通过某种方式告诉QString 这四个汉字采用的那种编码。而问题一般都出在很多用户对自己当前的编码没太多概念,于是一个简 单的 Qt 程序下面这个小程序,估计大家会感到比较亲切。似乎有相当多的中文用户尝试写过这样的代码:#include <QtGui/QApplication>#include 阅读全文

Qt 编码问题QTextCodec

2011-03-17 10:02 by bingcaihuang, 15767 阅读, 收藏, 编辑
摘要: 一般在Window开发环境里,是GBK编码,在Linux开发环境里,是utf-8编码,关于编码的定义, 我就不这里多说了,网上有一大堆资料可以查看。qt对默认的是unicode编码,在Window开发环境里,比较通用的写法是: 在main.cpp文件中加入: 1. QTextCodec *gbk = QTextCodec::codecForName("gb18030"); 2. QTextCodec::setCodecForTr(gbk); 3. QTextCodec::setCodecForLocale(gbk); 4. QTextCodec::setCodecForCS 阅读全文

QT多线程及通过事件进行通信

2011-03-16 13:49 by bingcaihuang, 1460 阅读, 收藏, 编辑
摘要: 可以通过QThread实现跨平台的多线程开发,Qt库负责在特定平台上的特定多线程实现。要采用QThread进行多线程开发,首先需要包含头文件:#include <QThread>然后需要从QThread继承一个自己的线程类,暂作MyThread,关键是要实现QThread内的一个虚函数run。在run函数内部,最后一般都调用exec(),使得线程进入事件循环,否则线程主函数run运行结束,线程也就退出了。class MyThread : public QThread{public: MyThread();public: Dialog *parent;public: void run 阅读全文

读书摘要——《C++.GUI.Programming.with.Qt.4

2011-03-16 13:41 by bingcaihuang, 1534 阅读, 收藏, 编辑
摘要: 读书摘要——《C++.GUI.Programming.with.Qt.4[转]Chapter 1 Getting Started Qt中的每个类,都有一个对应的同名头文件,其中包含其类定义。例如要使用QApplication类,则需要在程序中添加" #include <QApplication>" QApplication类用于管理应用程序范围内的资源。其构造函数需要main函数的argc和argv作为参数。 widget被创建时都是不可见的(always created hidden)。widget中可容纳其它widget。 Qt中的widget在有用户行为或 阅读全文

QT 常用问题解答

2011-03-16 12:06 by bingcaihuang, 306 阅读, 收藏, 编辑
摘要: 1、如果在窗体关闭前自行判断是否可关闭答:重新实现这个窗体的closeEvent()函数,加入判断操作Quote:void MainWindow::closeEvent(QCloseEvent *event){ if (maybeSave()) {writeSettings();event->accept(); } else {event->ignore(); }}2、如何用打开和保存文件对话答:使用QFileDialogQuote:QString fileName = QFileDialog::getOpenFileName(this);if (!fileName.isEmpty 阅读全文

基于vs2005以上版本Qt程序发布的注意事项

2011-03-15 14:06 by bingcaihuang, 517 阅读, 收藏, 编辑
摘要: 最近发现了一个非常恼人的程序deployment的问题,估计大家有可能也会遇到,特此memo。问题的出现我觉得主要还是微软搞的花头太多, 一个不知所谓的manifest文件让本来简单的程序发布变得困难重重。 找了找关于manifest的介绍,貌似这个文件是用来描述程序或者库的依赖关系, 特别是对程序依赖的版本进行描述, 这样系统可以通过manifest的内容找到正确的库版本。 理论上讲这个dd确实是不错, 可以解决版本不兼容的问题, 保证程序运行的时候用的是指定版本的库。 不过实际操作起来麻烦事一箩筐。笔者对vs/windows编程十分之菜,可能理解的有所偏差, 欢迎指正。 大概也是从vs20 阅读全文

Qt pro工程文件 介绍

2011-03-14 09:20 by bingcaihuang, 772 阅读, 收藏, 编辑
摘要: app - 建立一个应用程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使用。lib - 建立一个库的makefile。vcapp - 建立一个应用程序的Visual Studio项目文件。vclib - 建立一个库的Visual Studio项目文件。subdirs - 这是一个特殊的模板,它可以创建一个能够进入特定目录并且为一个项目文件生成makefile并且为它调用make的makefile。“app”模板“app”模板告诉qmake为建立一个应用程序生成一个makefile。当使用这个模板时,下面这些qmake系统变量是被承认的。你应该在你的.pro文件中使用它们来 阅读全文

关于0x0d和0x0a回车换行\r和\n

2011-03-07 15:38 by bingcaihuang, 33747 阅读, 收藏, 编辑
摘要: 用QT的Win_QextSerialPort调试串口程序时,通过qint64 write(const char *data, qint64 len)把数据写到串口,由于windows系统下,回车是由两个字符构成的,“0x0d”和“0x0a”回车 代码:CR ASCII码:\ r ,十六进制,0x0d,回车的作用只是移动光标至该行的起始位置;换行 代码:LF ASCII码:\ n ,十六进制,0x0a,换行至下一行行首起始位置;在键盘上敲下回车键,在不同软件下获得字符大有不同。 Windows下在txt文件中敲下回车键,然后16进制观察,你会发现获得了2个字符,0x0d和0x0a,这个大家都知道 阅读全文

QT中的随机函数的用法

2011-02-11 15:49 by bingcaihuang, 10091 阅读, 收藏, 编辑
摘要: 首先是初始化:qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));接着就可以随机了:qrand()理论上返回0 到RAND_MAX间的值。如果要返回0~n间的值,则为:qrand()%n;如果要返回a~b间的值,则为:a + qrand() % (b - a)这里介绍2种方法头文件都必须的,不多说了: #include&lt;QTime&gt;其中一个:函数中: QTime t; t= QTime::currentTime(); qsrand(t.msec()+t.second()*1000); int n = qrand();还 阅读全文