如何使用Qt5构建包含菜单栏、工具栏、核心控件及浮动窗口的完整用户界面?

2026-04-10 10:041阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1914个文字,预计阅读时间需要8分钟。

如何使用Qt5构建包含菜单栏、工具栏、核心控件及浮动窗口的完整用户界面?

一. 对话框内容概要- 菜单栏 - 菜单项 - 模式窗口/非模式窗口- 工具栏- 状态栏- 核心控件- 浮动窗口

二. 操作步骤

1.新建项目

- 在UI界面添加TextEdit控件(显示内容)

2.包含头文件


一.对话框内容概要

  • 菜单栏—>菜单项—>模态窗口/非模态窗口
  • 工具栏
  • 状态栏
  • 核心控件
  • 浮动窗口

二 .操作步骤:
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()是对话框属性变为模态,含义是执行到这里就不会动(主函数里面也是一样) } );

. 添加“”打开“”菜单项

如何使用Qt5构建包含菜单栏、工具栏、核心控件及浮动窗口的完整用户界面?

//给菜单"文件"添加一个动作"打开" 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(*.*)" //*代码所有的 ); } );




戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。


本文共计1914个文字,预计阅读时间需要8分钟。

如何使用Qt5构建包含菜单栏、工具栏、核心控件及浮动窗口的完整用户界面?

一. 对话框内容概要- 菜单栏 - 菜单项 - 模式窗口/非模式窗口- 工具栏- 状态栏- 核心控件- 浮动窗口

二. 操作步骤

1.新建项目

- 在UI界面添加TextEdit控件(显示内容)

2.包含头文件


一.对话框内容概要

  • 菜单栏—>菜单项—>模态窗口/非模态窗口
  • 工具栏
  • 状态栏
  • 核心控件
  • 浮动窗口

二 .操作步骤:
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()是对话框属性变为模态,含义是执行到这里就不会动(主函数里面也是一样) } );

. 添加“”打开“”菜单项

如何使用Qt5构建包含菜单栏、工具栏、核心控件及浮动窗口的完整用户界面?

//给菜单"文件"添加一个动作"打开" 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(*.*)" //*代码所有的 ); } );




戳戳小手帮忙点个免费的赞和关注吧,嘿嘿。