QT 学习 (添加菜单栏动作 2)

添加菜单栏动作1: https://blog.csdn.net/dianzishi123/article/details/85807079

步骤:

(1) 添加菜单栏  QMenuBar *mBar = menuBar();//窗口添加菜单栏

(2) 在菜单栏中添加 "对话框" 菜单 QMenu *menu = mBar->addMenu("对话框");//菜单栏中添加 "对话框" 菜单

(3) 在 "对话框" 菜单中依次添加 "模态对话框" , "非模态对话框", "关于对话框", "问题对话框", "文件对话框" 菜单选项,添加菜单选项的同时,添加相应的菜单选项对应的动作

(4) 菜单选项对应的动作通过信号和槽连接, 槽函数使用 Lambda表达式(匿名函数,C++中功能)

(5). 模态和非模态对话框使用 QDialog , 在上面添加一个lineEdit和一个pushButton,点击button时button显示lineEdit的内容

(6). 关于对话框 和 问题对话框 使用 QMessageBox 对话框

(7). 文件对话框 使用 QFileDialog 点击文件对话框时打开源码的上一级路径

1. 创建一个 基于 QMainWindow 不带 UI 的工程

2. mainwindow.cpp文件:

#include "mainwindow.h"
#include <QMenu>//菜单
#include <QMenuBar>//菜单栏
#include <QAction>//动作
#include <QMessageBox>//消息对话框
#include <QFileDialog>//文本对话框
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    this->resize(400,300);//主窗口大小
    dlg.resize(300,200);//弹出的对话框大小

    /************对话框中的内容*************/
    button = new QPushButton(&dlg);//在弹出的对话框中添加一个按钮 指定父对象在dlg上显示
    button->setText("按钮");//设置按钮显示内容
    button->move(100,100);//移动下控件

    lineEdit = new QLineEdit(&dlg);//指定父对象在dlg上显示

    //连接对话框中的按钮连接的槽,把QLineEdit中的内容显示在QPushButton上
    connect(button,&QPushButton::clicked,this,&MainWindow::MySlot);


    /*********    添加菜单栏及菜单   *******/
    QMenuBar *mBar = menuBar();//窗口添加菜单栏 //  setMenuBar(mBar);
    QMenu *menu = mBar->addMenu("对话框");//菜单栏中添加 "对话框" 菜单


    //1. 模态对话框
    QAction *p1 = menu->addAction("模态对话框");//菜单项中的动作  菜单中添加菜单选项
    connect(p1,&QAction::triggered,
            [=]()
            {
                dlg.exec();//循环事件直到关闭窗口,才开始向下执行
                qDebug()<<"111";
            }
            );

    //2. 非模态对话框
    QAction *p2 = menu->addAction("非模态对话框");
    connect(p2,&QAction::triggered,
            [=]()
            {
                dlg.show();//只是显示出来
                qDebug()<<"222";
            }

            );

    //3. 关于对话框
    QAction *p3 = menu->addAction("关于对话框");
    connect(p3,&QAction::triggered,
            [=]()
            {
                QMessageBox::about(this,"about","关于Qt");
                qDebug()<<"333";
            }
            );

    //4. 问题对话框
    QAction *p4 = menu->addAction("问题对话框");
    connect(p4,&QAction::triggered,
            [=]()
            {
                //静态函数通过 类名::函数名 的形式调用
                int ret = QMessageBox::question(this,"question","Are you OK?",QMessageBox::Ok | QMessageBox::No);
                switch(ret)
                {
                case QMessageBox::Yes:
                        qDebug()<<"OK";
                    break;
                case QMessageBox::No:
                        qDebug()<<"NO";
                    break;
                default:
                    break;
                }
                qDebug()<<"444";
            }
            );

    //5. 文件对话框
    QAction *p5 = menu->addAction("文件对话框");
    connect(p5,&QAction::triggered,
            [=]()
            {
                //静态函数调用
                QString path = QFileDialog::getOpenFileName(
                            this,
                            "open",
                            "../",//打开的路径
                            "source(*.cpp *.h);;Text(*.txt);;all(*.*)"//添加 过滤格式
                            );
                qDebug()<< path;
            }
            );
}

MainWindow::~MainWindow()
{

}


void MainWindow::MySlot()
{
   // lineEdit->setText("好好");
    QString str = lineEdit->text();
    button->setText(str);
}

mainwindow.h文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QDialog>
#include <QLineEdit>
#include <QPushButton>

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

    void MySlot();

private:
    QDialog dlg;   //定义一个对话框
    QLineEdit *lineEdit;//在对话框上显示的lineEdit
    QPushButton *button;//在对话框上显示的button
};

#endif // MAINWINDOW_H

结果:

程序源码:https://download.csdn.net/download/dianzishi123/10919386

猜你喜欢

转载自blog.csdn.net/dianzishi123/article/details/85854321