ZBLOG

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); QHBoxLayout *setHLayout = new QHBoxLayout(); // 设置 verticalLayout 的边距 ui->verticalLayout->setCont...

要使 CustomTitleBar 能够在 MainWindow 顶部拖动整个窗口,你需要确保在 MainWindow 中正确集成 CustomTitleBar,并重写必要的鼠标事件以实现拖动功能。以下是详细的步骤和示例代码。

1. 修改 MainWindow 的构造函数

首先,确保在构造函数中将 CustomTitleBar 作为一个 QWidget 添加到窗口,并在布局中设置其位置,使其位于窗口的顶部。

  1. #include "CustomTitleBar.h" // 确保包含 CustomTitleBar 的头文件
  2. MainWindow::MainWindow(QWidget *parent)
  3. : QMainWindow(parent)
  4. , ui(new Ui::MainWindow)
  5. {
  6. ui->setupUi(this);
  7. QHBoxLayout *setHLayout = new QHBoxLayout();
  8. // 设置 verticalLayout 的边距
  9. ui->verticalLayout->setContentsMargins(0, 0, 0, 0);
  10. QWidget* verticalContainer = new QWidget();
  11. verticalContainer->setContentsMargins(0, 0, 0, 0);
  12. verticalContainer->setLayout(ui->verticalLayout);
  13. // 创建中央小部件
  14. QWidget* centralWidget = new QWidget(this);
  15. centralWidget->setContentsMargins(0, 0, 0, 0);
  16. // 将水平布局应用到中央小部件
  17. centralWidget->setLayout(setHLayout);
  18. setCentralWidget(centralWidget);
  19. m_ViewProgress = new ViewProgress();
  20. SetUIstyl();
  21. setWindowTitle("考试系统");
  22. bpaperStarted = false;
  23. setWindowFlags(Qt::FramelessWindowHint | windowFlags());
  24. QObject::connect(tcpServer::getInstance(), SIGNAL(UpdateTreeUI()), m_ViewProgress, SLOT(soltTreeUpdateUI()));
  25. // 初始化 CustomTitleBar 并将其添加到主窗口
  26. titleBar = new CustomTitleBar(this);
  27. setHLayout->addWidget(titleBar); // 添加到水平布局中
  28. // 添加其他组件等
  29. }

2. 实现 CustomTitleBar 类

如之前所述,你需要实现鼠标事件以允许拖动。以下是 CustomTitleBar 类的实现:

  1. #include <QMouseEvent>
  2. #include <QWidget>
  3. class CustomTitleBar : public QWidget {
  4. Q_OBJECT
  5. public:
  6. explicit CustomTitleBar(QWidget *parent = nullptr)
  7. : QWidget(parent), dragging(false) {
  8. setStyleSheet("background-color: rgb(221, 222, 226);");
  9. }
  10. protected:
  11. void mousePressEvent(QMouseEvent *event) override {
  12. if (event->button() == Qt::LeftButton) {
  13. dragging = true;
  14. dragPosition = event->globalPos() - parent()->frameGeometry().topLeft();
  15. event->accept();
  16. }
  17. }
  18. void mouseMoveEvent(QMouseEvent *event) override {
  19. if (dragging && (event->buttons() & Qt::LeftButton)) {
  20. move(event->globalPos() - dragPosition);
  21. event->accept();
  22. }
  23. }
  24. void mouseReleaseEvent(QMouseEvent *event) override {
  25. if (event->button() == Qt::LeftButton) {
  26. dragging = false;
  27. event->accept();
  28. }
  29. }
  30. private:
  31. bool dragging;
  32. QPoint dragPosition;
  33. };

总结:

  1. MainWindow 的构造函数中实例化并添加 CustomTitleBar 到布局中。
  2. CustomTitleBar 中处理鼠标事件,以便通过按住鼠标左键来拖动窗口。

这样,在运行程序时,点击并按住自定义标题栏即可拖动整个主窗口。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22256

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?