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

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

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

qss 收集:Setting QObject properties

From 4.3 and above, any designable Q_PROPERTY can be set using the qproperty- syntax.  
  • 1.

For example,

MyLabel { qproperty-pixmap: url(pixmap.png); }  
 MyGroupBox { qproperty-titleColor: rgb(100, 200, 100); }  
 QPushButton { qproperty-iconSize: 20px 20px; }  
If the property references an enum declared with Q_ENUMS, you should reference its constants by name, i.e., not their numeric value. 
  • 1.
  • 2.
  • 3.
  • 4.

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

groupmanage.h:  
class GroupManage  
{  
private:  
    /// 组在线数据  
    /** . */  
    class OnLineData  
    {  
    public:  
        IGPSNav* iGpsNav; /**< GPS聊天接口 */  
        int groupId;  /**< 组ID */  
    };  
    QList onLineList; /**< 组在线列表 */  
private:  
    ///查找GPS聊天接口  
    /**  
      @param groupId 组id  
      @param gpsNav(返回值) 只有在查到时才返回指针  
      @return true:查找到 false: 未查找到  
    */  
    bool findGpsNav(int groupId,unsigned int & gpsNav);  //正确的写法:返回对象指针地址    
      
    bool findGpsNav(int groupId,IGPSNav* iGpsNav);//如果是这样写法请注意调用方法  
    void test();  
};  
groupmanage.cpp:  
//查找GPS聊天接口  
bool GroupManage::findGpsNav(int groupId,unsigned int & gpsNav)  
{  
    bool ok = false;  
    for (int i=0; i < onLineList.count() ; i++)  
    {  
        OnLineData* onLineData = onLineList.at(i);  
        if ( onLineData->groupId == groupId )  
        {  
            ok = true;  
            gpsNav = (unsigned int)(onLineData->iGpsNav);  
 
            break;  
        }  
    }  
    _EDEBUG("findGpsNav gpsNav="<     return ok;  
}   
bool GroupManage::findGpsNav(int groupId,IGPSNav* iGpsNav)  
{  
    bool ok = false;  
    for (int i=0; i < onLineList.count() ; i++)  
    {  
        OnLineData* onLineData = onLineList.at(i);  
        if ( onLineData->groupId == groupId )  
        {  
            ok = true;  
            iGpsNav = onLineData->iGpsNav;  
 
            break;  
        }  
    }  
    _EDEBUG("findGpsNav gpsNav="<     return ok;  
}  
void GroupManage::test()  
{  
    IGPSNav* iGpsNav;  
    unsigned int iGpsNavInt;  
    bool ok;  
    ok = findGpsNav(groupId,iGpsNavInt);  
    iGpsNav = (IGPSNav*)iGpsNavInt;  
    _EDEBUG("iGpsNav:"<       
    /*--下面的写法指针返回不了  
    IGPSNav* iGpsNav; //把此句申明放在类的private:下就可以解决问题  
    bool ok;  
    ok = findGpsNav(groupId,iGpsNav);   
     _EDEBUG("iGpsNav:"<     */  
}  
QPushButton{  
    background-color: rgba( 255, 255, 255, 50% );  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.

透明度50%

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

2.问題2

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

QT timers cannot be started from another thread 
  • 1.

解决:采用Signal/Slot并且连接方式采用 Qt::QueuedConnection
 
3.利用Signal/Slot删除对象本身:

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

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

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

MyInterface: public QObject{  //QObject子类都可以  
    Q_OBJECT  
public:  
    explicit MyInterface(QObject* parent = 0);  //防止出现异常 显式  
    virtual ~MyInterface(){}  
    virtual void myFunc(int i) = 0; //纯虚函数  
    //....  
signals:  
    void mySignal(int i);  
    //....  
public slots:  
    virtual void mySlot(){//do nothing};  
private:  
    //...  
}  
MyImpl:public MyInterface{  
    Q_OBJECT  
public:  
    MyImpl(parent = 0);  
    virtual MyImpl(){};  
    virtual void myFunc(int i){emit mySignal();};  
public slots:  
    void mySlot(){//my code};  
}  
MyImpl2:public MyInterface{  
    Q_OBJECT  
public:  
    MyImpl(parent = 0);  
    virtual MyImpl(){};  
    virtual void myFunc(int i){emit mySignal();};  
public slots:  
    void mySlot(){//my code};  
}  
IMyInterface& createMyImpl1(parent = 0)  
{  
    return * new MyImpl1(parent);  
}  
IMyInterface& createMyImpl2(parent = 0)  
{  
    return * new MyImpl2(parent);  
}  
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.

析构函数 前一定要加 virtual。

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

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-17 15:19:28

Qt

2011-06-17 15:25:18

Qt

2011-06-17 15:37:42

Qt

2011-06-17 14:54:31

Qt

2011-06-17 14:41:56

Qt

2011-06-17 14:29:55

Qt

2011-06-17 15:32:28

Qt

2011-06-17 14:12:32

Qt

2011-06-17 15:06:14

Qt

2011-06-27 14:56:46

Qt Designer

2011-09-16 09:38:19

Emacs

2011-09-08 10:38:37

Widget

2013-04-23 10:51:15

Linux压缩

2011-08-24 17:05:01

Lua

2009-11-17 15:33:26

PHP数组元素

2009-10-22 16:46:03

VB.NET初步知识

2011-07-26 17:55:16

iPhone Runtime

2011-08-04 18:01:07

IOS Cocoa Touc

2009-10-29 09:19:59

ADO.NET

2011-08-30 11:23:16

无线网卡怎么用无线网卡无线上网卡
点赞
收藏

51CTO技术栈公众号