zoukankan      html  css  js  c++  java
  • Qt之菜单栏,和对话框

    main.cpp

     1 #include "mainwindow.h"
     2 #include <QApplication>
     3 
     4 int main(int argc, char *argv[])
     5 {
     6     QApplication a(argc, argv);
     7     MainWindow w;
     8     w.show();
     9     return a.exec();
    10 }

    mainwindow.cpp

      1 #include "mainwindow.h"
      2 #include "ui_mainwindow.h"
      3 #include<QMenuBar>  //菜单栏类
      4 #include<QMenu> //菜单类.
      5 #include<QAction> //动作类()
      6 #include<QDebug>
      7 #include<QToolBar>  //工具栏
      8 #include<QPushButton>
      9 #include<QStatusBar> //状态栏
     10 #include<QLabel>
     11 #include<QTextEdit>
     12 #include<QDockWidget>//浮动窗口
     13 #include<QDialog> //对话框
     14 #include<QMessageBox> //标准对话框类.
     15 #include<QFileDialog> //文件对话框
     16 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent),ui(new Ui::MainWindow)
     17 {
     18     ui->setupUi(this);
     19     //菜单栏
     20     QMenuBar *my_Bar = menuBar();//进行直接获取. QMenuBar *my_Bar = new QMenuBar()动态分配方式,存在局限,
     21     //添加菜单
     22  //my_Bar为QMenuBar类的对象,addMenu为类成员函数.该函数返回“文件”菜单对象.所以需要创建同类型的变量来接收,QMenu数据类型的pFile。
     23     QMenu *pFile = my_Bar->addMenu("文件");
     24     //给当前菜单添加功能;即菜单项.
     25     QAction *pNew = pFile->addAction("新建");
     26     connect(pNew,&QAction::triggered,
     27             [=]()
     28     {
     29            QWidget *my_widget = new QWidget;
     30            my_widget->setWindowTitle("新建窗口");
     31            my_widget->show();
     32             qDebug()<<"新建完成";
     33     }
     34             );
     35     pFile->addSeparator(); //添加分割线.
     36     QAction *pOpen = pFile->addAction("打开");
     37     connect(pOpen,&QAction::triggered,
     38             [=]()
     39     {
     40 
     41         qDebug()<<"打开完成";
     42     }
     43     );
     44     //添加工具栏,菜单项的快捷方式;
     45     QToolBar *toolBar = addToolBar("toolBar");  //【】
     46     //工具栏添加快捷键
     47     toolBar->addAction(pNew);
     48     //添加小控件
     49     QPushButton *button = new QPushButton(this);//分配的是this(当前对象)对象的空间.
     50     button->setText("^_^");
     51     toolBar->addWidget(button);
     52     connect(button,&QPushButton::pressed,
     53             [=]() //可以使用外面的对象,变量等.
     54     {
     55         button->setText("123");
     56     }
     57             );
     58     //添加状态栏:
     59     QStatusBar *bar = statusBar();//直接获取【】
     60     QLabel *label = new QLabel(this); //状态栏中状态控件是放在this窗口中
     61     label->setText("Normal text file");
     62     //addWidget()为从左往右进行添加.
     63     bar->addWidget(label);//添加到状态栏.等价于:bar->addWidget(new QLabel("3",this));
     64     //addPermanenWidget 从右往左添加
     65     bar->addPermanentWidget(new QLabel("从右往左添加",this));
     66 
     67     //核心控件
     68     QTextEdit *textEdit = new QTextEdit(this); //文本编辑框.
     69     setCentralWidget(textEdit);
     70     //浮动窗口
     71     QDockWidget *dock = new QDockWidget(this);
     72     addDockWidget(Qt::RightDockWidgetArea,dock);
     73     QTextEdit *textEdit1 = new QTextEdit(this); //文本编辑框  //注意父对象不是浮动窗口.
     74     dock->setWidget(textEdit1);
     75 
     76  /*模态对话框和非模态对话框。
     77   * 模态对话框:打开该窗口时就不能操作其他的窗口,在这里我们以能否执行qDbug()来测试模态对话框和非模态对话框.
     78  */
     79     QMenu *dialog_box = my_Bar->addMenu("对话框");
     80     QAction *M_dialog_box = dialog_box->addAction("模态对话框");
     81     QAction *NM_dialog_box = dialog_box->addAction("非模态对话框");
     82     M_dialog_box->setText("模态对话框");
     83     NM_dialog_box->setText("非模态对话框");
     84     connect(M_dialog_box,&QAction::triggered,
     85             [=]()
     86     {//方式一:dig对象的内存空间由函数的执行为结束点.
     87         QDialog dig;
     88         dig.exec(); //程序会卡在这个位置,函数就不会结束
     89         qDebug()<<"在模态对话框里不能操作";
     90 
     91     }
     92             );
     93     connect(NM_dialog_box,&QAction::triggered,
     94             [=]()
     95     {//方式一:
     96         /*
     97         QDialog N_dig;//非模态对话框.
     98         N_dig.show(); //程序执行到这里时不会像exec一样停在这里等待操作.所以会闪以下就关闭了窗口.
     99         qDebug()<<"非模态对话框";
    100         */
    101 
    102      //方式二:使用动态分配,且指定父对象为Main_Widget.随着程序的结束而结束.但是这样会导致内存的堆积.
    103         /*
    104     QDialog *N_dig = new QDialog(this);
    105     N_dig->show();
    106     qDebug()<<"非模态对话框,此函数作用域释放,但由于对话框的父对象还没结束,所以非模态对话框不会结束";
    107     */
    108     //方式三:
    109         QDialog *N_dig = new QDialog();
    110         N_dig->setAttribute(Qt::WA_DeleteOnClose);
    111         N_dig->show();
    112     }
    113     );
    114     //标准对话框,和文件对话框.
    115     QAction *standard_dbox = dialog_box->addAction("标准对话框");
    116     connect(standard_dbox,&QAction::triggered,
    117             [=]()
    118     {
    119         QMessageBox::about(this,"内容框","关于Qt");
    120     }
    121     );
    122     QAction *question_dig = dialog_box->addAction("问题对话框");
    123     connect(question_dig,&QAction::triggered,
    124 
    125             [=]()
    126     {
    127         //返回的是布尔值.
    128         int ret = QMessageBox::question(this,"question_title","文本内容,ok and no",
    129                                         QMessageBox::Cancel|QMessageBox::Help|QMessageBox::No);
    130         switch (ret) {
    131         case QMessageBox::Ok:qDebug()<<"i am ok";
    132             break; //终止
    133         case QMessageBox::No:qDebug()<<"i am no";
    134             break;
    135         case QMessageBox::Help:
    136             help_widget();
    137             /*该方式会导致default不能编写。
    138             QWidget *help_widget = new QWidget; //注意不能指定父对象,this.个人认为受break的影响(在switch表达式中).
    139             help_widget->setWindowTitle("帮助文档chuang窗口");
    140             help_widget->show();
    141             */
    142             break;
    143         default:
    144            break;
    145         }
    146 
    147     }
    148     );
    149     //文件对话框
    150   QAction *File_dig = dialog_box->addAction("文件对话框");
    151   connect(File_dig,&QAction::triggered,
    152           [=]()
    153   {
    154       QString path = QFileDialog::getOpenFileName(this,"open","../",
    155                 "souce(*.cpp *.h);;Text(*.txt);;Image(*.png *.jpg *.gif);;all(*.*)"); //*:表示通配符,注意正则表达式.
    156       qDebug()<<path;
    157   }
    158           );
    159 }
    160 void MainWindow::help_widget()
    161 {
    162     //在类成员中动态分配内存,直到类结束时该空间才释放.
    163     QWidget *help_widget = new QWidget;
    164     help_widget->setWindowTitle("帮助文档chuang窗口");
    165     help_widget->show();
    166 }
    167 MainWindow::~MainWindow() //析构函数,用来释放内存
    168 {
    169     delete ui;
    170 }

    mainwindow.h

     1 #ifndef MAINWINDOW_H
     2 #define MAINWINDOW_H
     3 
     4 #include <QMainWindow>
     5 
     6 QT_BEGIN_NAMESPACE
     7 namespace Ui { class MainWindow; }
     8 QT_END_NAMESPACE
     9 
    10 class MainWindow : public QMainWindow
    11 {
    12     Q_OBJECT
    13 
    14 public:
    15     MainWindow(QWidget *parent = nullptr);
    16     ~MainWindow();
    17     void help_widget();
    18 
    19 private:
    20     Ui::MainWindow *ui;
    21 };
    22 #endif // MAINWINDOW_H
  • 相关阅读:
    oc73--NSArray使用
    oc72--NSArray排序
    oc71--NSArray2
    oc70--NSArray1
    oc69--NSMutableString
    oc68--NSString
    oc67--NSString1
    驱动人生病毒处理的简单方法(20191207)
    CentOS 安装libgdi的方法
    局域网Linux机器中病毒简单处理 .aliyun.sh 挖矿病毒 ---不彻底
  • 原文地址:https://www.cnblogs.com/1314bjwg/p/12316993.html
Copyright © 2011-2022 走看看