Qt 编程点滴 初学者必看 (3)
创始人
2024-08-01 02:10:25
0

Qt 编程继续为大家讲解,还是接着文章 Qt 编程点滴 初学者必看 (2) ,继续介绍,说编程那些细节。由于本话题是一节一节为大家介绍的,所以更多内容请看末尾编辑推荐。

静态成员变更量

  1. aa.h  
  2. class AA  
  3. {  
  4.   static char p[13];  
  5. };  
  6. aa.cpp  
  7. char AA::p[13];  

如果没在cpp中增加"char AA::p[13];",则编译时会提示"undefined reference to...."的错误

b.h接口中引用a.h接口,使用时必须加上

  1. include "a.h"  
  2. include "b.h" 

否则编译时会出现"如果没在cpp中增加"char AA::p[13];",则编译时会提示"单例模式singleton单元要最先初始化(#include放到最前面)

QWidget类以模式窗体显示:

  1. dailPage = new DailForm(0,tel);  
  2. dailPage->setWindowModality(Qt::ApplicationModal);  
  3. dailPage->show();   

事件过滤写法:

其实可以通过重载QWidget::keyPressEvent()获得本类(假设是窗体)中的几乎所有键盘事件,但焦点在文本框上,就不属于窗体类啦,所以必须采用在窗体类中添加Event Filters:

  1. CustomerInfoDialog::CustomerInfoDialog(QWidget *parent)  
  2.   : QDialog(parent)  
  3. {  
  4.   ...  
  5.   firstNameEdit->installEventFilter(this);  
  6.   lastNameEdit->installEventFilter(this);  
  7.   cityEdit->installEventFilter(this);  
  8.   phoneNumberEdit->installEventFilter(this);  

然后在eventFilter中处理相关键盘事件,通过target判断是否是文本框发生的键盘事件

  1. bool CustomerInfoDialog::eventFilter(QObject *target, QEvent *event)  
  2. {  
  3.   if (target == firstNameEdit || target == lastNameEdit  
  4.         || target == cityEdit || target == phoneNumberEdit) {  
  5.     if (event->type() == QEvent::KeyPress) {  
  6.         QKeyEvent *keyEvent = static_cast(event);  
  7.         if (keyEvent->key() == Qt::Key_Space) {  
  8.           focusNextChild();  
  9.           return true;  
  10.         }  
  11.     }  
  12.   }  
  13.   return QDialog::eventFilter(target, event);  

去掉窗体标题栏:

  1. setWindowFlags(Qt::FramelessWindowHint);  
  2. ld.exe cannot find -lSDL  

处理:环境变量path加入"D:\QtDevelop\umpcapp\public\SDL-1.2.13\bin"

环境变量path的设置:

  1. D:\QtDevelop\umpcapp\public\STLport-5.1.3\bin;  
  2. D:\MinGW\bin;  
  3. D:\Qt\bin;  
  4. D:\QtDevelop\umpcapp\public\SDL-1.2.13\bin;  
  5. D:\QtDevelop\umpcapp\public\SDL_mixer-1.2.8\bin 

注:STLport-5.1.3一定要放在MinGW前面,不然会出现"QImage: out of memory, returning null image"的错误;如果要用到STLport库,那么在配置.pro文件时,一定要记住把stlport放在其它库的前面,下面的写法是正确的:

  1. INCLUDEPATH += . \  
  2.                ../../public/STLport-5.1.3/stlport \ ###这句一定要放在前面  
  3.                ../../public/SDL-1.2.13/include \  
  4.                ../../public/common/include \  
  5.                ../../public/qextserialport-1.1\  
  6.                ../../public/boost-1.37.0/include 

如果库的依赖关系(*.dll)出错,则应用程序会出现报内存的错误,最简单的方法就是把应用程序,所需要的库直接加入环境变量path中,以造成如果库更新,原来拷在应用程序下的库没有及时更新,环境变更path的设置例子:

  1. path += D:\QtDevelop\umpcapp\public\boost-1.37.0\lib;  
  2.         D:\QtDevelop\umpcapp\public\qextserialport-1.1\build  

上面对应的库为:

  1. boost_system-mgw34-mt-1_37.dll;boost_thread-mgw34-mt-1_37.dll;  
  2. qextserialport.dll                  

编译成功后,debug下的exe文件不能生成,请检查.pro文件中,HEADERS与SOURCES参数配置是否有错误,比如把.h文件加入SOURCES参数中,把.cpp加入HEADERS参数中.

  1. void MapScene::mouseMoveEvent ( QGraphicsSceneMouseEvent * mouseEvent )  
  2. {  
  3.     QPointF scenepos;  
  4.     scenepos = mouseEvent->scenePos();  
  5.     //qDebug()< 

QWebKit中支持Flash播放的代码(Qt4.5才支持Flash)

  1. webView->page()->settings()->setAttribute(QWebSettings::PluginsEnabled,true);  
  2. listWidget->addItem(new QListWidgetItem(QIcon(":/notepaditem.png"), QFile(files[i]).fileName()  )); 

vector 引用的单元:

  1. #include   
  2. using namespace std;  
  3. QString 字符串换行:  
  4. QString str;  
  5. str = tr("133");  
  6. str.append(tr("  
  7. ")); 

注:br后要加一个空格;

Qss背景透明:

  1. QPushButton{  
  2.     background-color: rgba( 255, 255, 255, 0% );  

打开指定URL地址

  1. QUrl url("http://www.zzwtt.com");  
  2. QDesktopServices::openUrl(url); 

可以打开任意URL

窗体置前:

  1. QWidget w;  
  2.    w.setWindowFlags(Qt::WindowStaysOnTopHint);  
  3.    w.show(); 

窗体不显示在任务栏:

  1. setWindowFlags(Qt::Popup) ; 

注:改变*.h的内容,编译时会没有编译过程,只有改变*.cpp才会进行编译;

小结:本文主要介绍了在Qt 窗体的使用,通过Qt 编程点滴介绍,也给自己提高了编程过程中需要注意的细节问题,由于本话题是一节一节为大家展现的,所以更多内容,请看编辑推荐。

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...