本文介绍的是Qt 编程点滴,作为一名新手,我建议必须看一看。编程那些事,只有编程人员自己明白!所以推荐本文。

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

Qt 编程点滴 初学者必看 (10)(qt编程指南)  第1张

qss 收集:Setting QObject properties

  1. From4.3andabove,anydesignableQ_PROPERTYcanbesetusingtheqproperty-syntax.

For example,

  1. MyLabel{qproperty-pixmap:url(pixmap.png);}
  2. MyGroupBox{qproperty-titleColor:rgb(100,200,100);}
  3. QPushButton{qproperty-iconSize:20px20px;}
  4. IfthepropertyreferencesanenumdeclaredwithQ_ENUMS,youshouldreferenceitsconstantsbyname,i.e.,nottheirnumericvalue.

类成员函数里定义的临时指针不能做为参数传递;函数里取得的指针无法返回到外面;

  1. groupmanage.h:
  2. classGroupManage
  3. {
  4. private:
  5. ///组在线数据
  6. /**.*/
  7. classOnLineData
  8. {
  9. public:
  10. IGPSNav*iGpsNav;/**<GPS聊天接口*/
  11. intgroupId;/**<组ID*/
  12. };
  13. QListonLineList;/**<组在线列表*/
  14. private:
  15. ///查找GPS聊天接口
  16. /**
  17. @paramgroupId组id
  18. @paramgpsNav(返回值)只有在查到时才返回指针
  19. @returntrue:查找到false:未查找到
  20. */
  21. boolfindGpsNav(intgroupId,unsignedint&gpsNav);//正确的写法:返回对象指针地址
  22. boolfindGpsNav(intgroupId,IGPSNav*iGpsNav);//如果是这样写法请注意调用方法
  23. voidtest();
  24. };
  25. groupmanage.cpp:
  26. //查找GPS聊天接口
  27. boolGroupManage::findGpsNav(intgroupId,unsignedint&gpsNav)
  28. {
  29. boolok=false;
  30. for(inti=0;i<onLineList.count();i++)
  31. {
  32. OnLineData*onLineData=onLineList.at(i);
  33. if(onLineData->groupId==groupId)
  34. {
  35. ok=true;
  36. gpsNav=(unsignedint)(onLineData->iGpsNav);
  37. break;
  38. }
  39. }
  40. _EDEBUG("findGpsNavgpsNav="<returnok;
  41. }
  42. boolGroupManage::findGpsNav(intgroupId,IGPSNav*iGpsNav)
  43. {
  44. boolok=false;
  45. for(inti=0;i<onLineList.count();i++)
  46. {
  47. OnLineData*onLineData=onLineList.at(i);
  48. if(onLineData->groupId==groupId)
  49. {
  50. ok=true;
  51. iGpsNav=onLineData->iGpsNav;
  52. break;
  53. }
  54. }
  55. _EDEBUG("findGpsNavgpsNav="<returnok;
  56. }
  57. voidGroupManage::test()
  58. {
  59. IGPSNav*iGpsNav;
  60. unsignedintiGpsNavInt;
  61. boolok;
  62. ok=findGpsNav(groupId,iGpsNavInt);
  63. iGpsNav=(IGPSNav*)iGpsNavInt;
  64. _EDEBUG("iGpsNav:"<
  65. /*--下面的写法指针返回不了
  66. IGPSNav*iGpsNav;//把此句申明放在类的private:下就可以解决问题
  67. boolok;
  68. ok=findGpsNav(groupId,iGpsNav);
  69. _EDEBUG("iGpsNav:"<*/
  70. }
  71. QPushButton{
  72. background-color:rgba(255,255,255,50%);
  73. }

透明度50%

1.问题1: connect函数不存在,对象没有从QObject继承.

2.问題2

采用Event方法连接,在对象方法里启动定时器,在运行时发生:

  1. QTtimerscannotbestartedfromanotherthread

解决:采用Signal/Slot并且连接方式采用 Qt::QueuedConnection

3.利用Signal/Slot删除对象本身:

解决:采用Signal/Slot并且连接方式采用 Qt::QueuedConnection,这时在另一个对象中就可以删除对象本身了。用qss增加每个菜单项的高度,在用StyleSheet美化QMenu时,如何指定菜单项与快捷键的间距?

  1. QMenu::item{
  2. border:1pxsolidtransparent;
  3. margin:0px2px0px2px;
  4. padding:2px9px2px30px;//TopRightBottomLeft(用这种方式能增加menu中每一行的高度,这就使得在小的触摸屏上进行菜单项的选择的时候,不会那么困难了)
  5. }
  6. QGraphicsView无法接收到一些widget传过来的消息的处理方法:
  7. boolevent(QEvent*event)
  8. {
  9. if(event->type()==QEvent::MouseButtonPress)
  10. {
  11. QMouseEvent*ke=static_cast(event);
  12. qDebug()<<"BaseMousePressed...."QWidget::event(event);//关键语句
  13. returntrue;
  14. }
  15. returnQGraphicsView::event(event);
  16. };

基于Signal/Slot机制的接口写法:

  1. MyInterface:publicQObject{//QObject子类都可以
  2. Q_OBJECT
  3. public:
  4. explicitMyInterface(QObject*parent=0);//防止出现异常显式
  5. virtual~MyInterface(){}
  6. virtualvoidmyFunc(inti)=0;//纯虚函数
  7. //....
  8. signals:
  9. voidmySignal(inti);
  10. //....
  11. publicslots:
  12. virtualvoidmySlot(){//donothing};
  13. private:
  14. //...
  15. }
  16. MyImpl:publicMyInterface{
  17. Q_OBJECT
  18. public:
  19. MyImpl(parent=0);
  20. virtualMyImpl(){};
  21. virtualvoidmyFunc(inti){emitmySignal();};
  22. publicslots:
  23. voidmySlot(){//mycode};
  24. }
  25. MyImpl2:publicMyInterface{
  26. Q_OBJECT
  27. public:
  28. MyImpl(parent=0);
  29. virtualMyImpl(){};
  30. virtualvoidmyFunc(inti){emitmySignal();};
  31. publicslots:
  32. voidmySlot(){//mycode};
  33. }
  34. IMyInterface&createMyImpl1(parent=0)
  35. {
  36. return*newMyImpl1(parent);
  37. }
  38. IMyInterface&createMyImpl2(parent=0)
  39. {
  40. return*newMyImpl2(parent);
  41. }

析构函数 前一定要加 virtual。

小结:关于Qt 编程点滴的介绍介绍完了,通过Qt 编程点滴介绍,也给自己提高了编程过程中需要注意的细节问题,由于本话题是一节一节为大家展现的,所以更多内容,请看编辑推荐。希望这些内容对你有所帮助!

转载请说明出处
知优网 » Qt 编程点滴 初学者必看 (10)(qt编程指南)

发表评论

您需要后才能发表评论