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 方法

自定义标题栏

  • 在某些情况下,您可能希望完全自定义标题栏的外观和行为。可以通过隐藏默认的标题栏并创建自定义的标题栏来实现。
cpp 复制代码
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

cpp 复制代码
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

cpp 复制代码
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() 方法在状态栏中添加永久的控件(如标签或进度条)。

cpp 复制代码
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);
    });

}
相关推荐
mit6.8243 分钟前
[实现Rpc] 通信-Muduo库的实现 | && 完美转发 | reserve | unique_lock
c++·网络协议·rpc
孤雪心殇5 分钟前
简单易懂,解析Go语言中的Map
开发语言·数据结构·后端·golang·go
庸俗今天不摸鱼17 分钟前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
菠菠萝宝18 分钟前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru
奔跑吧邓邓子21 分钟前
【Python爬虫(36)】深挖多进程爬虫性能优化:从通信到负载均衡
开发语言·爬虫·python·性能优化·负载均衡·多进程
不会Hello World的小苗24 分钟前
Java——链表(LinkedList)
java·开发语言·链表
rkmhr_sef32 分钟前
Redis 下载与安装 教程 windows版
数据库·windows·redis
lsx20240637 分钟前
Perl 面向对象编程指南
开发语言
@_@哆啦A梦1 小时前
windows怎样查看系统信息(处理器等)
windows
Allen Bright1 小时前
【Java基础-46.3】Java泛型通配符详解:解锁类型安全的灵活编程
java·开发语言