Bootstrap

Windows图形界面(GUI)-QT-C/C++ - QT 窗口属性

目录

标题栏

基本概念

设置窗口标题

隐藏标题栏

UI编辑器

窗口关闭事件

窗口大小调整事件

窗口移动事件

自定义标题栏

菜单栏

基本概念

设置菜单栏(API)

设置菜单栏(UI)

工具栏

基本概念

设置工具栏(API)

设置工具栏(UI)

状态栏

基本概念

设置状态栏(API)


标题栏

  • 基本概念

    • 标题栏是窗口管理系统(如 Windows、macOS、Linux 等)的一部分,用于显示窗口的标题和控制按钮(如最小化、最大化和关闭按钮)。在 Qt 中,标题栏是由窗口管理系统处理的,但我们可以通过 Qt 提供的方法来设置标题栏的内容和行为。
  • 设置窗口标题

    • 使用 QWidget 或其子类(如 QMainWindow)的 setWindowTitle() 方法可以设置窗口的标题。
  • 隐藏标题栏

    • 可以通过设置窗口标志(Window Flags)来隐藏窗口的标题栏window.setWindowFlags(Qt::FramelessWindowHint);
  • UI编辑器

    • 选择主窗口(如 QMainWindowQWidget)。

    • 在右侧的属性编辑器中,找到 windowTitle 属性。

    • 设置 windowTitle 属性为您希望的标题文本。

  • 窗口关闭事件

    • 处理窗口关闭事件可以覆盖 closeEvent 方法
  • 窗口大小调整事件

    • 处理窗口大小调整事件可以覆盖 resizeEvent 方法
  • 窗口移动事件

    • 处理窗口移动事件可以覆盖 moveEvent 方法
  • 自定义标题栏

    • 在某些情况下,您可能希望完全自定义标题栏的外观和行为。可以通过隐藏默认的标题栏并创建自定义的标题栏来实现。
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    //窗口标题
    this->setWindowTitle("0xCC");

    //隐藏标题
    //this->setWindowFlags(Qt::FramelessWindowHint);

}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public:
    //窗口关闭
    void closeEvent(QCloseEvent *event) override
    {
        if(QMessageBox::question(this, "提示", "是否关闭窗口") == QMessageBox::Yes)
        {
            this->close();
        }
    }

    //窗口大小
    //virtual void resizeEvent(QResizeEvent *event)
    // const QSize &size() const

    //窗口移动
    //virtual void moveEvent(QMoveEvent *event)
    //const QPoint &pos() const

