QMainwindow窗口

QMainwindow窗口

菜单栏

只能有一个, 位于窗口的最上方

关于顶级菜单可以直接在UI窗口中双击, 直接输入文本信息即可, 对应子菜单项也可以通过先双击在输入的方式完成添加, 但是这种方式不支持中文的输入。

输入文字,按回车确认。

能创建二级菜单栏

在二级菜单中输入中文的方法

新建动作( action )

得到:

将刚刚创建的动作拖到相应的菜单列表中去:

效果:

给菜单栏添加相应的动作

其中,菜单栏对应的类为QAction

当用户点击了菜单栏中的某一个QAction时,triggered信号被发射出啦

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->createprogect1,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下创建项目";
                QMessageBox::information(this, "提示框",
                                         "成功创建项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
    connect(ui->open_action,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下打开项目";
                QMessageBox::information(this, "提示框",
                                         "成功打开项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });

}

MainWindow::~MainWindow()
{
    delete ui;
}





使用QMenu类的API方法添加菜单项

cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"

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

    QAction* a1;
    a1 = ui->menu->addAction("打开老项目");
    connect(a1,&QAction::triggered,this,[=]{
        qDebug()<<"点击了一下打开项目";
        QMessageBox::information(this, "提示框",
                                 "成功打开老项目",
                                 QMessageBox::Ok,
                                 QMessageBox::Save);
    });

    connect(ui->createprogect1,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下创建项目";
                QMessageBox::information(this, "提示框",
                                         "成功创建项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
    connect(ui->open_action,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下打开项目";
                QMessageBox::information(this, "提示框",
                                         "成功打开项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
}

MainWindow::~MainWindow()
{
    delete ui;
}


分隔符也是QAction类



工具栏

可以有多个, 默认提供了一个, 窗口的上下左右都可以停靠

添加工具栏


在状态栏中添加控件

可以使用之前的方法,在状态栏中添加QAction控件

  1. 新建action

    将action拖到工具栏里面


    添加信号和槽函数
cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"

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

    QAction* a1;
    a1 = ui->menu->addAction("打开老项目");
    //菜单栏
    connect(a1,&QAction::triggered,this,[=]{
        qDebug()<<"点击了一下打开项目";
        QMessageBox::information(this, "提示框",
                                 "成功打开老项目",
                                 QMessageBox::Ok,
                                 QMessageBox::Save);
    });

    connect(ui->createprogect1,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下创建项目";
                QMessageBox::information(this, "提示框",
                                         "成功创建项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
    connect(ui->open_action,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下打开项目";
                QMessageBox::information(this, "提示框",
                                         "成功打开项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
    //工具栏
    connect(ui->action_4,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下工具4";
                QMessageBox::information(this, "提示框",
                                         "点击了一下工具4",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
    connect(ui->action_1,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下工具1";
                QMessageBox::information(this, "提示框",
                                         "点击了一下工具1",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
}

MainWindow::~MainWindow()
{
    delete ui;
}

效果:

工具栏添加其他类型的工具


cpp 复制代码
// 在QMainWindow窗口中添加工具栏
void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar);
void QMainWindow::addToolBar(QToolBar *toolbar);
QToolBar *QMainWindow::addToolBar(const QString &title);

// 将Qt控件放到工具栏中
// 工具栏类: QToolBar
// 添加的对象只要是QWidget或者启子类都可以被添加
QAction *QToolBar::addWidget(QWidget *widget);

// 添加QAction对象
QAction *QToolBar::addAction(const QString &text);
QAction *QToolBar::addAction(const QIcon &icon, const QString &text);

// 添加分隔线
QAction *QToolBar::addSeparator()

在工具栏中,添加其他组件,并发送信号,调用槽函数的方法

工具栏的属性

看到了QToolBar的继承关系

movable属性值为True(并设置了上下左右都可以停靠)

设置图标大小和设置显示图标还是文字

对应的函数为


添加多个工具栏

使用窗口添加

再将之前的QAction拖到右边的工具栏里面去:


使用代码添加




cpp 复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QMessageBox"
#include "QLineEdit"
#include "QPushButton"
#include "QLineEdit"

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

    QAction* a1;
    QAction* a2;

    QAction* a4;
   //QPushButton* b1= new QPushButton(this);
   // b1->setText("搜索按钮");
   // QLineEdit* e1 =  new QLineEdit();

    a1 = ui->menu->addAction("打开老项目");
    //给工具栏添加单行输入框
    ui->toolBar->addWidget(new QPushButton("搜索按钮"));
    ui->toolBar->addWidget(new QLineEdit);
    a4 = ui->toolBar->addAction("工具4");


    //菜单栏
    connect(a1,&QAction::triggered,this,[=]{
        qDebug()<<"点击了一下打开项目";
        QMessageBox::information(this, "提示框",
                                 "成功打开老项目",
                                 QMessageBox::Ok,
                                 QMessageBox::Save);
    });

    connect(ui->createprogect1,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下创建项目";
                QMessageBox::information(this, "提示框",
                                         "成功创建项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
    connect(ui->open_action,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下打开项目";
                QMessageBox::information(this, "提示框",
                                         "成功打开项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
    //工具栏
    connect(ui->action_4,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下工具4";
                QMessageBox::information(this, "提示框",
                                         "点击了一下工具4",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
    connect(ui->action_1,&QAction::triggered,this,[=]{
                qDebug()<<"点击了一下工具1";
                QMessageBox::information(this, "提示框",
                                         "点击了一下工具1",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
//    connect(a2,&QAction::triggered,this,[=]{
//                qDebug()<<"请输入搜索类容";
//                QMessageBox::information(this, "提示框",
//                                         "请输入搜索类容",
//                                         QMessageBox::Ok,
//                                         QMessageBox::Save);
//            });
//    connect(b1,&QAction::triggered,this,[=]{
//                qDebug()<<"请输入搜索类容";
//                QMessageBox::information(this, "提示框",
//                                         "请输入搜索类容",
//                                         QMessageBox::Ok,
//                                         QMessageBox::Save);
//            });
    connect(a4,&QAction::triggered,this,[=]{
                qDebug()<<"点击了工具4";
                QMessageBox::information(this, "提示框",
                                         "点击了工具4",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });

    //对于toolbar2的操作
    QAction* a5;
    a5 = ui->toolBar_2->addAction("新建项目");
    connect(a5,&QAction::triggered,this,[=]{
                qDebug()<<"点击新建项目";
                QMessageBox::information(this, "提示框",
                                         "点击了新建项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
    QPushButton *b5 = new QPushButton(this);
    b5->setText("^_^");
    //添加小控件
    ui->toolBar_2->addWidget(b5);
    connect(b5,&QPushButton::clicked,this,[=]{
        qDebug()<<"点击了^_^";
        QMessageBox::information(this, "提示框",
                                 "点击了^_^",
                                 QMessageBox::Ok,
                                 QMessageBox::Save);
    });
    QLineEdit* l5 = new QLineEdit();
    //添加小控件
    ui->toolBar_2->addWidget(l5);
    connect(l5,&QLineEdit::editingFinished,this,[=]{
        qDebug()<<"完成输入";
        QMessageBox::information(this, "提示框",
                                 "完成了输入",
                                 QMessageBox::Ok,
                                 QMessageBox::Save);
    });

    //下方的工具栏
    QToolBar* b6 = new QToolBar(this);
    QMainWindow::addToolBar(Qt::BottomToolBarArea,b6);
    QAction* a6;
    a6 = b6->addAction("新建项目");
    connect(a6,&QAction::triggered,this,[=]{
                qDebug()<<"点击新建项目";
                QMessageBox::information(this, "提示框",
                                         "点击了新建项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });



}

MainWindow::~MainWindow()
{
    delete ui;
}

在下方添加了工具栏,并在工具栏中添加了QAction组件

在下方的工具栏中,添加非QAction的组件(我使用的是QPushButton)

cpp 复制代码
    //下方的工具栏
    QToolBar* b6 = new QToolBar(this);
    QMainWindow::addToolBar(Qt::BottomToolBarArea,b6);
    QAction* a6;
    a6 = b6->addAction("新建项目");
    connect(a6,&QAction::triggered,this,[=]{
                qDebug()<<"点击新建项目";
                QMessageBox::information(this, "提示框",
                                         "点击了新建项目",
                                         QMessageBox::Ok,
                                         QMessageBox::Save);
            });
    QPushButton *pb6 = new QPushButton(this);
    pb6->setText("退出");
    //添加小控件
    b6->addWidget(pb6);
    connect(pb6,&QPushButton::clicked,this,[=]{
        qDebug()<<"点击了退出";
        QMessageBox::information(this, "提示框",
                                 "点击了退出",
                                 QMessageBox::Ok,
                                 QMessageBox::Save);
    });

状态栏

只能有一个, 位于窗口最下方

需要在状态栏中添加某些控件, 显示某些属性, 使用最多的就是添加标签 QLabel

常用API

cpp 复制代码
// 类型: QStatusBar
void QStatusBar::addWidget(QWidget *widget, int stretch = 0);

[slot] void QStatusBar::clearMessage();
[slot] void QStatusBar::showMessage(const QString &message, int timeout = 0);


状态栏出现了:右边的三角形灰色点点

在状态栏中添加QLabel,并设置跳转路径

cpp 复制代码
    //状态栏
    QLabel* l7 = new QLabel();
    l7->setText(QStringLiteral("<a style='color: red; text-decoration: none ;font-size:20px' href = https://www.baidu.com><u>百度</u>"));
    ui->statusBar->addWidget(l7);
    connect(l7,&QLabel::linkActivated,this,[=](QString url){
        qDebug()<<"点击了状态栏label";
        QMessageBox::information(this, "提示框",
                                 "点击了状态栏label",
                                 QMessageBox::Ok,
                                 QMessageBox::Save);
        QDesktopServices::openUrl(QUrl(url));
    });



QLabel超链接

再添加一个pushbutton按钮

cpp 复制代码
    //状态栏
    QLabel* l7 = new QLabel();
    l7->setText(QStringLiteral("<a style='color: red; text-decoration: none ;font-size:20px' href = https://www.baidu.com><u>百度</u>"));
    ui->statusBar->addWidget(l7);
    connect(l7,&QLabel::linkActivated,this,[=](QString url){
        qDebug()<<"点击了状态栏label";
        QMessageBox::information(this, "提示框",
                                 "点击了状态栏label",
                                 QMessageBox::Ok,
                                 QMessageBox::Save);
        QDesktopServices::openUrl(QUrl(url));
    });
    // 再添加按钮
    QPushButton* button = new QPushButton("状态栏的按钮");
    ui->statusBar->addWidget(button);
    connect(button,&QPushButton::clicked,this,[=](){
        qDebug()<<"点击了状态栏label";
        QMessageBox::information(this, "提示框",
                                 "点击了状态栏pushbutton",
                                 QMessageBox::Ok,
                                 QMessageBox::Save);
    });


停靠窗口

可以有多个, 默认没有提供, 窗口的上下左右都可以停靠

相关推荐
mahuifa2 小时前
C++(Qt)软件调试---内存泄漏分析工具MTuner (25)
c++·qt·内存泄漏·软件调试·mtuner
葛狂的博客2 小时前
【Qt实现虚拟键盘】
开发语言·qt·计算机外设
yyqzjw2 小时前
【qt】控件
开发语言·qt
小狮子安度因11 小时前
Qt文件目录操作
开发语言·qt
云空1 天前
《VSCode、QT 与 MarsCode:强大的开发组合》
ide·人工智能·vscode·qt·aigc·ai编程
优雅的小武先生1 天前
【Qt】报错error: undefined reference to `vtable for的最简单解决
开发语言·qt
only-lucky1 天前
QT之QML从入门到精通(第七章)
java·数据库·qt
郑同学的笔记1 天前
【Qt教程03】Qt中的信号和槽
开发语言·c++·qt
姆路1 天前
Qt中实现旋转动画效果
c++·qt
姆路1 天前
QT中使用图表之QChart绘制饼图
c++·qt