类型为QDockWidget的对象表示停靠组件,它们是环绕在主窗口中心组件周围,停靠于主窗口边框或其它停靠组件边缘的小组件。
停靠组件由两个重要的属性,一个是QDockWidget::DockWidgetFeatures类型的features属性,表示停靠特性,由下表中的常量通过位或组合:
QDockWidget::DockWidgetFeature | 停靠特性 |
---|---|
DockWidgetClosable | 可关闭 |
DockWidgetMovable | 可移动 |
DockWidgetFloatable | 可悬浮 |
AllDockWidgetFeatures | 可关闭、移动、悬浮 |
NoDockWidgetFeatures | 不可关闭、移动、悬浮 |
DockWidgetVerticalTitleBar | 带垂直标题栏 |
另一个是Qt::DockWidgetAreas类型的allowedAreas属性,表示可停靠区域,由下表中的常量通过位或组合:
Qt::DockWidgetArea | 可停靠区域 |
---|---|
LeftDockWidgetArea | 左侧 |
RightDockWidgetArea | 右侧 |
TopDockWidgetArea | 顶部 |
BottomDockWidgetArea | 底部 |
AllDockWidgetAreas | 哪都可以停靠 |
NoDockWidgetArea | 哪都不能停靠 |
通过QtCreator,在C:\Users\Minwei\Projects\Qt路径下,创建名为Dock的项目。
C:\Users\Minwei\Projects\Qt\Dock\dockwindow.ui:
xxxxxxxxxx
2281
2<ui version="4.0">
3 <class>DockWindow</class>
4 <widget class="QMainWindow" name="DockWindow">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>800</width>
10 <height>600</height>
11 </rect>
12 </property>
13 <property name="windowTitle">
14 <string>停靠</string>
15 </property>
16 <widget class="QWidget" name="m_central">
17 <layout class="QHBoxLayout" name="m_layoutCentral">
18 <property name="leftMargin">
19 <number>0</number>
20 </property>
21 <property name="topMargin">
22 <number>0</number>
23 </property>
24 <property name="rightMargin">
25 <number>0</number>
26 </property>
27 <property name="bottomMargin">
28 <number>0</number>
29 </property>
30 <item>
31 <widget class="QTextEdit" name="m_editCentral">
32 <property name="frameShape">
33 <enum>QFrame::WinPanel</enum>
34 </property>
35 </widget>
36 </item>
37 </layout>
38 </widget>
39 <widget class="QDockWidget" name="m_dockTop">
40 <property name="windowTitle">
41 <string>顶部</string>
42 </property>
43 <attribute name="dockWidgetArea">
44 <number>4</number>
45 </attribute>
46 <widget class="QWidget" name="m_contentsTop">
47 <layout class="QHBoxLayout" name="m_layoutTop">
48 <item>
49 <widget class="QLabel" name="m_labTop">
50 <property name="text">
51 <string>顶部停靠组件</string>
52 </property>
53 <property name="alignment">
54 <set>Qt::AlignCenter</set>
55 </property>
56 </widget>
57 </item>
58 </layout>
59 </widget>
60 </widget>
61 <widget class="QDockWidget" name="m_dockBottom">
62 <property name="windowTitle">
63 <string>底部</string>
64 </property>
65 <attribute name="dockWidgetArea">
66 <number>8</number>
67 </attribute>
68 <widget class="QWidget" name="m_contentsBottom">
69 <layout class="QHBoxLayout" name="m_layoutBottom">
70 <item>
71 <widget class="QLabel" name="m_labBottom">
72 <property name="text">
73 <string>底部停靠组件</string>
74 </property>
75 <property name="alignment">
76 <set>Qt::AlignCenter</set>
77 </property>
78 </widget>
79 </item>
80 </layout>
81 </widget>
82 </widget>
83 <widget class="QDockWidget" name="m_dockLeft">
84 <property name="windowTitle">
85 <string>左侧</string>
86 </property>
87 <attribute name="dockWidgetArea">
88 <number>1</number>
89 </attribute>
90 <widget class="QWidget" name="m_contentsLeft">
91 <layout class="QHBoxLayout" name="m_layoutLeft">
92 <item>
93 <widget class="QLabel" name="m_labLeft">
94 <property name="text">
95 <string>左侧停靠组件</string>
96 </property>
97 <property name="alignment">
98 <set>Qt::AlignCenter</set>
99 </property>
100 </widget>
101 </item>
102 </layout>
103 </widget>
104 </widget>
105 <widget class="QDockWidget" name="m_dockUpperRight">
106 <property name="windowTitle">
107 <string>右上</string>
108 </property>
109 <attribute name="dockWidgetArea">
110 <number>2</number>
111 </attribute>
112 <widget class="QWidget" name="m_contentsUpperRight">
113 <layout class="QVBoxLayout" name="m_layoutUpperRight">
114 <item>
115 <spacer name="m_spacerStart">
116 <property name="orientation">
117 <enum>Qt::Vertical</enum>
118 </property>
119 <property name="sizeHint" stdset="0">
120 <size>
121 <width>20</width>
122 <height>55</height>
123 </size>
124 </property>
125 </spacer>
126 </item>
127 <item>
128 <widget class="QPushButton" name="m_btnStart">
129 <property name="text">
130 <string>开始</string>
131 </property>
132 </widget>
133 </item>
134 <item>
135 <widget class="QPushButton" name="m_btnStop">
136 <property name="text">
137 <string>停止</string>
138 </property>
139 </widget>
140 </item>
141 <item>
142 <spacer name="m_spacerStop">
143 <property name="orientation">
144 <enum>Qt::Vertical</enum>
145 </property>
146 <property name="sizeHint" stdset="0">
147 <size>
148 <width>20</width>
149 <height>54</height>
150 </size>
151 </property>
152 </spacer>
153 </item>
154 </layout>
155 </widget>
156 </widget>
157 <widget class="QDockWidget" name="m_dockLowerRight">
158 <property name="windowTitle">
159 <string>右下</string>
160 </property>
161 <attribute name="dockWidgetArea">
162 <number>2</number>
163 </attribute>
164 <widget class="QWidget" name="m_contentsLowerRight">
165 <layout class="QVBoxLayout" name="m_layoutLowerRight">
166 <item>
167 <spacer name="m_spacerCpp">
168 <property name="orientation">
169 <enum>Qt::Vertical</enum>
170 </property>
171 <property name="sizeHint" stdset="0">
172 <size>
173 <width>20</width>
174 <height>51</height>
175 </size>
176 </property>
177 </spacer>
178 </item>
179 <item>
180 <widget class="QCheckBox" name="m_checkCpp">
181 <property name="text">
182 <string>C++</string>
183 </property>
184 <property name="checked">
185 <bool>true</bool>
186 </property>
187 </widget>
188 </item>
189 <item>
190 <widget class="QCheckBox" name="m_checkJava">
191 <property name="text">
192 <string>Java</string>
193 </property>
194 <property name="checked">
195 <bool>true</bool>
196 </property>
197 </widget>
198 </item>
199 <item>
200 <widget class="QCheckBox" name="m_checkPython">
201 <property name="text">
202 <string>Python</string>
203 </property>
204 <property name="checked">
205 <bool>true</bool>
206 </property>
207 </widget>
208 </item>
209 <item>
210 <spacer name="m_spacerPython">
211 <property name="orientation">
212 <enum>Qt::Vertical</enum>
213 </property>
214 <property name="sizeHint" stdset="0">
215 <size>
216 <width>20</width>
217 <height>50</height>
218 </size>
219 </property>
220 </spacer>
221 </item>
222 </layout>
223 </widget>
224 </widget>
225 </widget>
226 <resources/>
227 <connections/>
228</ui>
运行效果如图所示: