MainWindow&QDialog学习
MainWindow-代码生成主窗口部件
使用代码生成菜单栏、工具栏、状态栏、中心部件、衔接部件(浮动窗口)
菜单栏、状态栏、中心部件:在主窗口中只能存在一个,使用set指令进行添加
工具栏、衔接部件:可以存在多个,使用add指令进行添加
示例程序1:
#include "Mainwindow.h"
#include "ui_mainwindow.h"
#include <QToolBar>
#include <QPushButton>
#include <QLabel>
#include <QTextEdit>
#include <QDockWidget>//浮动窗口
#include <QDialog>
#include <QFileDialog>//文件对话框
#include <QColorDialog>//颜色对话框
#include <QFontDialog>//文字对话框
#include <QMessageBox>//消息对话框 警告、普通、错误
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//菜单栏 在主窗口只存在一个set
QMenuBar *menuBar = new QMenuBar;
this->setMenuBar(menuBar);//设置菜单栏
QMenu *menu = menuBar->addMenu("文件");
menu->addAction("打开");
menu->addSeparator();
menu->addAction("新建");
menuBar->addMenu("编辑");
//工具栏 在主窗口可以有多个add
QToolBar *toolBar = new QToolBar;
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);//设置允许停靠范围
toolBar->setMovable(false);//是否可以移动
toolBar->setFloatable(false);//是否可悬浮
this->addToolBar(Qt::TopToolBarArea, toolBar);//设置工具栏
toolBar->addAction("编辑");
toolBar->addSeparator();//添加分割线
toolBar->addAction("打开");
//状态栏 set只能有一个
QStatusBar *status = new QStatusBar;
status->addAction(new QAction("FPS:600"));
status->addWidget(new QPushButton("FPS:600"));//添加按钮
status->addWidget(new QLabel("PIN:600"));//添加文本
status->addPermanentWidget(new QLabel("今天天气真不赖"));//在右边添加
this->setStatusBar(status);
//中心部件 set只能有一个
this->setCentralWidget(new QTextEdit("请输入..."));
//衔接部件(浮动窗口) add可以有多个
QDockWidget *dock = new QDockWidget("文本1");
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);//设置允许停靠范围
this->addDockWidget(Qt::DockWidgetArea::BottomDockWidgetArea, dock);
// ui->menunum1->setTitle("开始执行但不调试");
示例程序2:
#include "mainwindow.h"
#include <QMenuBar>
#include <QToolBar>
#include <QDebug>
#include <QStatusBar>
#include <QPushButton>
#include <QLabel>
#include <QDockWidget>
#include <QTextEdit>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//重置窗口大小
resize(600, 400);
//菜单栏 最多只能有一个
//菜单栏创建
QMenuBar * bar = menuBar();
//将菜单栏放入到窗口中
setMenuBar(bar);
//创建菜单
QMenu * fileMenu = bar->addMenu("文件");
QMenu * editMenu = bar->addMenu("编辑");
//创建菜单项
QAction * newAction =fileMenu->addAction("新建");
//添加分隔线
fileMenu->addSeparator();
QAction * openAction =fileMenu->addAction("打开");
//工具栏 可以有多个
QToolBar * toolBar = new QToolBar(this);
addToolBar(Qt::LeftToolBarArea, toolBar);
//后期设置 只允许 左右停靠
toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
//设置浮动
toolBar->setFloatable(false);
//设置移动(总开关)
toolBar->setMovable(false);
//工具栏中可以设置内容
toolBar->addAction(newAction);
toolBar->addSeparator();
toolBar->addAction(openAction);
//工具栏中添加控件
QPushButton *btn = new QPushButton("aa", this);
toolBar->addWidget(btn);
//状态栏 最多有一个
QStatusBar *stBar = statusBar();
//设置到窗口中
setStatusBar(stBar);
//放标签控件
QLabel *label = new QLabel("提示信息", this);
stBar->addWidget(label);
QLabel *label2 = new QLabel("右侧提示信息", this);
stBar->addPermanentWidget(label2);
//铆接部件(浮动窗口)
QDockWidget * dockWidget = new QDockWidget("浮动", this);
addDockWidget(Qt::BottomDockWidgetArea, dockWidget);
//设置后期停靠区域,只允许上下
dockWidget->setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
//设置中心部件 只能一个
QTextEdit * edit = new QTextEdit(this);
setCentralWidget(edit);
}
MainWindow::~MainWindow()
{
}
QDialog&QMessageBox
对话框(模态、非模态)、消息对话框、颜色对话框、文件对话框、字体对话框
示例程序3
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDialog>
#include <QtDebug>
#include <QMessageBox>
#include <QColorDialog>
#include <QFileDialog>
#include <QFontDialog>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//点击新建按钮,弹出一个对话框
connect(ui->actionnew, &QAction::triggered, [=](){
//对话框 分类
//模态对话框(不可以对其他窗口进行操作) 非模态对话框(可以对其他窗口进行操作)
//模态创建 阻塞
QDialog dlg(this);
dlg.resize(400, 200);
dlg.exec(); //代码阻塞
qDebug() << "模态对话框弹出了" << endl;
//非模态对话框
QDialog *dlg2 = new QDialog(this);
dlg2->resize(400, 200);
dlg2->show();
dlg2->setAttribute(Qt::WA_DeleteOnClose); //55号 属性 关闭小窗口即释放内存
qDebug() << "非模态对话框弹出了" << endl;
//消息对话框
//错误对话框
QMessageBox::critical(this, "critical", "错误");
//信息对话框
QMessageBox::information(this, "info", "信息");
//问题对话框
//参数1 父亲 参数2 标题 参数3 提示内容 参数4 按键类型 参数5 默认关联回车按键
if (QMessageBox::Save == QMessageBox::question(this, "ques", "提问", QMessageBox::Save|QMessageBox::Cancel, QMessageBox::Cancel))
{
qDebug() << "选择的是保存" << endl;
}
else
{
qDebug() << "选择的是取消" << endl;
}
//警告对话框
QMessageBox::warning(this, "warning", "警告");
//其他标准对话框
//颜色对话框
QColor color = QColorDialog::getColor(QColor(255, 0, 0));
qDebug() << "r = " << color.red() << "g = " << color.green() << "b = " << color.blue() << endl;
//文件对话框 参数1 父亲 参数2 标题 参数3 默认打开路径 参数4 过滤文件格式
//返回值是 选取的路径
QFileDialog::getOpenFileName(this, "打开文件", "C:/Users/ds/Desktop");
QString str = QFileDialog::getOpenFileName(this, "打开文件", "C:\\Users\\ds\\Desktop", "(*.docx)");
qDebug() << str << endl;
//字体对话框
bool flag;
QFont font = QFontDialog::getFont(&flag, QFont("宋体", 36));
qDebug() << "字体:" << font.family().toUtf8().data() << "字号:" << font.pointSize() << "是否加粗: " << font.bold()
<< "是否倾斜:" << font.italic() << endl;
});
}
MainWindow::~MainWindow()
{
delete ui;
}
示例程序4(头文件衔接上面MainWindow示例程序1)
//对话框 QT中内置了大量的对话框 供开发者使用
//自定义对话框
//1.模态对话框:阻塞式对话框 无法对其他对话框做操作
//2.非模态对话框:非阻塞式 激活时可以对其他窗口做操作
//模态对话框
connect(ui->btn_1, &QPushButton::clicked, [this](){
//创建窗口 new不对,每点一次就new一个,不太好
QDialog dialog(this);
dialog.resize(400, 400);
dialog.exec(); //进入消息捕捉循环
// dialog.show();
});
connect(ui->btn_2, &QPushButton::clicked, [this](){
// QDialog dialog(this);
// dialog.resize(400, 400);
// dialog.exec(); //进入消息捕捉循环
// dialog.show();
//方式二
QDialog *dialog = new QDialog(this);
dialog->resize(400, 400);
dialog->show();
dialog->setAttribute(Qt::WA_DeleteOnClose); //55号 属性 关闭小窗口即释放内存
});
/*系统内置对话框(标准对话框)
* 1.文件对话框
* 2.颜色对话框
* 3.文字对话框
* 4.消息对话框 (1 父亲 2 标题 3 内容 4 按钮 5 回车时默认选择)
*/
connect(ui->file_btn, &QPushButton::clicked, [this](){
//文件对话框
//参数1 父亲 参数2 标题 参数3 默认打开路径 参数4 过滤文件类型
QString fileName = QFileDialog::getOpenFileName(this, "打开文本文件", "C:\\Users\\ds\\Desktop", "(*.docx)");
qDebug() << fileName;
//颜色对话框
//默认颜色 父亲 标题
auto color = QColorDialog::getColor(Qt::blue, this, "文字颜色");
ui->textEdit->setTextColor(color);
ui->textEdit->setText("jjjjjjj");
//文字对话框
bool bl = true;//是否使用用户选择的字体
QFont font = QFontDialog::getFont(&bl);
ui->label->setFont(font);
ui->label->setText("hello");
qDebug() << bl;
//消息对话框
QMessageBox::critical(this, "错误", "你闹坏了", QMessageBox::No);
QMessageBox::warning(this, "警告", "你闹坏了");
QMessageBox::information(this, "提示", "你闹坏了");
auto btn = QMessageBox::question(this, "问题", "你爱我吗", QMessageBox::Yes|QMessageBox::No, QMessageBox::No);
if(btn == QMessageBox::Yes)
{
QMessageBox::information(this, "", "我也爱你");
}
else
{
QMessageBox::information(this, "", "滚吧");
}
});
}
MainWindow::~MainWindow()
{
delete ui;
}