隐藏QMainWindow右下角状态栏上的拖动控件

隐藏前的界面

隐藏前的界面

隐藏

配置状态栏的SizeGripEnabled属性为false

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->statusBar()->setSizeGripEnabled(false);//隐藏状态栏上的拖动图标
}

隐藏后的界面

在这里插入图片描述

扩展

QSizeGrip(QWidget *parent)
The QSizeGrip class provides a resize handle for resizing top-level windows.(译:QSizeGrip类提供了一个调整顶级窗口大小的句柄。)

隐藏的拖动图标本质是一个QSizeGrip的对象,在QStatusBar类中包含一个该对象,所有在QMainwindow窗口上会呈现出来。由于QSizeGrip继承自QWidget,所有在界面需要的地方,可以自行添加该控件实现对主窗口大小的调整。

### 实现Qt窗口最大最小化关闭按钮右上角对齐 为了使最大化、最小化和关闭按钮位于窗口的右上角并保持整齐排列,在Qt中可以通过自定义标题栏来实现这一目标。具体方法涉及移除默认窗口框架,创建自定义控件用于表示各个操作按钮,并处理相应的鼠标事件。 #### 移除默认窗口框架 首先,需要去除原有的窗口装饰以便能够自由设计顶部区域内的组件位置: ```cpp this->setWindowFlags(Qt::FramelessWindowHint | windowFlags()); ``` 此代码片段会取消掉标准外观中的边框与标题条部分[^2]。 #### 创建自定义按钮 接着,在界面上添加三个QPushButton实例作为新的控制元素——分别对应着“关闭”、“最小化”以及“最大化”。这些按钮应当被放置在一个水平布局容器内(如QHBoxLayout),并且调整其样式使其看起来像是传统操作系统所提供的交互图标。对于每个按钮而言,还需要连接信号槽机制以响应用户的点击动作;例如,“closeButton”的clicked()信号应该链接到QWidget类下的close()槽函数上去完成退出程序的功能。 #### 设置按钮的位置 为了让这三个按钮能固定显示在屏幕最右侧顶端处,则可以在构造函数里指定它们相对于父级部件的具体坐标点或者是利用绝对定位方式将其安排好相对距离关系。另外一种做法就是借助于图形界面编辑工具(Designer)来进行直观拖拽摆放工作。 #### 处理窗口状态变化逻辑 当用户触发了某个特定的操作之后(比如单击了最大化按钮),则要相应地改变当前Widget的状态属性值(normal/maximized)。这通常涉及到监听`changeEvent()`消息循环里的`QEvent::WindowStateChange`类型通知,并据此更新内部变量记录最新的尺寸模式。与此同时,也别忘了同步刷新UI层面上的表现形式,像修改文字标签或是图片资源等细节之处都需考虑到用户体验方面的要求。 最后附带一段简单的C++源码示范上述要点的实际应用情况: ```cpp // mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); protected: void changeEvent(QEvent* event) override; private slots: void on_minimizeButton_clicked(); void on_maximizeRestoreButton_clicked(); void on_closeButton_clicked(); private: QPushButton* closeButton; QPushButton* minimizeButton; QPushButton* maximizeRestoreButton; }; #endif // MAINWINDOW_H // mainwindow.cpp #include "mainwindow.h" #include <QVBoxLayout> #include <QPushButton> #include <QMouseEvent> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), isMaximized(false){ QVBoxLayout *layout = new QVBoxLayout(this); QHBoxLayout *titleBarLayout = new QHBoxLayout(); // Create buttons and add them to the title bar layout. minimizeButton = new QPushButton("—", this); maximizeRestoreButton = new QPushButton("□", this); closeButton = new QPushButton("×", this); connect(minimizeButton, &QPushButton::clicked, this, &MainWindow::on_minimizeButton_clicked); connect(maximizeRestoreButton, &QPushButton::clicked, this, &MainWindow::on_maximizeRestoreButton_clicked); connect(closeButton, &QPushButton::clicked, this, &MainWindow::on_closeButton_clicked); titleBarLayout->addStretch(1); // Pushes buttons to the right side of the layout titleBarLayout->addWidget(minimizeButton); titleBarLayout->addWidget(maximizeRestoreButton); titleBarLayout->addWidget(closeButton); QWidget *centralWidget = new QWidget(this); centralWidget->setLayout(layout); setCentralWidget(centralWidget); } void MainWindow::changeEvent(QEvent *event){ if (event->type() == QEvent::WindowStateChange){ if(isMaximized()){ maximizeRestoreButton->setText("/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值