Qt 編程點(diǎn)滴 初學(xué)者必看 (10)
Qt 編程繼續(xù)為大家講解,還是接著文章 Qt 編程點(diǎn)滴 初學(xué)者必看 (9),繼續(xù)介紹,說編程那些細(xì)節(jié)。由于本話題是一節(jié)一節(jié)為大家介紹的,所以更多內(nèi)容請看末尾編輯推薦。
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.
類成員函數(shù)里定義的臨時指針不能做為參數(shù)傳遞;函數(shù)里取得的指針無法返回到外面;
- 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(返回值) 只有在查到時才返回指針
- @return true:查找到 false: 未查找到
- */
- bool findGpsNav(int groupId,unsigned int & gpsNav); //正確的寫法:返回對象指針地址
- bool findGpsNav(int groupId,IGPSNav* iGpsNav);//如果是這樣寫法請注意調(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:"<
- /*--下面的寫法指針返回不了
- IGPSNav* iGpsNav; //把此句申明放在類的private:下就可以解決問題
- bool ok;
- ok = findGpsNav(groupId,iGpsNav);
- _EDEBUG("iGpsNav:"< */
- }
- QPushButton{
- background-color: rgba( 255, 255, 255, 50% );
- }
透明度50%
1.問題1: connect函數(shù)不存在,對象沒有從QObject繼承.
2.問題2
采用Event方法連接,在對象方法里啟動定時器,在運(yùn)行時發(fā)生:
- QT timers cannot be started from another thread
解決:采用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中每一行的高度,這就使得在小的觸摸屏上進(jìn)行菜單項的選擇的時候,不會那么困難了)
- }
- QGraphicsView無法接收到一些widget傳過來的消息的處理方法:
- bool event ( QEvent * event )
- {
- if(event->type()==QEvent::MouseButtonPress)
- {
- QMouseEvent *ke = static_cast(event);
- qDebug()<<"Base Mouse Pressed...." QWidget::event(event); //關(guān)鍵語句
- return true;
- }
- return QGraphicsView::event(event);
- };
基于Signal/Slot機(jī)制的接口寫法:
- MyInterface: public QObject{ //QObject子類都可以
- 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)滴的介紹介紹完了,通過Qt 編程點(diǎn)滴介紹,也給自己提高了編程過程中需要注意的細(xì)節(jié)問題,由于本話題是一節(jié)一節(jié)為大家展現(xiàn)的,所以更多內(nèi)容,請看編輯推薦。希望這些內(nèi)容對你有所幫助!