本文介绍的是Qt 编程点滴,作为一名新手,我建议必须看一看。编程那些事,只有编程人员自己明白!所以推荐本文。
Qt 编程继续为大家讲解,还是接着文章 Qt 编程点滴 初学者必看 (9),继续介绍,说编程那些细节。由于本话题是一节一节为大家介绍的,所以更多内容请看末尾编辑推荐。
qss 收集:Setting QObject properties
- From4.3andabove,anydesignableQ_PROPERTYcanbesetusingtheqproperty-syntax.
For example,
- MyLabel{qproperty-pixmap:url(pixmap.png);}
- MyGroupBox{qproperty-titleColor:rgb(100,200,100);}
- QPushButton{qproperty-iconSize:20px20px;}
- IfthepropertyreferencesanenumdeclaredwithQ_ENUMS,youshouldreferenceitsconstantsbyname,i.e.,nottheirnumericvalue.
类成员函数里定义的临时指针不能做为参数传递;函数里取得的指针无法返回到外面;
- groupmanage.h:
- classGroupManage
- {
- private:
- ///组在线数据
- /**.*/
- classOnLineData
- {
- public:
- IGPSNav*iGpsNav;/**<GPS聊天接口*/
- intgroupId;/**<组ID*/
- };
- QListonLineList;/**<组在线列表*/
- private:
- ///查找GPS聊天接口
- /**
- @paramgroupId组id
- @paramgpsNav(返回值)只有在查到时才返回指针
- @returntrue:查找到false:未查找到
- */
- boolfindGpsNav(intgroupId,unsignedint&gpsNav);//正确的写法:返回对象指针地址
- boolfindGpsNav(intgroupId,IGPSNav*iGpsNav);//如果是这样写法请注意调用方法
- voidtest();
- };
- groupmanage.cpp:
- //查找GPS聊天接口
- boolGroupManage::findGpsNav(intgroupId,unsignedint&gpsNav)
- {
- boolok=false;
- for(inti=0;i<onLineList.count();i++)
- {
- OnLineData*onLineData=onLineList.at(i);
- if(onLineData->groupId==groupId)
- {
- ok=true;
- gpsNav=(unsignedint)(onLineData->iGpsNav);
- break;
- }
- }
- _EDEBUG("findGpsNavgpsNav="<returnok;
- }
- boolGroupManage::findGpsNav(intgroupId,IGPSNav*iGpsNav)
- {
- boolok=false;
- for(inti=0;i<onLineList.count();i++)
- {
- OnLineData*onLineData=onLineList.at(i);
- if(onLineData->groupId==groupId)
- {
- ok=true;
- iGpsNav=onLineData->iGpsNav;
- break;
- }
- }
- _EDEBUG("findGpsNavgpsNav="<returnok;
- }
- voidGroupManage::test()
- {
- IGPSNav*iGpsNav;
- unsignedintiGpsNavInt;
- boolok;
- ok=findGpsNav(groupId,iGpsNavInt);
- iGpsNav=(IGPSNav*)iGpsNavInt;
- _EDEBUG("iGpsNav:"<
- /*--下面的写法指针返回不了
- IGPSNav*iGpsNav;//把此句申明放在类的private:下就可以解决问题
- boolok;
- ok=findGpsNav(groupId,iGpsNav);
- _EDEBUG("iGpsNav:"<*/
- }
- QPushButton{
- background-color:rgba(255,255,255,50%);
- }
透明度50%
1.问题1: connect函数不存在,对象没有从QObject继承.
2.问題2
采用Event方法连接,在对象方法里启动定时器,在运行时发生:
- QTtimerscannotbestartedfromanotherthread
解决:采用Signal/Slot并且连接方式采用 Qt::QueuedConnection
3.利用Signal/Slot删除对象本身:
解决:采用Signal/Slot并且连接方式采用 Qt::QueuedConnection,这时在另一个对象中就可以删除对象本身了。用qss增加每个菜单项的高度,在用StyleSheet美化QMenu时,如何指定菜单项与快捷键的间距?
- QMenu::item{
- border:1pxsolidtransparent;
- margin:0px2px0px2px;
- padding:2px9px2px30px;//TopRightBottomLeft(用这种方式能增加menu中每一行的高度,这就使得在小的触摸屏上进行菜单项的选择的时候,不会那么困难了)
- }
- QGraphicsView无法接收到一些widget传过来的消息的处理方法:
- boolevent(QEvent*event)
- {
- if(event->type()==QEvent::MouseButtonPress)
- {
- QMouseEvent*ke=static_cast(event);
- qDebug()<<"BaseMousePressed...."QWidget::event(event);//关键语句
- returntrue;
- }
- returnQGraphicsView::event(event);
- };
基于Signal/Slot机制的接口写法:
- MyInterface:publicQObject{//QObject子类都可以
- Q_OBJECT
- public:
- explicitMyInterface(QObject*parent=0);//防止出现异常显式
- virtual~MyInterface(){}
- virtualvoidmyFunc(inti)=0;//纯虚函数
- //....
- signals:
- voidmySignal(inti);
- //....
- publicslots:
- virtualvoidmySlot(){//donothing};
- private:
- //...
- }
- MyImpl:publicMyInterface{
- Q_OBJECT
- public:
- MyImpl(parent=0);
- virtualMyImpl(){};
- virtualvoidmyFunc(inti){emitmySignal();};
- publicslots:
- voidmySlot(){//mycode};
- }
- MyImpl2:publicMyInterface{
- Q_OBJECT
- public:
- MyImpl(parent=0);
- virtualMyImpl(){};
- virtualvoidmyFunc(inti){emitmySignal();};
- publicslots:
- voidmySlot(){//mycode};
- }
- IMyInterface&createMyImpl1(parent=0)
- {
- return*newMyImpl1(parent);
- }
- IMyInterface&createMyImpl2(parent=0)
- {
- return*newMyImpl2(parent);
- }
析构函数 前一定要加 virtual。
小结:关于Qt 编程点滴的介绍介绍完了,通过Qt 编程点滴介绍,也给自己提高了编程过程中需要注意的细节问题,由于本话题是一节一节为大家展现的,所以更多内容,请看编辑推荐。希望这些内容对你有所帮助!
转载请说明出处
知优网 » Qt 编程点滴 初学者必看 (10)(qt编程指南)
知优网 » Qt 编程点滴 初学者必看 (10)(qt编程指南)