效果图:
注意:
消息对话框中 critical information warning 基本使用都是一样的,可以查QMessageBox类中静态成员函数
代码段:
/********************main.cpp******************/
#include "mainwindow.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
/******************mainwindow.h***************/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtWidgets/QMainWindow>
#include "ui_mainwindow.h"
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
};
#endif // MAINWINDOW_H
/*****************mainwindow.cpp************/
#include "mainwindow.h"
#include <QPushButton>
#include <QLabel>
#include <QDockWidget>
#include <QTextEdit>
#include <QDialog>
#include<QAction>
#include<QMessageBox>
#include<QDebug>
#pragma execution_character_set("utf-8")//防止乱码问题
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
//重置窗口大小
resize(600, 400);
/*************菜单栏*************/
//菜单栏创建,并添加到MainWindow
QMenuBar * bar = new QMenuBar;
setMenuBar(bar); //添加菜单栏
//在菜单栏添加菜单
QMenu* fileMenu = bar->addMenu("文件");
QMenu* editMenu = bar->addMenu("编辑");
//在菜单中添加菜单项
QAction * newAction = fileMenu->addAction("新建");
newAction->setIcon(QIcon(":Resources/lufei.jpg"));
//添加分割线
fileMenu->addSeparator();
QAction* openAction = fileMenu->addAction("打开");
openAction->setIcon(QIcon(":Resources/zuolong.jpg"));
/*************工具栏*************/
//工具栏 可以有多个
QToolBar * toolbar = new QToolBar;
addToolBar(Qt::LeftToolBarArea,toolbar); //在mainwindow中添加toolbar,默认放在左侧
toolbar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); //允许移动的范围
toolbar->setFloatable(true); //允许浮动
//toolbar->setMovable(false); //设置移动(总开关)
//将newAction放在工具栏中
toolbar->addAction(newAction);
toolbar->addSeparator(); //分割线调用一次只出现一条分割线
//将openAction放在工具栏中
toolbar->addAction(openAction);
toolbar->addSeparator(); //添加分割线
//工具栏中也可以添加控件
QPushButton * btn = new QPushButton("mainWindow");
toolbar->addWidget(btn);
QPushButton * btnNotMotai = new QPushButton("非模态对话框");
toolbar->addWidget(btnNotMotai);
QPushButton * btnMotai = new QPushButton("模态对话框");
toolbar->addWidget(btnMotai);
QPushButton * btnMessageBox = new QPushButton("消息对话框");
toolbar->addWidget(btnMessageBox);
//通过lambda表达式,以匿名对象方式创建临时槽函数
connect(btn, &QPushButton::clicked, [=]() {
QMainWindow * window = new QMainWindow(btn);
window->resize(400, 200);
QToolBar * testbutton = new QToolBar(window);
window->addToolBar(Qt::LeftToolBarArea, testbutton);
QAction * text = testbutton->addAction("文本");
window->setAttribute(Qt::WA_DeleteOnClose); //防止内存泄漏
window->show();
});
//非模态方式创建对话框,打开对话框时候可以操作其它窗口
//注意:此时只有在btnMotai按钮释放时候,dialog对象才会被释放。如果长此以往,可能会发生内存泄漏
//需要设置一个Qt::WA_DeleteOnClose属性
connect(btnNotMotai, &QPushButton::clicked, [=]() {
QDialog * dialog = new QDialog(btnNotMotai); //创建的对象要放堆上
dialog->resize(200, 100);
dialog->setAttribute(Qt::WA_DeleteOnClose); //55号,在关闭的时候释放掉对象
dialog->show();
});
//模态方式创建对话框,打开对话框时候不可以操作其它窗口
connect(btnMotai, &QPushButton::clicked, [=]() {
QDialog * dialog = new QDialog(btnMotai); //创建的对象要放堆上
dialog->resize(200, 100);
dialog->setAttribute(Qt::WA_DeleteOnClose); //55号,在关闭的时候释放掉对象
dialog->exec(); //设置模态属性
});
//消息对话框
connect(btnMessageBox, &QPushButton::clicked, [=]() {
//错误对话框
//QMessageBox::critical(this, "危险", "错误"); //还有一些对话框,可查QMessageBox
//消息对话框
//QMessageBox::information(this, "infor", "消息");
//警告对话框
//QMessageBox::warning(this, "warning", "警告");
//提问对话框
//父类 title txt 显示按钮 默认关联回车按钮
if (QMessageBox::question(this, "ques", "提问", QMessageBox::Save | QMessageBox::Cancel, QMessageBox::Cancel) == QMessageBox::Save)
{
qDebug() << "选择的是保存";
}
else
qDebug() << "选择的是取消";
});
/***********状态栏***************/
QStatusBar * stBar = new QStatusBar;
setStatusBar(stBar); //状态栏默认就在最下面
QLabel * labelSt1 = new QLabel("默认左侧状态信息",stBar);
stBar->addWidget(labelSt1); //放左侧信息
QLabel * labelSt2 = new QLabel("设置右侧状态信息",stBar); //放右侧信息
stBar->addPermanentWidget(labelSt2);
/************铆接部件(浮动窗口)*/
QDockWidget * dockWidget = new QDockWidget("浮动窗口");
addDockWidget(Qt::BottomDockWidgetArea, dockWidget); //相对于核心部件而言的位置区域
/************核心部件************/
QTextEdit *textEdit = new QTextEdit;
setCentralWidget(textEdit); //设置核心部件
}
MainWindow::~MainWindow()
{
}