QT学习笔记(5) 菜单栏、工具栏、窗口、对话框

本程序主要介绍了以下几种常用控件的使用方法:

(1)菜单栏、工具栏

(2)核心控件、状态栏、浮动窗口

(3)模态窗口、非模态窗口

(4)标准对话框、文件对话框

代码如下:

mainwindow.h文件

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3
 4 #include <QMainWindow>
 5 #include <QDialog>
 6
 7 class MainWindow : public QMainWindow
 8 {
 9     Q_OBJECT
10
11 public:
12     MainWindow(QWidget *parent = 0);
13     ~MainWindow();
14
15 private:
16     QDialog dialog2;//用于非模态窗口的显示
17 };
18
19 #endif // MAINWINDOW_H

mainwindow.cpp文件

#include "mainwindow.h"
#include <QMenuBar>//菜单栏
#include <QMenu>//菜单
#include <QAction>//菜单项
#include <QDebug>
#include <QToolBar>//工具栏
#include <QPushButton>
#include <QStatusBar>//状态栏
#include <QLabel>//标签
#include <QTextEdit>//文本
#include <QDockWidget>//浮动窗口
#include <QDialog>//对话框
#include <QMessageBox>//消息对话框
#include <QFileDialog>//文件对话框

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    //菜单栏
    //定义菜单栏
    QMenuBar *mBar = menuBar();
    //添加菜单
    QMenu *pFile = mBar->addMenu("wenjian");
    //添加菜单项,添加动作
    QAction *pNew = pFile->addAction("xinjian");
    //给菜单项建立连接,完成相应的操作
    connect(pNew,&QAction::triggered,
            [=]()
            {
                qDebug() << "xinjian" ;
            }
            );
    //给菜单项之间添加分割线
    pFile->addSeparator();
    QAction *pOpen = pFile->addAction("dakai");

    //工具栏
    //工具栏中存放的大多是菜单项的快捷方式
    QToolBar *toolBar = addToolBar("toolbar");
    //工具栏添加快捷键,直接把菜单项的指针添加到工具栏
    toolBar->addAction(pNew);
    //向工具栏添加控件,并添加操作
    QPushButton * b = new QPushButton(this);
    b->setText("-_-");
    toolBar->addWidget(b);
    connect(b,&QPushButton::clicked,
            [=]()
            {
                b->setText("123");
            }
            );//注意此处的;

    //状态栏
    QStatusBar *sBar = statusBar();
    QLabel *label = new QLabel(this);
    label->setText("Normal text file");
    sBar->addWidget(label);
    //从左网往右依次添加
    sBar->addWidget(new QLabel("2",this));
    //从右往左依次添加
    sBar->addPermanentWidget(new QLabel("3",this));

    //核心控件
    QTextEdit *textEdit = new QTextEdit(this);
    setCentralWidget(textEdit);

    //浮动窗口
    QDockWidget *dock = new QDockWidget(this);
    addDockWidget(Qt::LeftDockWidgetArea,dock);//存放的位置,存放的窗口
    QTextEdit *textEdit1 = new QTextEdit(this);
    dock->setWidget(textEdit1);//向浮动窗口添加东西

    //模态对话框和非模态对话框
    QMenu *pDialog = mBar->addMenu("Dialog");
    //模态对话框
    QAction *p1 = pDialog->addAction("motai");
    connect(p1,&QAction::triggered,
            [=]()
            {
                QDialog dialog1;
                dialog1.exec();//此处会一直运行
                qDebug() << "motai" ;
            }
            );
    //非模态对话框
    QAction *p2 = pDialog->addAction("feimotai");
    connect(p2,&QAction::triggered,
            [=]()
            {
                //QDialog dialog1;
                //如果在函数体内声明,dialog1相当于局部变量,会在跳出是直接消失
                //dialog1.show();

                //解决办法1:把dialog1当做成员变量
                dialog2.show();
                qDebug() << "feimotai" ;

                //解决办法2:动态分配内存空间
                QDialog *dialog3 = new QDialog(this);
                //由于分配的内存空间只有在系统结束时才释放,如果经常需要打开此窗口,会导致内存越用越少
                //所以要设置属性为关闭时释放空间
                dialog3->setAttribute(Qt::WA_DeleteOnClose);
                dialog3->show();
            }
            );

    //标准对话框和文件对话框
    QMenu *pMessage = mBar->addMenu("MessageBox");
    //关于对话框
    QAction *p3 = pMessage->addAction("guanyu");
    connect(p3,&QAction::triggered,
            [=]()
            {
                QMessageBox::about(this,"guanyu","guanyuQT");
            }
            );
    //问题对话框
    QAction *p4 = pMessage->addAction("wenti");
    connect(p4,&QAction::triggered,
            [=]()
            {
                int ret = QMessageBox::question(this,
                                                "question",
                                                "Are you ok?",
                                                QMessageBox::Ok | QMessageBox::Cancel);
                switch(ret)
                {
                case QMessageBox::Ok:
                    qDebug() << "i am OK" ;
                    break;
                case QMessageBox::Cancel:
                    qDebug() << "i am Cancel" ;
                    break;
                default:
                    break;
                }
            }
            );
    //文件对话框
    QAction *p5 = pMessage->addAction("wenjian");
    connect(p5,&QAction::triggered,
            [=]()
            {
                QString path = QFileDialog::getOpenFileName(this,
                                             "open",
                                             "../",
                                             "source(*.cpp *.h);;"
                                             "Text(*.txt);;"
                                             "all(*.*)");
                qDebug() << path ;
            }
            );

}

MainWindow::~MainWindow()
{

}
时间: 2024-10-07 11:17:37

QT学习笔记(5) 菜单栏、工具栏、窗口、对话框的相关文章

【Qt学习笔记】10.主窗口 The Main Window

一.工具栏和菜单 只有主框架窗口(QMainWindow)才能够添加菜单和工具栏 QAction 命令 步骤: 1.添加action (动作编辑器) (在Qt Designer 界面的右下角)) 2.把action拖动到菜单或工具栏里 3.在代码里加上响应处理函数 示例代码: Test10_1a_12_11::Test10_1a_12_11(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); assert( connect( ui

【Qt学习笔记】9.容器窗口

容器(Container) Qt里提供多种容器窗口: 1.选项卡窗口 QTabWidget 2.堆叠窗口  QStackedWidget 3.工具窗口  QToolBox 一.选项卡窗口 容纳多个子窗口,每个子窗口显示一个标签(选项卡).当标签被点击时,此窗口置于最前. 实现方式: 1.使用Qt Designer 2.手动添加 Widget 二.堆叠窗口 容纳多个Widget,每个Wdiget称为一页 没有标签,由其他窗口控制 通常可以做向导程序 显示第几页: setCurrectIndex()

Android学习笔记(七)——显示对话框窗口

显示对话框窗口 1.创建Dialog1项目,在activity_main.xml文件中添加一个Button: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:l

QT学习笔记—1

1.模态和非模态的区别:非模态可以同时操作两个窗口,模态的只能在顶层窗口关闭之后才能使用其他窗口 //同时显示出widget和dialog窗口,非模态     QDialog *dialog = new QDialog(this);     dialog->show(); //同时显示出widget和dialog窗口,模态     QDialog *dialog = new QDialog(this);     dialog->setModal(true);     dialog->sh

Qt学习笔记-Widget布局管理

Qt学习笔记4-Widget布局管理 以<C++ GUI Programming with Qt 4, Second Edition>为参考 实例:查找对话框 包含三个文件,finddialog.h,finddialog.cpp及main.cpp. //finddialog.h代码 #ifndef FINDDIALOG_H#define FINDDIALOG_H #include <QDialog> class QCheckBox;class QLabel;class QLineE

【Qt学习笔记】13.拖放技术:Drag & Drop

1.接受拖放 Drag & Drop 是一个界面操作,用于在两个窗口间传递数据. Drag Source: 拖放源窗口 Drag Target: 拖放目标窗口 拖放操作: 1.在源窗口:选中目标,按下鼠标,移动,拖至目标窗口(Drag) 2.在目标窗口:取消鼠标,到指定位置,松开鼠标(Drop) (按下ESC取消操作) MIME: MIME(Multipurpose Internet Mail Extensions)被传递的数据以MIME格式传送,它是多组type-data数据:(type0,

【Qt学习笔记】2.窗体Widget && 屏幕坐标 && 布局

一.窗体 在Qt中,把窗体(口)叫做Widget. Widget可以是主窗体(口),也可以是依附在主窗体(口)上的各种控件,作为子窗体,这两种窗口,分别称作顶级窗口(top-level widget)和子窗口(sub widget). 顶级窗口:一个标准的窗口,带边框.标题栏.若干按钮.(独立) 子窗口:在窗口里面的窗口,例如:按钮.文本框等控件.(不独立,随着父窗口移动) 注意: 1.每个子窗口都有一个父窗口 2.子窗口里面可能包含了若干子窗口,是一层一层的关系. 3.顶级窗口也有父窗口:就是

QT学习笔记(1)

采用QT创建一个GUI的应用程序时,都必须包含一个QApplication的对象,而对于非GUI的QT程序,可以使用不依赖QtGui库的QApplication QT的主要类: QLable                   标签类 QPushButton          按钮类 QVBoxLayout          竖布局管理器类 QHBoxLayout          横布局管理器类 QWidget                 窗口部件类 QGridLayout        

ObjectARX 学习笔记007:创建模态对话框的一般步骤

1.新建一个工程,注意将"使用MFC"选项勾上. 2.使用[insert/Resouce]菜单项插入一个对话框. 3.此时会弹出一个窗体,直接按Enter键可以调出[属性]面板.设置窗体的ID和窗体的Caption. 4.可以点击[属性]面板左上角的图钉图标将其常显. 5.向窗体中插入控件,依次设置其ID与Caption. 6.按Ctrl+W为对话框资源创建一个类.此时系统会在工程中添加一个.cpp文件和一个对应的.h文件. 7.注册一个新命令,用于显示新的对话框. 8.在xxxCom

qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏,主机是mini2440,分辨率是800*480,程序写比較粗糙,但对刚開始学习的人还是有一点启示,大家一起进步. qt中提供了QGphicsView,QGraphicsScene,QGraphicsItem,QGraphicsPixmapItem是QGraphicsItem的子类 分辨创建它们的实