随笔分类 -  Qt

C++回调机制实现(转)
摘要:对于博客,从来是默默的转,最近终于有点时间可以写些自己的东西(其实也还要忙着准备找工呢),写出来与仅仅知道那么回事绝对大不一样,写也是学习的过程,不过向来多关注于功能实现,对一些基础概念把握不准确,望各位拍砖,不废话了。 什么是回调?通常发生在需要两个角色即调用者与实现者的情形上,即我们希望当产生某个事件时,调用实现者定义的某个函数。当然这个概念很大,不是说操作系统的信号量,条件变量什么的,是在语言级别实现,如一个Framework提供商,规定了整个程序的框架,可能产生某事件时它希望调用某个行为,而这个行为的具体定义是由framework客户来完成。 我们从简单的做起,通过一个个为什么最终来获 阅读全文
posted @ 2012-10-10 22:58 一个人的天空@ 阅读(15950) 评论(1) 推荐(2)
Qt窗口屏幕居中显示
摘要:窗口的屏幕居中显示问题,在各开发工具中原理相同,首先使用特定的方法得到显示屏幕的宽度和高度,再根据窗口本身的宽度和高度计算出窗口的左上角坐标位置. Qt中可以采用两种方法达到窗口的屏幕居中显示:方法一: 显示前先计算出窗口显示位子,并移到对应位子后再显示窗口intmain(intargc,char*argv[]){QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));QApplication a(argc, argv);QDesktopWidget *pDesk = QApplication::desk 阅读全文
posted @ 2012-08-25 14:45 一个人的天空@ 阅读(12377) 评论(1) 推荐(0)
Qt的元对象(Meta-Object)系统简介(转)
摘要:Qt的元对象系统基于如下三件事情:1.类:QObject,为所有需要利用原对象系统的对象提供了一个基类。2.宏:Q_OBJECT,通常可以声明在类的私有段中,让该类可以使用元对象的特性,比如动态属性,信号和槽。3.编译器:元对象编译器(moc)为每个QObject子对象自动生成必要的代码来实现元对象特性。moc工具会读入C++的源文件,如果它发现了一个或者多个声明了Q_OBJECT宏的类,它就创建另一个C++源文件,为每个类生成包含元对象实现的代码。这些编译生成的源文件通常都已经被包含到类的源文件中或者和类的实现同时被编译和链接。除了为对象间的通信提供信号和槽(signals and slot 阅读全文
posted @ 2012-08-20 21:12 一个人的天空@ 阅读(684) 评论(0) 推荐(0)
QtWidget: 鼠标拖动窗口(没有标题栏时)
摘要:voidShapedClock::mousePressEvent(QMouseEvent *event) { if(event->button() == Qt::LeftButton) { dragPosition = event->globalPos() - frameGeometry().topLeft(); event->accept(); }}voidShapedClock::mouseMoveEvent(QMouseEvent *event) { if(event->buttons() & Qt::LeftButton) { move(event-&g 阅读全文
posted @ 2012-08-19 11:30 一个人的天空@ 阅读(2663) 评论(0) 推荐(0)
Qt中父子widget的消息传递(转)
摘要:以前我一直以为:在父widget上摆一个子widget后,当click子widget时:只会进入到子widget的相关事件处理函数中,比如进入到mousePressEvent()中, 而不会进入到父widget的对应事件处理函数中。毕竟:click的是子widget,其遮挡住了父widget,从而父widget接收不到这个事件。然而事实真的是这个样子吗? 我做了一个测试: 在一个QWidget上建了一个QLabel。而后实现父QWidget的mousePressEvent(), 然后跟一下发现:当我click这个label时:居然能进入到父QWidget的mousePressEvent()中. 阅读全文
posted @ 2012-08-19 10:35 一个人的天空@ 阅读(2517) 评论(0) 推荐(0)
Qt中如何禁掉所有UI操作以及注意事项(转)
摘要:刚做完的一个项目,在测试时出现了一个问题:由于多线程的存在,当进行语音识别时:如果用户点击程序界面上的button或者其他接受点击事件后会发出信号的widget时,程序会crash ! 后来尝试着从多线程上去解决,但是比较困难;后来只能从另外一条路来解决,那就是:当语音识别进行时:禁掉一切用户操作! 所谓的禁掉一切UI操作,在手机等手持设备上,尤其是纯触摸屏的设备上,主要就是指的禁止mouse操作!当然了:也可能是禁止键盘操作等。那如何去做这一点呢? 方法:我们可以截获禁止操作的窗口的所有event事件,而后将他们全部抛掉而不进行处理,这样就可以了。那在Qt中要实现这一点有很多种方法,比较.. 阅读全文
posted @ 2012-08-19 10:32 一个人的天空@ 阅读(2675) 评论(0) 推荐(0)
如何使QTextEdit背景透明(转)
摘要:前边的文章http://blog.csdn.net/NRC_DouNingBo/archive/2010/04/28/5540427.aspx介绍了如何给QTextEdit加背景图片,但是由于图片也会跟着翻屏,所以用了一种折中的办法就是:将QTextEdit设置为透明,而后在其后边的窗口的该位置处刷上图片即可。 那这里就说一下如何让QTextEdit控件背景变为透明。 正如上一篇文章所讲的那样,在Qt中所有问题都要分两种体系来讨论,一种是QWidget体系,一种则是QGraphicsWidget体系。此处也不例外。一: 对于QWidget体系而言:亦即用的都是QWidget以及其派生类。对于此 阅读全文
posted @ 2012-08-19 10:23 一个人的天空@ 阅读(5026) 评论(0) 推荐(0)
给QTextEdit添加背景图片及注意事项(转)
摘要:前一段时间遇到一个很有意思的问题,要给QTextEdit这个Qt空间加一张背景图片,我试过很多方法,用QPalette调色板,paintEvent(),结果都没有效果,后来发现有两种方式可以实现这一点,如下:(如果各位还有更好的办法,请告诉我)QTextEdit* iEdit = new QTextEdit();1:使用样式表: iEdit->setStyleSheet("background-image:url(:/bmp/DSCN1604.JPG)"); 注意:在url()括号中首先开始的 “:”冒号一定不能搞错,否则就显示不出来。2:使用html iEdit-& 阅读全文
posted @ 2012-08-19 10:20 一个人的天空@ 阅读(2873) 评论(0) 推荐(1)
Qt中如何使用样式表QPalette以及相关注意事项(转)
摘要:设置一个widget的背景图片/颜色,我们可以使用调色板QPalette,而设置最重要的就是setBrush()画刷。刚google搜索了一下,发现用setBrush基本都只用了它的一种方法,但实际上其有两种用法。QPalette palette; 用法一:palette.setBrush(QPalette::Base, brush);palette1.setBrush(QPalette::Active,QPalette::Base, brush);上述两种方式大同小异,除去group这一参数歪,其余两个参数一模一样,其中第二个参数代表颜色角色!其主要通过枚举变量QPalette::Color 阅读全文
posted @ 2012-08-19 10:09 一个人的天空@ 阅读(1560) 评论(0) 推荐(1)
Qt中各个widget前后位置的设定(转)
摘要:这两天在总结一些以往project中遇到的问题,正好别组有同事问我关于Qt中各个widget窗口的前后位置是如何定义的,这里就总结一下: 在Qt中,所有问题都要一分为二,讨论两种不同的情况:一个是最常用的QWidget体系,而另外一个则是QGraphicsWidget体系。 ①:在常用的QWidget体系中,设置前后位置是主要是用raise(),underStack(),hide()函数。 理论为:在Qt中每个widget窗口都维持着自己的一个创建栈(widget's stack.),栈里边存放的是该窗口所有子widget窗口的标识符(代表其各个子widget)。当创建一个子widge 阅读全文
posted @ 2012-08-19 10:01 一个人的天空@ 阅读(9746) 评论(0) 推荐(3)
Qt中设置widget背景颜色/图片的注意事项(使用样式表 setStyleSheet())
摘要:在Qt中设置widget背景颜色或者图片方法很多种:重写paintEvent() , 调色板QPalette , 样式表setStyleSheet等等。 但是各种方法都有其注意事项,如果不注意则很容易陷入麻烦中。1:setStyleSheet() 这个函数我一直很喜欢使用,因为只要写一句就可以实现效果,比其他方法都简单,但是其却有一个很值得注意的地方,也就是这个地方让我大吃苦头。 亦即:①:该函数只能用于设置有父窗口的子窗口的背景!如果一个窗口没有子窗口,则无法使用该函数来设置背景颜色或图 片!! ②:同时:对于一个父窗口而言:如果我们用setStyl... 阅读全文
posted @ 2012-08-19 09:48 一个人的天空@ 阅读(8176) 评论(1) 推荐(1)
Qt设置圆角按钮样式
摘要:Qt中使用stylesheet方式将按钮设置成圆角按钮,代码如下:setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px 4px;");如pushButton如下用法:pushButton->setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px 4px;");更多>setStyleSheet用法如下:qApp->setStyleSheet("QLineEdit { 阅读全文
posted @ 2012-08-19 09:45 一个人的天空@ 阅读(29308) 评论(0) 推荐(0)
QT 按钮(4种样式)
摘要:// 1.正常 btnNormal_ = new QPushButton("Normal Button", this); // 2.可停驻 btnCheck_ = new QPushButton("Toggle Button", this); btnCheck_->setCheckable(TRUE); btnCheck_->setChecked(TRUE); // 3.带弹出式菜单 btnMenu_ = new QPushButton( "Popup Button", this); QMenu *menu = new Q 阅读全文
posted @ 2012-08-19 09:40 一个人的天空@ 阅读(6927) 评论(0) 推荐(0)
Qt隐藏标题栏
摘要:setWindowFlags (Qt::CustomizeWindowHint)setWindowFlags (Qt::FramelessWindowHint)两个函数都可以去掉标题栏,区别是第一个可以鼠标缩放窗口 阅读全文
posted @ 2012-08-18 16:54 一个人的天空@ 阅读(8673) 评论(0) 推荐(1)
Qt 窗体布局
摘要:布局相关对象及简介窗体上的所有的控件必须有一个合适的尺寸和位置。Qt提供了一些类负责排列窗体上的控件,主要有:QHBoxLayout,QVBoxLayout,QGridLayout,QStackLayout。(布局管理类)这些类简单易用,无论在代码中还是用Qt Designer开发程序都能用到。1)布局类简介QHBoxLayout:水平布局QVBoxLayout:垂直布局QGridLayout:表格布局QGridLayout::addWidget()语法layout->addWidget(widget, row, column, rowSpan, columnSpan);参数widget 阅读全文
posted @ 2012-08-13 23:08 一个人的天空@ 阅读(36352) 评论(0) 推荐(0)
【引用】Qt——web网页和本地对象的交互
摘要:有时候可能需要在html网页中调用本地的对象方法。比如说我点击了一个视频文件的链接,希望调用本地的多媒体模块来播放这个视频文件, 如何实现?一、html中的JavaScript调用Qt本地对象方法过程如下:将本地的QObject对象暴露给webkit和JavaScript通过JavaScript调用本地QObject的槽下面对每个步骤进行详细的分析:1、将本地的QObject对象暴露给webkit和JavaScriptQWebFrame里提供了实现这个功能的接口:1voidaddToJavaScriptWindowObject(constQString &name, QObject * 阅读全文
posted @ 2012-08-12 16:40 一个人的天空@ 阅读(1727) 评论(0) 推荐(0)
QT 如何使窗体初始最大化
摘要:今天我想让一个窗体初始运行最大化,本以为很简单一个问题,花了差不多两个小时才解决,真是痛苦,问题一但解决,其实非常简单QT 中有一个voidQWidget::setWindowState(Qt::WindowStateswindowState)这样的函数,通过它可以设置窗体的初始状态,Qt::WindowStates 一共有下面几种状态:ConstantValueDescriptionQt::WindowNoState0x00000000The window has no state set (in normal state).Qt::WindowMinimized0x00000001The 阅读全文
posted @ 2012-08-12 10:22 一个人的天空@ 阅读(31945) 评论(0) 推荐(3)
QT VS配置UNICODE问题
摘要:默认情况下,使用VSQT插件导入.pro后,会自动在项目文件里面预定义好宏UNICODE,可以把该宏去掉,以免造成其他程序,使用多字节的代码出错去除的两个方法1.打开Propject->Property->Configuration Properties->Processor去掉右边显示的宏2.在main函数前面使用以下命令#undef UNICODE 阅读全文
posted @ 2012-06-12 15:36 一个人的天空@ 阅读(491) 评论(0) 推荐(0)
QT INI 读写
摘要:QSettings *ConfigIni = new QSettings(QSettings::Ini);ConfigIni->insertSearchPath(QSettings::Unix, "/home/Dawei");.//配置文件目录ConfigIni->writeEntry(QString::fromUtf8("/config./opt/参数1"), QString::fromUtf8("中文"));String aaa = ConfigIni->readEntry(QString::fromUtf8(& 阅读全文
posted @ 2012-06-10 22:53 一个人的天空@ 阅读(3910) 评论(0) 推荐(1)
QT基础四
摘要:Qt提供的容器类的最大优点在于平台无关性和隐式共享特性11.1Sequentail ContainersQVector< T> array-like data structure(在尾部插入数据时效率很高,而在中间和头部插入数据时开销很大)。QVector提供了[]运算符QVector可以用< < 运算符代替append()函数。QVector中的基本类型及指针被初始化为0。QLinkedList< T>QLinkedList不提供[]运算符,所以必须通过迭代器来对其进行遍历。QList< T>array-list:综合了QVector< 阅读全文
posted @ 2012-06-04 10:53 一个人的天空@ 阅读(9530) 评论(0) 推荐(1)