加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Qt 编程点滴3

发布时间:2020-12-15 18:29:12 所属栏目:百科 来源:网络整理
导读:静态成员变更量 aa.h ? class?AA ? { ? ??static?char?p[13]; ? }; ? aa.cpp ? char?AA::p[13];?? 如果没在cpp中增加"char AA::p[13];",则编译时会提示"undefined reference to...."的错误 b.h接口中引用a.h接口,使用时必须加上 include?"a.h" ? include?"b

静态成员变更量

 
 
  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); ?
  9. }?

然后在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); ?
  14. }?

去掉窗体标题栏:

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

处理:环境变量path加入"D:QtDevelopumpcapppublicSDL-1.2.13bin"

环境变量path的设置:

 
 
  1. D:QtDevelopumpcapppublicSTLport-5.1.3bin; ?
  2. D:MinGWbin; ?
  3. D:Qtbin; ?
  4. D:QtDevelopumpcapppublicSDL-1.2.13bin; ?
  5. D:QtDevelopumpcapppublicSDL_mixer-1.2.8bin?

注: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:QtDevelopumpcapppublicboost-1.37.0lib; ?
  2. ????????D:QtDevelopumpcapppublicqextserialport-1.1build??

上面对应的库为:

 
 
  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,?0%?); ?
  3. }?

打开指定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才会进行编译;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读