一.对话框内容概要 菜单栏—菜单项—模态窗口/非模态窗口 工具栏 状态栏 核心控件 浮动窗口 二 .操作步骤: 1.新建项目,在ui界面添加textEdit控件(显示内容) 2.包含头文件 #include "QPu
一.对话框内容概要
- 菜单栏—>菜单项—>模态窗口/非模态窗口
- 工具栏
- 状态栏
- 核心控件
- 浮动窗口
二 .操作步骤:
1.新建项目,在ui界面添加textEdit控件(显示内容)
2.包含头文件
#include "QPushButton"
#include "QStatusBar"
#include "QLabel"
#include "QTextEdit"
#include "QToolBar"
#include "QDockWidget"
#include "QDialog"
#include "iostream"
#include "QDebug"
3 .实现代码
1).添加菜单栏(QMenuBar)
法一:
QMenuBar *mBar=menuBar();//
//添加菜单
//给菜单栏加一个菜单"文件",赋给指针pFile,这一步没有用,下面有用
QMenu *Menu = mBar->addMenu(QString::fromLocal8Bit("文件"));
法二:
//因为menuBar()是QMenuBar的一个成员函数,返回的是一个对象,所以它可以像对象一样调用函数,可直接
menuBar()->addMenu(QString::fromLocal8Bit("文件"));
关于:fromLocal8Bi()函数
*QT默认的编码是unicode,不能正确显示中文的
*windows默认使用(GBK/GB2312/GB18030)
*.使用fromLocal8Bit()函数,实现了从本地字符集GB到Unicode的转换,用于处理汉语显示乱码等问题
2).添加菜单项(QAction)(按下文件,会出现新建、保存那些菜单项),即添加动作addAction
. 添加“新建”菜单项
//给菜单"文件"添加一个动作"新建"
QAction *act = Menu->addAction( QString::fromLocal8Bit("新建"));
. 单击新建,弹出模态对话框 -QDialog
connect(act ,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec(); //.exec()是对话框属性变为模态,含义是执行到这里就不会动(主函数里面也是一样)
}
);
. 添加“”打开“”菜单项
//给菜单"文件"添加一个动作"打开"
QAction *open = Menu->addAction(QString::fromLocal8Bit("打开"));
. 单击打开,弹出非模态对话框 -QDialog
connect(open ,&QAction::triggered,//triggered和clicked类似,但应用范围更广
[=]()
{
/*****法一******/
dlg1; //注意这里需要将dlg定义为全局变量,这样运行完show(),dlg就不会释放了,否则运行完,释放dlg,非模态对话框将一闪而过
dlg1.show(); //.show()是对话框属性为模态
/*****法二******/ //缺点:在程序结束时,指针才会释放,若多次使用该对话框,导致内存越用越小,
/*QDialog *p = new QDialog(this);
p->show();*/
/*****法三******/
/*QDialog *p = new QDialog(this);
p->setAttribute(Qt::WA_DeleteOnClose);//窗口关闭自动释放内存
p->show();*/
}
);
注:法一添加QDialog类型全局变量dlg1:
3).添加工具栏(QToolBar)(菜单项的快捷方式)
QToolBar *toolBar = addToolBar("");
toolBar->addAction(act);//act为上面QAction 类型指针
注:给工具栏添加小控件的方法
QPushButton p = new QPushButton(this); // 在主窗口加一个按钮类型指针
p->setText(QString::fromLocal8Bit(“(__)”));
toolBar->addWidget§;
//点击按钮,改变名称
connect(p,&QPushButton::clicked,
= {
p->setText(QString::fromLocal8Bit(“1111”));
}
);
4).添加状态栏(QStatusBar)
/***法一***/
QStatusBar *Bar = statusBar();
QLabel *label = new QLabel(this);
label->setText(QString::fromLocal8Bit("Narmal text file"));
Bar->addWidget(label);
/***法二***/
Bar->addWidget(new QLabel("2",this));
//若想在右边添加状态栏
Bar->addPermanentWidget(new QLabel("3",this));
5).添加浮动窗口(QDockWidget)
QDockWidget *DockWidge = new QDockWidget(this);
//第一个参数,浮动窗口的位置
//第二个参数,QDockWidget类型的指针
addDockWidget(Qt::RightDockWidgetArea,DockWidge);
//给浮动窗口加个编辑器TextEdit
QTextEdit *TextEdit = new QTextEdit(this);
DockWidge->setWindowTitle(QString::fromLocal8Bit("我是浮动窗口"));
DockWidge->setWidget(TextEdit);
整体代码
在构造函数部分添加:
//添加菜单栏
/*****法一*****/
QMenuBar *mBar=menuBar();//
//添加菜单
//给菜单栏加一个菜单"文件",赋给指针pFile,这一步没有用,下面有用
QMenu *Menu = mBar->addMenu(QString::fromLocal8Bit("文件"));
/*****法二*****/
//因为menuBar()是QMenuBar的一个成员函数,返回的是一个对象,所以它可以像对象一样调用函数,可直接
//menuBar()->addMenu(name);
//添加菜单项(按下文件,会出现新建、保存那些菜单项),添加动作
QAction *act = Menu->addAction( QString::fromLocal8Bit("新建"));//给菜单"文件"添加一个动作"新建"
//单击新建,弹出模态对话框 -QDialog
//QAction *p1 = Menu->addAction(QString::fromLocal8Bit("模态对话框"));
connect(act ,&QAction::triggered,
[=]()
{
QDialog dlg;
dlg.exec(); //.exec()是对话框属性变为模态,含义是执行到这里就不会动(主函数里面也是一样)
}
);
Menu->addSeparator();//添加分割线,仅仅为了美观
QAction *open = Menu->addAction(QString::fromLocal8Bit("打开"));//给菜单"文件"添加一个动作"打开"
//单击打开,弹出非模态对话框
//QAction *p2 = Menu->addAction(QString::fromLocal8Bit("非模态对话框"));
connect(open ,&QAction::triggered,//triggered和clicked类似,但应用范围更广
[=]()
{
/*****法一******/
dlg1; //注意这里需要将dlg定义为全局变量,这样运行完show(),dlg就不会释放了,否则运行完,释放dlg,非模态对话框将一闪而过
dlg1.show(); //.show()是对话框属性为模态
/*****法二******/ //缺点:在程序结束时,指针才会释放,若多次使用该对话框,导致内存越用越小,
/*QDialog *p = new QDialog(this);
p->show();*/
/*****法三******/
/*QDialog *p = new QDialog(this);
p->setAttribute(Qt::WA_DeleteOnClose);//窗口关闭自动释放内存
p->show();*/
}
);
//添加工具栏,菜单项的快捷方式
QToolBar *toolBar = addToolBar("");
toolBar->addAction(act);
//给工具栏添加小控件
QPushButton *p = new QPushButton(this); //在主窗口加一个按钮类型指针
p->setText(QString::fromLocal8Bit("(*^__^*)"));
toolBar->addWidget(p);
//点击按钮,改变名称
connect(p,&QPushButton::clicked,
[=]()
{
p->setText(QString::fromLocal8Bit("1111"));
}
);
//状态栏
QStatusBar *Bar = statusBar();
QLabel *label = new QLabel(this);
label->setText(QString::fromLocal8Bit("Narmal text file"));
Bar->addWidget(label);
//法二:
Bar->addWidget(new QLabel("2",this));
//若想在右边添加状态栏
Bar->addPermanentWidget(new QLabel("3",this));
//核心控件(中间内容)
//浮动窗口-QDockWidget
QDockWidget *DockWidge = new QDockWidget(this);
addDockWidget(Qt::RightDockWidgetArea,DockWidge);//第一个参数,浮动窗口的位置
//第二个参数,QDockWidget类型的指针
//给浮动窗口加个编辑器
QTextEdit *TextEdit = new QTextEdit(this);
DockWidge->setWindowTitle(QString::fromLocal8Bit("我是浮动窗口"));
DockWidge->setWidget(TextEdit);
4.运行结果:
补充:标准对话框(关于对话框和问题对话框)和文件对话框
一丶标准对话框
1.关于对话框(模态的)–QMessagebox
代码:
#include “QMessagebox”
QAction *p2 = Menu->addAction(QString::fromLocal8Bit("关于对话框"));
connect(p2 ,&QAction::triggered,
[=]()
{
QMessageBox::about(this,QString::fromLocal8Bit("关于"),
QString::fromLocal8Bit("关于QT"));
}
);
2.问题对话框(常用)–QMessagebox,一般退出时询问是否保存的时候使用
代码:
QAction *p3 = Menu->addAction(QString::fromLocal8Bit("问题对话框"));
connect(p3 ,&QAction::triggered,
[=]()
{
// QMessageBox::question(this,QString::fromLocal8Bit("我是名称"),QString::fromLocal8Bit("are you OK"));
/****默认的是YES/NO,若想改变按钮名称,则***/
QMessageBox::question(this,QString::fromLocal8Bit("我是名称"),QString::fromLocal8Bit("are you OK"),
QMessageBox::Ok,
QMessageBox::Cancel);
/* switch(ret)
{
case QMessageBox::Ok:
qDebug()<<"";
break;
case QMessageBox::Cancel:
break;
default:
break;
}*/
}
);
二、文件对话框
代码:
#include “QFileDialog”
QAction *p4 = Menu->addAction(QString::fromLocal8Bit("文件对话框"));
connect(p4 ,&QAction::triggered,
[=]()
{
QFileDialog::getOpenFileName(this,//指定父对象
"对话框标题",
"../" , //上一级路径
"souce(*.cpp *.h);;Text(*.text);;all(*.*)" //*代码所有的
);
}
);
戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。