private:
    Ui::MainWindow *ui;
};
  • 菜单栏

  • 基本概念

    • 菜单栏是应用程序窗口的一部分,包含一个或多个菜单,每个菜单又包含多个菜单项。菜单项可以是命令、子菜单或其他功能,如复选框和单选按钮。菜单栏在 QMainWindow 中默认提供,并可以通过编程或使用 Qt Designer 进行设置。
  • 设置菜单栏(API)

    • 在 Qt 中,可以通过 QMenuBar 类来创建和管理菜单栏。

    • 菜单栏 - QMenuBar

    • 菜单项 - QMenu

    • 子菜单 - QAction

    MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    
    //创建菜单栏
    QMenuBar* menuBar = new QMenuBar(this);
    
    //创建菜单项
    QMenu* fileMenu = new QMenu("文件", this);
    QMenu* EditMenu = new QMenu("编辑", this);
    
    //关联菜单项
    menuBar->addMenu(fileMenu);
    menuBar->addMenu(EditMenu);
    
    //添加子菜单
    QAction* openAction = new QAction("打开", this);
    QAction* exitAction = new QAction("退出", this);
    QAction* copyAction = new QAction("复制", this);
    
    fileMenu->addAction(openAction);
    fileMenu->addAction(exitAction);
    EditMenu->addAction(copyAction);
    
    //关联槽函数
    connect(exitAction, &QAction::triggered, this, &MainWindow::close);
    
    //设置菜单栏
    this->setMenuBar(menuBar);
    }
    
  • 设置菜单栏(UI)

    • 设置步骤

      • 打开 Qt Designer 并加载您的主窗口 UI 文件。

      • 在窗口顶部,找到菜单栏区域(通常显示为“Type Here”)。

      • 点击“Type Here”并输入菜单名称(如“File”)。

      • 右键单击新创建的菜单,选择“Add Action”创建菜单项。

      • 在属性编辑器中,可以设置菜单项的属性,如文本、快捷键和图标。

    • 属性设置

      • 菜单

        • title:菜单的标题文本。

        • enabled:是否启用菜单,默认为 true

        • visible:是否可见,默认为 true。(setVisible)

      • 菜单项

        • text:菜单项的文本。

        • icon:菜单项的图标。

        • shortcut:菜单项的快捷键,例如 Ctrl+O

        • checkable:是否为可选菜单项(复选框或单选按钮),默认为 false

        • checked:如果 checkabletrue,则表示菜单项是否被选中,默认为 false

        • enabled:是否启用菜单项,默认为 true

        • visible:是否可见,默认为 true

 

  • 工具栏

  • 基本概念

    • 在 Qt 中,工具栏(QToolBar)是用户界面中常用的一个组件,用于快速访问应用程序中最常用的功能。

    • QToolBar:Qt 中的工具栏类,继承自 QWidget

    • QAction:表示一个可以添加到菜单、工具栏或上下文菜单的操作。

  • 设置工具栏(API)

    • 创建工具栏 - QToolBar

    • 添加动作到工具栏 - addAction

    MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        //创建工具栏
        QToolBar* toolBar = new QToolBar(this);
    
        //设置工具栏
        this->addToolBar(toolBar);
    
        //添加工具项
        QAction* newAction = new QAction("New", this);
        QAction* openAction = new QAction("Open", this);
        QAction* saveAction = new QAction("Save", this);
    
        //关联工具项
        toolBar->addAction(newAction);
        toolBar->addAction(openAction);
        toolBar->addAction(saveAction);
    
        //绑定控件类
        QLineEdit* lineEdit = new QLineEdit(this);
        toolBar->addWidget(lineEdit);
    
        //设置停靠区域
        toolBar->setAllowedAreas(Qt::TopToolBarArea | Qt::LeftToolBarArea);
    
        //设置浮动
        toolBar->setFloatable(0);
    
        //设置移动
        toolBar->setMovable(1);
    
        //创建工具栏
        QToolBar* toolBar2 = new QToolBar(this);
    
        //设置工具栏
        this->addToolBar(Qt::BottomToolBarArea,toolBar2);
    
        //添加工具项
        QAction* copyAction = new QAction("copy", this);
        QAction* pasteAction = new QAction("Paste", this);
        QAction* cutAction = new QAction("Cut", this);
    
        //关联工具项
        toolBar2->addAction(copyAction);
        toolBar2->addAction(pasteAction);
        toolBar2->addAction(cutAction);
    
    }
  • 设置工具栏(UI)

    • 添加工具栏:

      • 在主窗口上右键点击,选择“添加工具栏”。

    • 设置工具栏属性:

      • 在属性编辑器中,可以设置工具栏的名称、浮动性、可移动性等属性。

    • 添加动作:

      • 在动作编辑器中创建动作,然后将动作拖拽到工具栏上。

    • 属性设置

      • objectName:控件的内部名称,用于代码中引用该工具栏。

      • windowTitle:工具栏的窗口标题,通常在工具栏浮动时显示。

      • allowedAreas:定义工具栏可以停靠的区域(顶部、底部、左侧、右侧或任意组合)。

      • floatable:是否允许工具栏浮动。如果设置为 true,工具栏可以被拖出主窗口并独立显示。

      • movable:是否允许移动工具栏。如果设置为 true,用户可以拖动工具栏并重新定位。

      • orientation:工具栏的方向,默认为水平方向(Qt::Horizontal),也可以设置为垂直方向(Qt::Vertical)。

      • iconSize:工具栏中图标的大小。可以设定一个 QSize 来指定宽度和高度。

      • toolButtonStyle:工具栏按钮的样式。可以是只显示图标、只显示文字、同时显示或者按照按钮的默认设置。

  • 状态栏

  • 基本概念

    • 在 Qt 应用程序中,状态栏(QStatusBar)通常位于应用程序窗口的底部,用于显示临时的状态信息、提示信息或其他动态内容。

    • 状态栏(QStatusBar):显示应用程序的当前状态信息和其他短暂的信息。通常用于提示用户当前的操作状态、显示进度或提供简单的帮助信息。

  • 设置状态栏(API)

    • 创建并设置状态栏 - 使用 QMainWindowstatusBar() 方法创建和获取状态栏实例。

    • 显示简单文本信息 - 使用 showMessage() 方法在状态栏显示文本。

    • 添加永久信息 - 可以使用 addPermanentWidget() 方法在状态栏中添加永久的控件(如标签或进度条)。

    MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    
        QStatusBar* statusBar = new QStatusBar(this);
        this->setStatusBar(statusBar);
    
        statusBar->showMessage("欢迎进入QT学习", 3000);
    
        QLabel* labelVer = new QLabel("Ver -> 1.0", this);
        statusBar->addPermanentWidget(labelVer);
    
        QProgressBar* progressBarFile = new QProgressBar(this);
        progressBarFile->setRange(0, 100);
        statusBar->addPermanentWidget(progressBarFile);
        progressBarFile->setValue(66);
    
        connect(ui->pushButton, &QPushButton::clicked, [=](){
            statusBar->showMessage("FileSave", 2000);
        });
    
    }
    

;