Qt 編程點(diǎn)滴 初學(xué)者必看 (10)
Qt 編程繼續(xù)為大家講解,還是接著文章 Qt 編程點(diǎn)滴 初學(xué)者必看 (9),繼續(xù)介紹,說(shuō)編程那些細(xì)節(jié)。由于本話題是一節(jié)一節(jié)為大家介紹的,所以更多內(nèi)容請(qǐng)看末尾編輯推薦。
qss 收集:Setting QObject properties
- From 4.3 and above, any designable Q_PROPERTY can be set using the qproperty- syntax.
 
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.
 
類(lèi)成員函數(shù)里定義的臨時(shí)指針不能做為參數(shù)傳遞;函數(shù)里取得的指針無(wú)法返回到外面;
- groupmanage.h:
 - class GroupManage
 - {
 - private:
 - /// 組在線數(shù)據(jù)
 - /** . */
 - class OnLineData
 - {
 - public:
 - IGPSNav* iGpsNav; /**< GPS聊天接口 */
 - int groupId; /**< 組ID */
 - };
 - QList onLineList; /**< 組在線列表 */
 - private:
 - ///查找GPS聊天接口
 - /**
 - @param groupId 組id
 - @param gpsNav(返回值) 只有在查到時(shí)才返回指針
 - @return true:查找到 false: 未查找到
 - */
 - bool findGpsNav(int groupId,unsigned int & gpsNav); //正確的寫(xiě)法:返回對(duì)象指針地址
 - bool findGpsNav(int groupId,IGPSNav* iGpsNav);//如果是這樣寫(xiě)法請(qǐng)注意調(diào)用方法
 - 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:"<
 - /*--下面的寫(xiě)法指針?lè)祷夭涣?
 - IGPSNav* iGpsNav; //把此句申明放在類(lèi)的private:下就可以解決問(wèn)題
 - bool ok;
 - ok = findGpsNav(groupId,iGpsNav);
 - _EDEBUG("iGpsNav:"< */
 - }
 - QPushButton{
 - background-color: rgba( 255, 255, 255, 50% );
 - }
 
透明度50%
1.問(wèn)題1: connect函數(shù)不存在,對(duì)象沒(méi)有從QObject繼承.
2.問(wèn)題2
采用Event方法連接,在對(duì)象方法里啟動(dòng)定時(shí)器,在運(yùn)行時(shí)發(fā)生:
- QT timers cannot be started from another thread
 
解決:采用Signal/Slot并且連接方式采用 Qt::QueuedConnection
 
3.利用Signal/Slot刪除對(duì)象本身:
解決:采用Signal/Slot并且連接方式采用 Qt::QueuedConnection,這時(shí)在另一個(gè)對(duì)象中就可以刪除對(duì)象本身了。用qss增加每個(gè)菜單項(xiàng)的高度,在用StyleSheet美化QMenu時(shí),如何指定菜單項(xiàng)與快捷鍵的間距?
- QMenu::item {
 - border: 1px solid transparent;
 - margin: 0px 2px 0px 2px;
 - padding: 2px 9px 2px 30px; // Top Right Bottom Left(用這種方式能增加menu中每一行的高度,這就使得在小的觸摸屏上進(jìn)行菜單項(xiàng)的選擇的時(shí)候,不會(huì)那么困難了)
 - }
 - QGraphicsView無(wú)法接收到一些widget傳過(guò)來(lái)的消息的處理方法:
 - bool event ( QEvent * event )
 - {
 - if(event->type()==QEvent::MouseButtonPress)
 - {
 - QMouseEvent *ke = static_cast(event);
 - qDebug()<<"Base Mouse Pressed...." QWidget::event(event); //關(guān)鍵語(yǔ)句
 - return true;
 - }
 - return QGraphicsView::event(event);
 - };
 
基于Signal/Slot機(jī)制的接口寫(xiě)法:
- MyInterface: public QObject{ //QObject子類(lèi)都可以
 - Q_OBJECT
 - public:
 - explicit MyInterface(QObject* parent = 0); //防止出現(xiàn)異常 顯式
 - virtual ~MyInterface(){}
 - virtual void myFunc(int i) = 0; //純虛函數(shù)
 - //....
 - 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);
 - }
 
析構(gòu)函數(shù) 前一定要加 virtual。
小結(jié):關(guān)于Qt 編程點(diǎn)滴的介紹介紹完了,通過(guò)Qt 編程點(diǎn)滴介紹,也給自己提高了編程過(guò)程中需要注意的細(xì)節(jié)問(wèn)題,由于本話題是一節(jié)一節(jié)為大家展現(xiàn)的,所以更多內(nèi)容,請(qǐng)看編輯推薦。希望這些內(nèi)容對(duì)你有所幫助!















 
 
 
 
 
 
 