Qt 编程点滴 初学者必看 (3)

本人介绍的是Qt 编程点滴,作为一名新手,我建议必须看一看。编程那些事,只有编程人员自己明白!所以推
首页 新闻资讯 行业资讯 Qt 编程点滴 初学者必看 (3)

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

静态成员变更量

复制

aa.h  class AA  {    static char p[13];  };  aa.cpp  char AA::p[13];
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

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

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

复制

include "a.h"  include "b.h"
  • 1.

  • 2.

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

QWidget类以模式窗体显示:

复制

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

  • 2.

  • 3.

事件过滤写法:

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

复制

CustomerInfoDialog::CustomerInfoDialog(QWidget *parent)    : QDialog(parent)  {    ...    firstNameEdit->installEventFilter(this);    lastNameEdit->installEventFilter(this);    cityEdit->installEventFilter(this);    phoneNumberEdit->installEventFilter(this);  }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

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

复制

bool CustomerInfoDialog::eventFilter(QObject *target, QEvent *event)  {    if (target == firstNameEdit || target == lastNameEdit          || target == cityEdit || target == phoneNumberEdit) {      if (event->type() == QEvent::KeyPress) {          QKeyEvent *keyEvent = static_cast(event);          if (keyEvent->key() == Qt::Key_Space) {            focusNextChild();            return true;          }      }    }    return QDialog::eventFilter(target, event);  }
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

  • 8.

  • 9.

  • 10.

  • 11.

  • 12.

  • 13.

  • 14.

去掉窗体标题栏:

复制

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

  • 2.

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

环境变量path的设置:

复制

D:\QtDevelop\umpcapp\public\STLport-5.1.3\bin;  D:\MinGW\bin;  D:\Qt\bin;  D:\QtDevelop\umpcapp\public\SDL-1.2.13\bin;  D:\QtDevelop\umpcapp\public\SDL_mixer-1.2.8\bin
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

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

复制

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

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

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

复制

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

  • 2.

上面对应的库为:

复制

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

  • 2.

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

复制

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

  • 2.

  • 3.

  • 4.

  • 5.

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

复制

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

  • 2.

vector 引用的单元:

复制

#include   using namespace std;  QString 字符串换行:  QString str;  str = tr("133");  str.append(tr("  "));
  • 1.

  • 2.

  • 3.

  • 4.

  • 5.

  • 6.

  • 7.

注:br后要加一个空格;

Qss背景透明:

复制

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

  • 2.

  • 3.

打开指定URL地址

复制

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

  • 2.

可以打开任意URL

窗体置前:

复制

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

  • 2.

  • 3.

窗体不显示在任务栏:

复制

setWindowFlags(Qt::Popup) ;
  • 1.

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

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

19    2011-06-17 14:41:56    Qt