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 编程点滴介绍,也给自己提高了编程过程中需要注意的细节问题,由于本话题是一节一节为大家展现的,所以更多内容,请看编辑推荐。希望这些内容对你有所帮助!