停靠窗口QDockWidget类也是应用程序中经常用到的,设置停靠窗口的一般流程如下。
(1)创建一个QDockWidget对象的停靠窗体。
(2)设置此停靠窗体的属性,通常调用setFeatures()及setAllowedAreas()两种方法。
(3)新建一个要插入停靠窗体的控件,常用的有QListWidget和QTextEdit。
(4)将控件插入停靠窗体,调用QDockWidget的setWidget()方法。
(5)使用addDockWidget()方法在MainWindow中加入此停靠窗体。
DockWindows.h
| #ifndef DOCKWINDOWS_DOCKWINDOWS_H |
| #define DOCKWINDOWS_DOCKWINDOWS_H |
| |
| #include <QMainWindow> |
| class DockWindows: public QMainWindow{ |
| |
| Q_OBJECT |
| public: |
| explicit DockWindows(QWidget*parent=0); |
| ~DockWindows(); |
| }; |
| |
| #endif |
| |
| ### DockWindows.cpp |
| |
| #include "DockWindows.h" |
| #include <QTextEdit> |
| #include <QDockWidget> |
| DockWindows::DockWindows(QWidget *parent): QMainWindow(parent) { |
| setWindowTitle(tr("DockWindows")); |
| auto *te = new QTextEdit(this); |
| te->setText(tr("Main Window")); |
| te->setAlignment(Qt::AlignCenter); |
| setCentralWidget(te); |
| |
| auto *dock = new QDockWidget(tr("DockWindow1"), this); |
| |
| dock->setFeatures(QDockWidget::DockWidgetMovable); |
| dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); |
| auto *te1 = new QTextEdit; |
| te1->setText(tr("Window1 ,the dock widget can be moved between docks by the user")); |
| dock->setWidget(te1); |
| addDockWidget(Qt::RightDockWidgetArea,dock); |
| |
| dock = new QDockWidget(tr("DockWindow2"), this); |
| dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); |
| auto *te2 = new QTextEdit(tr("Window2 The dock widget can be detached from the main window,and floated as an independent window,and can be closed")); |
| dock->setWidget(te2); |
| addDockWidget(Qt::RightDockWidgetArea,dock); |
| |
| dock = new QDockWidget(tr("DockWindow3"),this); |
| dock->setFeatures(QDockWidget::AllDockWidgetFeatures); |
| auto *te3 = new QTextEdit(); |
| te3->setText(tr("Window3,the dock widget can be cllose moved and floated")); |
| dock->setWidget(te3); |
| addDockWidget(Qt::RightDockWidgetArea,dock); |
| |
| } |
| |
| DockWindows::~DockWindows() { |
| |
| } |
| |
| |
main.cpp
| #include <QApplication> |
| #include <QPushButton> |
| #include "DockWindows.h" |
| int main(int argc, char *argv[]) { |
| QApplication a(argc, argv); |
| DockWindows d; |
| d.show(); |
| return QApplication::exec(); |
| } |
| |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!