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 添加到窗口,并在布局中设置其位置,使其位于窗口的顶部。

#include "CustomTitleBar.h" // 确保包含 CustomTitleBar 的头文件

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QHBoxLayout *setHLayout = new QHBoxLayout();
    
    // 设置 verticalLayout 的边距
    ui->verticalLayout->setContentsMargins(0, 0, 0, 0);

    QWidget* verticalContainer = new QWidget();
    verticalContainer->setContentsMargins(0, 0, 0, 0);
    verticalContainer->setLayout(ui->verticalLayout);

    // 创建中央小部件
    QWidget* centralWidget = new QWidget(this);
    centralWidget->setContentsMargins(0, 0, 0, 0);
    
    // 将水平布局应用到中央小部件
    centralWidget->setLayout(setHLayout);
    
    setCentralWidget(centralWidget);

    m_ViewProgress = new ViewProgress();
    
    SetUIstyl();
    
    setWindowTitle("考试系统");
    
    bpaperStarted = false;
    
    setWindowFlags(Qt::FramelessWindowHint | windowFlags());
    
    QObject::connect(tcpServer::getInstance(), SIGNAL(UpdateTreeUI()), m_ViewProgress, SLOT(soltTreeUpdateUI()));

	// 初始化 CustomTitleBar 并将其添加到主窗口
	titleBar = new CustomTitleBar(this); 
	setHLayout->addWidget(titleBar); // 添加到水平布局中

	// 添加其他组件等
}

2. 实现 CustomTitleBar 类

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

#include <QMouseEvent>
#include <QWidget>

class CustomTitleBar : public QWidget {
	Q_OBJECT

public:
	explicit CustomTitleBar(QWidget *parent = nullptr) 
		: QWidget(parent), dragging(false) {
		setStyleSheet("background-color: rgb(221, 222, 226);");	
	}

protected:
	void mousePressEvent(QMouseEvent *event) override {
		if (event->button() == Qt::LeftButton) {
			dragging = true;
			dragPosition = event->globalPos() - parent()->frameGeometry().topLeft();
			event->accept();
		}
	}

	void mouseMoveEvent(QMouseEvent *event) override {
        if (dragging && (event->buttons() & Qt::LeftButton)) {
            move(event->globalPos() - dragPosition);
            event->accept();
        }
	}

	void mouseReleaseEvent(QMouseEvent *event) override {
        if (event->button() == Qt::LeftButton) {
            dragging = false;
            event->accept();
        }
	}

private:
	bool dragging;
	QPoint dragPosition;
};

总结:

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?