目录
Qt窗口是通过QMainWindow类来实现的。
QMainWindow是一个为用户提供主窗口程序的类,继承自QWidget类,并且提供了一个预定义的布局。QMainWindow包含一个菜单栏(menubar)、多个工具栏(toolbars)、多个浮动窗口(铆接部件)(dockwidgets)、一个状态栏(statusbar)和一个中心部件(centralwidget),它是许多应用程序的基础,如文本编辑器,图片编辑器等。
1. QMenuBar 菜单栏
Qt中的菜单栏是通过QMenuBar这个类来实现的。一个主窗口最多只有一个菜单栏。位于主窗口顶部、主窗口标题下面。
菜单栏中包含菜单,菜单中包含菜单项。
示例1:使用图形化界面创建:
1.新建项目时选择QMainWindow:
2.选择mainwindow.ui:双击->编辑菜单名称
效果如图:
示例2:编写代码创建菜单:
ainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//1.先创建一个菜单栏
QMenuBar* menubar = new QMenuBar();
this->setMenuBar(menubar);
//2.先创建一个菜单栏
QMenu* menu1 = new QMenu("文件");
QMenu* menu2 = new QMenu("编辑");
QMenu* menu3 = new QMenu("构建");
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);
//3.给菜单添加菜单项
QAction* action1 = new QAction("新建");
QAction* action2 = new QAction("打开");
QAction* action3 = new QAction("保存");
QAction* action4 = new QAction("另存为");
QAction* action5 = new QAction("退出");
menu1->addAction(action1);
menu1->addAction(action2);
menu1->addAction(action3);
menu1->addAction(action4);
menu1->addAction(action5);
//给action添加信号槽
connect(action5,&QAction::triggered,this,&MainWindow::close);
}
效果如图:点击退出窗口关闭
示例3:给菜单增加快捷键
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建菜单栏
QMenuBar* menubar = new QMenuBar();
this->setMenuBar(menubar);
//创建菜单
QMenu* menu1 = new QMenu("文件(&F)");
QMenu* menu2 = new QMenu("编辑(&E)");
QMenu* menu3 = new QMenu("构建(&B)");
QMenu* menu4 = new QMenu("调试(&D)");
QMenu* menu5 = new QMenu("工具(&T)");
menubar->addMenu(menu1);
menubar->addMenu(menu2);
menubar->addMenu(menu3);
menubar->addMenu(menu4);
menubar->addMenu(menu5);
//创建菜单项
QAction* action1 = new QAction("菜单项1");
QAction* action2 = new QAction("菜单项2");
QAction* action3 = new QAction("菜单项3");
QAction* action4 = new QAction("菜单项4");
QAction* action5 = new QAction("菜单项5");
menu1->addAction(action1);
menu2->addAction(action2);
menu3->addAction(action3);
menu4->addAction(action4);
menu5->addAction(action5);
}
效果如图:使用alt+F键
示例4:给菜单项添加快捷键
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMenuBar* menubar = new QMenuBar();
this->setMenuBar(menubar);
QMenu* menu1 = new QMenu("文件(&F)");
QMenu* menu2 = new QMenu("编辑(&E)");
menubar->addMenu(menu1);
menubar->addMenu(menu2);
//创建4个菜单项
QAction* action1 = new QAction("菜单项1(&A)");
QAction* action2 = new QAction("菜单项1(&W)");
QAction* action3 = new QAction("菜单项1(&E)");
QAction* action4 = new QAction("退出(&Q)");
menu1->addAction(action1);
menu1->addAction(action2);
menu1->addAction(action3);
menu1->addAction(action4);
//为了方便观察快捷键起作用,绑定槽函数令使用action4时退出窗口
connect(action4,&QAction::triggered,this,&MainWindow::close);
}
效果如图:先alt+F,再alt+Q,窗口退出:
示例5: 添加子菜单
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建菜单栏
QMenuBar* menubar = new QMenuBar();
this->setMenuBar(menubar);
//创建菜单
QMenu* menuParent1 = new QMenu("父菜单1");
QMenu* menuParent2 = new QMenu("父菜单2");
QMenu* menuChild1 = new QMenu("子菜单1");
//将菜单放入菜单栏
menubar->addMenu(menuParent1);
menubar->addMenu(menuParent2);
menuParent1->addMenu(menuChild1);
//创建菜单项
QAction* action1 = new QAction("菜单项1");
QAction* action2 = new QAction("菜单项2");
QAction* action3 = new QAction("菜单项3");
QAction* action4 = new QAction("菜单项4");
QAction* menuChild2 = new QAction("菜单2");
menuParent1->addAction(menuChild2);
//将菜单项放入菜单
menuChild1->addAction(action1);
menuChild1->addAction(action2);
menuChild1->addAction(action3);
menuChild1->addAction(action4);
}
效果如图:
示例6:添加分割线->使用addSeparator函数添加分割线
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建菜单栏
QMenuBar* menubar = new QMenuBar();
this->setMenuBar(menubar);
//创建菜单
QMenu* menu1 = new QMenu("菜单1");
QMenu* menu2 = new QMenu("菜单2");
//将菜单放到菜单栏
menubar->addMenu(menu1);
menubar->addMenu(menu2);
//创建菜单项
QAction* action1 = new QAction("菜单项1");
QAction* action2 = new QAction("菜单项2");
QAction* action3 = new QAction("菜单项3");
QAction* action4 = new QAction("菜单项4");
//将菜单项放入菜单 使用addSeparator添加分割线
menu1->addAction(action1);
menu1->addSeparator();
menu1->addAction(action2);
menu1->addSeparator();
menu1->addAction(action3);
menu1->addSeparator();
menu1->addAction(action4);
}
示例7:添加图标
1.先以qrc文件的方式添加图片:
2.编写代码
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//1. 创建菜单栏
QMenuBar* menubar = new QMenuBar();
// 将菜单栏添加到窗口
this->setMenuBar(menubar);
//2. 创建菜单
QMenu* menu = new QMenu("菜单");
// 将菜单放入菜单栏
menubar->addMenu(menu);
//3. 创建菜单项
QAction* action1 = new QAction("打开");
action1->setIcon(QIcon(":/open.png"));
QAction* action2 = new QAction("退出");
action2->setIcon(QIcon(":/exit.png"));
// 将菜单项放入菜单
menu->addAction(action1);
menu->addAction(action2);
}
效果如图:
注意:
在以上所有实例中我们创建菜单栏(QMenuBar) 所写的代码均为:
//1. 创建菜单栏 QMenuBar* menubar = new QMenuBar(); // 将菜单栏添加到窗口 this->setMenuBar(menubar);
① 这样写会造成内存泄漏,原因是之前程序自己就已经创建好了一个QMenuBar,当设置新的QMenuBar进来时,就会导致旧的QMenuBar脱离了Qt的对象树,意味着后续就无法对这个对象进行释放了;
② 程序如果窗口关闭,对象树释放,此时进程也就结束了,进程结束,自然而然所有内存都被回收,上述所说的 内存泄漏也就不会造成影响,如果涉及到多窗口程序或者涉及到窗口之间的频繁跳转,内存泄漏问题可能就会愈加严重;
③ 所以规范的代码应该为:
//1. 创建菜单栏 QMenuBar* menubar = this->menuBar(); // 将菜单栏添加到窗口 this->setMenuBar(menubar);
代码的意思为:1.如果QMenuBar已经存在,直接获取并返回;2.如果QMenuBar不存在,就先创建一个新的再返回。
2. QToolBar 工具栏
工具栏是应用程序中集成各种功能实现快捷键使用的一个区域。可以有多个,也可以没有,它并不是应用程序中必须存在的组件。它是一个可移动的组件,它的元素可以是各种窗口组件,它的元素通常以图标按钮的方式存在。
示例1:添加工具栏和快捷项
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//1. 创建工具栏 工具栏是需要手动创建出来的,自身不会创建(需包含头文件QToolBar)
QToolBar* toolbar = new QToolBar();
this->addToolBar(toolbar);
//2. 创建快捷项
QAction* action1 = new QAction("保存");
QAction* action2 = new QAction("退出");
// 为快捷项添加图标
action1->setIcon(QIcon(":/open.png"));
action2->setIcon(QIcon(":/exit.png"));
// 将快捷项添加到工具栏
toolbar->addAction(action1);
toolbar->addAction(action2);
//连接信号槽观察相应结果
connect(action2,&QAction::triggered,this,&MainWindow::close);
}
效果如图:点击退出快捷项窗口关闭
示例2:在上述工具栏添加菜单栏
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//1. 创建菜单栏
QMenuBar* menuBar = this->menuBar();
this->setMenuBar(menuBar);
//1. 创建工具栏 工具栏是需要手动创建出来的,自身不会创建(需包含头文件QToolBar)
QToolBar* toolbar = new QToolBar();
this->addToolBar(toolbar);
//2. 创建两个菜单项/快捷项
QAction* action1 = new QAction("保存");
QAction* action2 = new QAction("退出");
// 为菜单项/快捷项添加图标
action1->setIcon(QIcon(":/open.png"));
action2->setIcon(QIcon(":/exit.png"));
// 将菜单项添加到菜单
menuBar->addAction(action1);
menuBar->addAction(action2);
// 也可以将快捷项添加到工具栏
toolbar->addAction(action1);
toolbar->addAction(action2);
//连接信号槽观察相应结果
connect(action2,&QAction::triggered,this,&MainWindow::close);
}
效果如图:
示例3:设置工具栏停靠位置
①在创建工具栏的同时,也可以设置工具栏的位置,其默认位置是在窗口的最上面;如上述代码,默认在最上面显示;
工具栏允许停靠的区域由QToolBar类提供的allowAreas()函数决定,其中可以设置的位置包括:
Qt::LeftToolBarArea 停靠在左侧;
Qt::RightToolBarArea 停靠在右侧;
Qt::TopToolBarArea 停靠在顶部;
Qt::BottomToolBarArea 停靠在底部;
Qt::AllToolBarAreas 以上四个位置都可停靠。
②工具栏的浮动属性可以通过QToolBar类提供的setFloatable()函数来设置,
setFloatable()函数原型为: void setFloatable (bool floatable);
参数: true:浮动; false:不浮动;
③设置⼯具栏的移动属性可以通过QToolBar类提供的setMovable()函数来设置,
setMovable()函数原型为void setMovable(bool movable);
参数: true:浮动; false:不浮动。
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//1. 创建两个工具栏
QToolBar* toolbar1 = new QToolBar();
QToolBar* toolbar2 = new QToolBar();
// 设置toolbar1为默认停靠位置
this->addToolBar(toolbar1);
// 设置toolbar2停靠在左边
this->addToolBar(Qt::LeftToolBarArea,toolbar2);
// 只允许toolbar2停靠在左侧或右侧
toolbar2->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
// 设置toolbar2不允许浮动
toolbar2->setFloatable(false);
// 设置toolbar2不允许移动
toolbar2->setMovable(false);
//2. 创建快捷项
QAction* action1 = new QAction("工具1");
QAction* action2 = new QAction("工具2");
QAction* action3 = new QAction("工具3");
QAction* action4 = new QAction("工具4");
// 将快捷项放入工具栏
toolbar1->addAction(action1);
toolbar1->addAction(action2);
toolbar2->addAction(action3);
toolbar2->addAction(action4);
}
效果如图:
3. QStatusBar 状态栏
状态栏是应用程序中输出简要信息的区域。一般位于主窗口的最底部,一个窗口最多只能有一个状态栏。在Qt中,状态栏是通过QStatusBar类来实现的。
在状态栏中可以显示的消息类型有:
实时消息:如当前程序状态;
永久消息:如程序版本号,机构名称;
进度消息:如进度条提示,百分百提示。
示例:创建一个状态栏,并放入一些控件
#include <QLabel>
#include <QProgressBar>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//1.创建状态栏
QStatusBar* statusbar = this->statusBar();
this->setStatusBar(statusbar);
//让状态栏显示临时信息
//statusbar->showMessage("这是一个状态栏");
//2.给状态栏中添加子控件
//添加QLabel
QLabel* label = new QLabel("这是一个QLabel");
statusbar->addWidget(label);
//添加QProgressBar
QProgressBar* progressbar = new QProgressBar();
progressbar->setRange(0,100);
progressbar->setValue(50);
statusbar->addWidget(progressbar);
//添加QPushButton
QPushButton* button = new QPushButton("按钮");
statusbar->addWidget(button);
}
效果如图:
4. QDockWidget 浮动窗口
在Qt中,浮动窗口也称之为铆接部件。浮动窗口是通过QDockWidget类来实现浮动的功能。浮动窗口⼀般是位于核心部件的周围,可以有多个。
示例:给主窗口添加一个子窗口
浮动窗口是位于中心部件的周围。可以通过QDockWidget类中提供setAllowedAreas()函数设置其允许停靠的位置。其中可以设置允许停靠的位置有:
Qt::LeftDockWidgetArea 停靠在左侧;
Qt::RightDockWidgetArea 停靠在右侧;
Qt::TopDockWidgetArea 停靠在顶部;
Qt::BottomDockWidgetArea 停靠在底部;
Qt::AllDockWidgetAreas 以上四个位置都可停靠。
#include <QDockWidget>
#include <QWidget>
#include <QVBoxLayout>
#include <QLabel>
#include <QPushButton>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//给主窗口添加一个子窗口
QDockWidget* dockwidget = new QDockWidget();
//使用addDockWidget方法,把浮动窗口加入到子窗口中
this->addDockWidget(Qt::LeftDockWidgetArea,dockwidget);
//给浮动窗口设置标题
dockwidget->setWindowTitle("浮动窗口");
//给浮动窗口内部添加一些其他控件
//不能直接给这个浮动窗口添加控件,而是需要先创建一个单独的QWidget,把要添加的控件加入到QWidget中
//然后再把这个QWidget设置到dockwidget中
QWidget* widget = new QWidget();
dockwidget->setWidget(widget);
//创建布局管理器,把布局管理器设置到QWidget中
QVBoxLayout* layout = new QVBoxLayout;
widget->setLayout(layout);
//创建label到layout中
QLabel* label = new QLabel("这是label");
layout->addWidget(label);
//创建按钮到layout中
QPushButton* button = new QPushButton("按钮");
layout->addWidget(button);
//设置浮动窗口停靠的位置
dockwidget->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::TopDockWidgetArea);
}
效果如图:
5. QDialog 对话框
对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口,出现在程序最上层,用于实现短期任务或者简洁的用户交互。
Qt常用的内置对话框有:QFiledialog(文件对话框)、QColorDialog(颜色对话框)、QFontDialog (字体对话框)、QInputDialog(输入对话框)和QMessageBox(消息框)。
示例1:在主窗口通过点击按钮弹出一个对话框
1.先创建一个QMainwindow项目
2.增加按钮控件并编写槽函数
void MainWindow::on_pushButton_clicked()
{
//创建一个对话框(需包含QDialog头文件)
QDialog* dialog = new QDialog(this);
//设置对话框标题
dialog->setWindowTitle("标题!!");
//设置对话框尺寸
dialog->resize(400,300);
//通过show方法显示出对话框
dialog->show();
//其实代码写到这里就可以结束了,但是应该思考一个问题
//dialog是我们new出来的,每点击一次按钮都会创建一个新的dialog
//所以在这里如果能考虑到内存泄漏的问题,那么代码就更完美了
//delete dialog;
//这样写会发现点击按钮后,对话框会一闪而过,即刚创建就被销毁了
//正确的做法应该是把delete和按钮的点击信号关联起来
//在点击按钮的时候,触发delete
//Qt直接给QDialog设置了一个属性,可以通过设置属性,完成上述效果
dialog->setAttribute(Qt::WA_DeleteOnClose);
}
效果如图:
示例2:自定义对话框
1. 在QMainwindow项目中,用图形化界面添加一个按钮:
2.在QMainwindow项目中再添加一个Dialog类
2.在mainwindow.cpp中为主窗口的按钮设置槽函数
void MainWindow::on_pushButton_clicked()
{
Dialog* dialog = new Dialog(this);
dialog->resize(400,300);
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->show();
}
3.转到dialog.cpp为对话框编写代码
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>
Dialog::Dialog(QWidget *parent) : QDialog(parent)
{
//创建出一些控件,加入到Dialog中(以Dialog作为父窗口)
QVBoxLayout* layout = new QVBoxLayout();
this->setLayout(layout);
QLabel* label = new QLabel("这是一个对话框",this);
QPushButton* button = new QPushButton("关闭",this);
layout->addWidget(label);
layout->addWidget(button);
connect(button,&QPushButton::clicked,this,&Dialog::close);
}
效果如图:
示例3:使用图形化界面自定义对话框
1.同示例2的1
2.创建新文件
此时就出现了两个ui文件:
3.在dialog.ui中创建相应控件
4.
4.为主窗口的按钮设计槽函数
void MainWindow::on_pushButton_clicked()
{
//弹出自定义对话框
Dialog* dialog = new Dialog(this);
dialog->setAttribute(Qt::WA_DeleteOnClose);
dialog->show();
}
5.为子窗口的按钮编写槽函数
void Dialog::on_pushButton_clicked()
{
this->close();
}
效果如图:
示例4:模态对话框与非模态对话框
模态对话框:弹出对话框时,用户无法操作父窗口,必须要完成对话框内部的操作,比如关闭对话框之后父窗口才能正常操作;
非模态对话框:弹出对话框时,用户可以操作父窗口。
很明显,以上示例的都是非模态对话框,要想实现模态对话框,只需将dialog->show();改为dialog->exec();
如示例3,将代码修改:
void MainWindow::on_pushButton_clicked()
{
//弹出自定义对话框
Dialog* dialog = new Dialog(this);
dialog->setAttribute(Qt::WA_DeleteOnClose);
//非模态对话框
//dialog->show();
//模态对话框
dialog->exec();
}
效果如图:
5.1 Qt内置对话框
Qt提供了多种可复用的对话框类型,即Qt标准对话框。Qt标准对话框全部继承于QDialog类。常用标准对话框如下:
1. QMessageBox 消息对话框
QMessageBox用来显示一个消息给用户,并且让用户进行一个简单的选择。
QMessageBox类中定义了静态成员函数,可以直接调用创建不同风格的消息对话框,其中包括:
示例1:
(还是QMainwindow项目)
添加按钮后编写槽函数:
void MainWindow::on_pushButton_clicked()
{
//创建QMessageBox(需包含QMessageBox头文件)
QMessageBox* messagebox = new QMessageBox(this);
messagebox->setWindowTitle("标题");
messagebox->setText("文本!!!");
messagebox->setIcon(QMessageBox::Warning);
messagebox->setStandardButtons(QMessageBox::Ok | QMessageBox::Save | QMessageBox::Cancel);
messagebox->exec();
messagebox->setAttribute(Qt::WA_DeleteOnClose);
}
效果如图:
示例2:在示例1中我们希望为子窗口的按钮添加响应(自定义按钮)
void MainWindow::on_pushButton_clicked()
{
//创建QMessageBox(需包含QMessageBox头文件)
QMessageBox* messagebox = new QMessageBox(this);
messagebox->setWindowTitle("标题");
messagebox->setText("文本!!!");
messagebox->setIcon(QMessageBox::Warning);
//① 使用标准按钮,无法进行信号槽的连接。(按钮是QMessageBox自己生成的)
messagebox->setStandardButtons(QMessageBox::Ok | QMessageBox::Save | QMessageBox::Cancel);
//② 生成自定义按钮
// QPushButton* button = new QPushButton("按钮",messagebox);
// messagebox->addButton(button,QMessageBox::AcceptRole);
//通过connect连接信号槽,针对当前点击的按钮进行相关操作
//点击按钮,对话框关闭之后,此时就能获取到exec的返回值,以此就可以知道我们点击的是哪个按钮,从而执行需要的响应
int result = messagebox->exec();
if(result == QMessageBox::Ok){
qDebug() << "Ok";
}else if(result == QMessageBox::Save){
qDebug() << "Save";
}else if(result == QMessageBox::Cancel){
qDebug() << "Cancel";
}
messagebox->setAttribute(Qt::WA_DeleteOnClose);
}
效果如图:
示例3:快速创建对话框(使用静态函数)
同样给按钮编写槽函数:
void MainWindow::on_pushButton_clicked()
{
int result = QMessageBox::warning(this,"对话框标题","对话框文本",QMessageBox::Ok | QMessageBox::Cancel);
if(result == QMessageBox::Ok){
qDebug() << "Ok";
}else if(result == QMessageBox::Cancel){
qDebug() << "Canle";
}
}
效果如图:
2. QColorDialog 颜色对话框
颜色对话框的功能是允许用户选择颜色。
常用方法介绍:
1.QColorDialog(QWidget*parent=nullptr) —— 创建对象的同时设置父对象;
2.QColorDialog(const QColor &initial, QWidget *parent = nullptr) —— 创建对象的同时通过QColor 对象设置默认颜色和父对象;
3.voidsetCurrentColor(const QColor &color)—— 设置当前颜色对话框;
4.QColorcurrentColor() const —— 获取当前颜色对话框;
5.QColorgetColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions()) —— 打开颜色选择对话框,并返回⼀个QColor对象;
参数说明: initial:设置默认颜色;parent:设置父对象;title:设置对话框标题;options:设置选项
6.voidopen(QObject*receiver,constchar*member) —— 打开颜色对话框。
示例:
同样对按钮编写槽函数:
void MainWindow::on_pushButton_clicked()
{
//函数的返回值就是选择的颜色
QColor color = QColorDialog::getColor(QColor(0,255,255),this,"选择颜色");
//基于选择的颜色改变窗口的背景色
//方法①
//QString style = "background-color:rgb(" + QString::number(color.red()) + " , " + QString::number(color.green())
+ " , " + QString::number(color.blue()) + ");";
//方法②
char style[1024] = {0};
sprintf(style,"background-color:rgb(%d,%d,%d);",color.red(),color.green(),color.blue());
this->setStyleSheet(style);
}
效果如图:
3. QFileDialog 文件对话框
文件对话框用于应用程序中需要打开⼀个外部文件或需要将当前内容存储到指定的外部文件。
常用方法介绍:
① 打开文件(一次只能打开一个文件)QString getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
② 打开多个文件(一次打开多个文件)
QStringList getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
③ 保存文件
QString getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options())
参数说明:
参数1:parent 父亲;参数2:caption 对话框标题;参数3:dir 默认打开的路径
示例:
1.创建两个按钮
2.编写槽函数
void MainWindow::on_pushButton_clicked()
{
QFileDialog::getOpenFileName(this);
}
void MainWindow::on_pushButton_2_clicked()
{
QFileDialog::getSaveFileName(this);
}
效果如图:
4. QFontDialog 字体对话框
Qt 中提供了预定义的字体对话框类QFontDialog,用于提供选择字体的对话框部件。
示例:
void MainWindow::on_pushButton_clicked()
{
bool ok = false;
QFont font = QFontDialog::getFont(&ok);
ui->pushButton->setFont(font);
}
效果如图:
5. QInputDialog 输入对话框
Qt 中提供了预定义的输入对话框类:QInputDialog,用于进行临时数据输入的场合。
常用方法介绍:
1.双精度浮点型输入数据对话框
double getDouble(QWidget*parent,constQString&title, const QString&label, double value =0,doublemin=-2147483647,doublemax=2147483647,intdecimals=1,bool*ok =nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
2.整型输入数据对话框
int getInt (QWidget *parent, const QString &title, const QString &label, int value = 0, int min=-2147483647,intmax=2147483647,intstep=1,bool*ok=nullptr,Qt::WindowFlags flags = Qt::WindowFlags());
3.选择条目型输入数据框
QString getItem (QWidget*parent, const QString&title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok =nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone) ;
参数说明: parent:父亲;title:对话框标题;label:对话框标签;items:可供选择的条目
示例:
1.ui界面创建控件
2.编写槽函数
void MainWindow::on_pushButton_clicked()
{
int result = QInputDialog::getInt(this,"整数输入对话框","请输入一个整数");
}
void MainWindow::on_pushButton_2_clicked()
{
double result = QInputDialog::getDouble(this,"小数输入对话框","请输入一个小数");
}
void MainWindow::on_pushButton_3_clicked()
{
QStringList items;
items.push_back("哈哈哈哈");
items.push_back("呵呵呵呵");
items.push_back("嘻嘻嘻嘻");
items.push_back("嘿嘿嘿嘿");
QString item = QInputDialog::getItem(this,"条目输入对话框","请输入条目",items);
}
3.效果如图: