【qt学习003】渐入佳境——各种标准消息框的使用

顾名思义,消息框的作用是给用户提供一些提醒或一些简单的询问。主要由QMessageBox类实现,qt提供的这个消息框类基本涵盖了开发应用中使用的各种情况,并且提供了自定义消息框的方式,满足各种特殊的需求,在实际应用中关键是分析实际的应用需求,根据不同的应用环境选择最合适的消息框,以使程序简洁而合理。

这一次,书中连类的实现都没有,只给了一些函数接口,以后会怎么样呢?画面太残暴不敢想。

学习过程中又有了一些小收获,如qt自带的帮助文档,非常全面,当鼠标放在某个qt类的名称时,按F1就会弹出此类的说明文档,十分便捷。

代码:

?




// messagebox.h

#ifndef MESSAGEBOX_H

#define MESSAGEBOX_H

#include <QPushButton>

#include <QLabel>

#include <QGridLayout>

#include <QMessageBox>

#include <QDialog>

class
messagebox: public
QDialog // 必须加上public QDialog,因为要从QDialog类中继承很多内容

{

    Q_OBJECT

public:

    messagebox();

    ~messagebox();

public:

    QLabel *label;

    QPushButton *quest;

    QPushButton *info;

    QPushButton *warn;

    QPushButton *crtcal;

    QPushButton *about;

    QPushButton *aboutQt;

    QPushButton *custom;

    QGridLayout *layout;

private
slots:

    void
slotQuestion();

    void
slotInformation();

    void
slotWarning();

    void
slotCritical();

    void
slotAbout();

    void
slotAboutQt();

    void
slotCustom();

};

#endif // MESSAGEBOX_H

// messagebox.cpp

#include "messagebox.h"

messagebox::messagebox()

{

    // 创建元素

    label = new
QLabel;

    label->setText(tr("About Qt Message Box"));

    quest = new
QPushButton;

    quest->setText(tr("Question"));

    info = new
QPushButton;

    info->setText(tr("Information"));

    warn = new
QPushButton;

    warn->setText(tr("Warning"));

    crtcal = new
QPushButton;

    crtcal->setText(tr("Critical"));

    about = new
QPushButton;

    about->setText(tr("About"));

    aboutQt = new
QPushButton;

    aboutQt->setText(tr("About Qt"));

    custom = new
QPushButton;

    custom->setText(tr("custom"));

    layout = new
QGridLayout(this); // 最初没有加上this,显示只有一个空白的方框,下列元素没有显示在其中。

    // 布局

    layout->addWidget(label, 0, 0);

    layout->addWidget(quest, 0 , 1);

    layout->addWidget(info, 1, 1);

    layout->addWidget(warn, 1, 0);

    layout->addWidget(crtcal, 2, 1);

    layout->addWidget(about, 2, 0);

    layout->addWidget(aboutQt, 3, 1);

    layout->addWidget(custom, 3, 0);

    // 连接槽

    connect(quest, SIGNAL(clicked()), this, SLOT(slotQuestion()) );

    connect(about, SIGNAL(clicked()), this, SLOT(slotAbout()));

    connect(aboutQt, SIGNAL(clicked()), this, SLOT(slotAboutQt()));

    connect(info, SIGNAL(clicked()), this, SLOT(slotInformation()));

    connect(warn, SIGNAL(clicked()), this, SLOT(slotWarning()));

    connect(crtcal, SIGNAL(clicked()), this, SLOT(slotCritical()));

    connect(custom, SIGNAL(clicked()), this, SLOT(slotCustom()));

}

messagebox::~messagebox()

{

    delete
label;

    delete
layout;

    delete
quest;

    delete
about;

    delete
aboutQt;

    delete
info;

    delete
warn;

    delete
crtcal;

    delete
custom;

}

void
messagebox::slotQuestion()

{

    switch(QMessageBox::question(this, "Question",tr("It‘s end of document, search from begin?"),

                                 QMessageBox::Ok|QMessageBox::Cancel, QMessageBox::Ok))

    {

    case
QMessageBox::Ok:

        label->setText("Question button /Ok");

        break;

    case
QMessageBox::Cancel:

        label->setText("Question button/ Cancel");

        break;

    default:

        break;

    }

    return
; // 这句有没有,并无影响

}

void
messagebox::slotInformation()

{

    QMessageBox::information(this, "Information", tr("anything you want tell user"));

    return
;

}

void
messagebox::slotWarning()

{

    switch(QMessageBox::warning(this, "Warning",

                                tr("Save changes to document?"),

                                QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,

                                QMessageBox::Save))

    {

    case
QMessageBox::Save:

        label->setText("Warning button /Save");

        break;

    case
QMessageBox::Discard:

        label->setText("Warning button/ Discard");

        break;

    case
QMessageBox::Cancel:

        label->setText("Warning button/ Cancel");

        break;

    default:

        break;

    }

    return
;

}

void
messagebox::slotCritical()

{

    QMessageBox::critical(this, "Information", tr("tell user a critical error"));

    label->setText("Critical MessageBox");

    return;

}

void
messagebox::slotAbout()

{

    QMessageBox::about(this, "About", tr("Message box example"));

    label->setText("About MessageBox");

    return
;

}

void
messagebox::slotAboutQt()

{

    QMessageBox::aboutQt(this, "About Qttttttt"); // 设置消息框名称

    label->setText("About Qt MessageBox");

    return
;

}

void
messagebox::slotCustom()

{

    QMessageBox customMsgBox; // 用鼠标点QMessageBOx, 然后按F1, 将出现QMessageBox的内部说明文档

    customMsgBox.setWindowTitle("Custom message box");

    QPushButton *lockButton = customMsgBox.addButton(tr("Lock"),

                                                     QMessageBox::ActionRole);

    QPushButton *unlockButton = customMsgBox.addButton(tr("Unlock"),

                                                       QMessageBox::ActionRole);

    QPushButton *cancelButton = customMsgBox.addButton(

                      QMessageBox::Cancel);

    customMsgBox.setIconPixmap(QPixmap(""));

    customMsgBox.setText("This is a custom message box");

    customMsgBox.exec();

    if(customMsgBox.clickedButton() == lockButton)

        label->setText("Custom MessageBox /Lock");

    if(customMsgBox.clickedButton() == unlockButton)

        label->setText("Custom MessageBox/ Unlock");

    if(customMsgBox.clickedButton() == cancelButton)

        label->setText("Custom MessageBox/Cancel");

    return
;

}

// main.cpp

#include <QApplication>

#include <QPushButton>

#include <QLabel>

#include "standarddialogs.h"

#include "geometry.h"

#include "inputdialog.h"

#include "messagebox.h"

int
main(int
argc, char
*argv[])

{

    QApplication a(argc, argv);

    // StandardDialogs ct;

    // ct.show();

    

    // QPushButton b("Hello World!");

    // b.show();

    // QObject::connect(&b, SIGNAL(clicked()), &a, SLOT(quit()));

    // Geometry my;

    // my.show();

   // InputDlg person;

    // person.show();

    messagebox msgb;

    msgb.show();

    return
a.exec();

}

时间: 2024-12-20 09:37:35

【qt学习003】渐入佳境——各种标准消息框的使用的相关文章

【C#】分享一个带附加消息的增强消息框MessageBoxEx

适用于:.net 2.0+的Winform项目 样子: 有损录制+制图的原因不可能原样展示出真实效果,可至文章结尾下载Demo体验. 功能和特点: 相对父窗体居中 可附带附加消息.附加消息可以是string和Exception类型,[详细信息]按钮会根据是否传入附加信息显示和隐藏 展开/收起附加信息时有动画效果.实用为王的你亦可设置EnableAnimate=false关闭动画效果 根据传入的MessageBoxIcon,有不同的声音反馈.这个是NT5的消息框固有的能力,但NT6的消息框却没有声

QT学习 之 对话框 (四) 字体对话框、消息对话框、文件对话框、进程对话框(超详细中文注释)

QMessageBox类: 含有Question消息框.Information消息框.Warning消息框和Critical消息框等 通常有两种方式可以来创建标准消息对话框: 一种是采用“基于属性”的API,一种是使用QMessageBox的静态方法. 后者书写容易,但缺少灵活性,针对用户给出的提示的信息不够丰富,并且不能自定义消息对话框里面的按钮提示信息.因此推荐第一种写法. [cpp] view plaincopy <span style="font-size:18px;"&

【qt学习002】各类位置信息和各类标准输入框

不得不吐(赞)槽(扬)一下<Linux窗口程序设计-Qt4精彩实例分析>,书中的示例基本上是不完整的,只给出了相应知识点的实现,若要完整地运行整个工程,这需要读者来添加其余代码.在添加代码的过程中,因为不熟,常常是战战兢兢的,查很多资料,然后才敢往上写点代码,有时候挺浪费时间的. 今天学示例3和4,各类位置信息,各类标准输入框. 在编译时遇见一个错误:undefined reference to vtable for. 查资料找到解决方法,先qmake然后再构建,再运行即可.虽然解决了这个问题

Qt 学习之路 2 --- 读书笔记

一.文章来由 来自豆子老师非常好的一本Qt教程,但是只有网络版,所以用这个做笔记了,不动笔墨不读书嘛~~ 二.读书笔记 1.Qt 学习之路 2(2):Qt 简介 1.1 关于 Qt 的一站式解决 Qt 是一个著名的 C++ 应用程序框架.但并不只是一个 GUI 库,因为 Qt 十分庞大,并不仅仅是 GUI 组件.使用 Qt,在一定程度上你获得的是一个"一站式"的解决方案:不再需要研究 STL,不再需要 C++ 的,不再需要到处去找解析 XML.连接数据库.访问网络的各种第三方库,因为

Qt学习(17)

Qt学习(17)——自定义信号和槽 本节首先介绍一下C++编程中常用的传递数据机制,包括类对象的公有成员变量.友元类/函数.公有函数.回调函数等等,这些机制在Qt程序中也是可以使用的.然后重点介绍如何在Qt类里面自定义信号和槽,通过手动触发信号来调用槽函数,完成两个对象之间的消息传递,本节最后示范一个信号接力触发的例子.本节内容较多,分三部分来学习. 1.C++的沟通方式 C++编程中常遇到各个对象之间进行沟通的情景,需要将数据从一个对象传递给另一个对象来处理.大致的方法有如下几种: 接收端定义

【Qt学习笔记】2.窗体Widget && 屏幕坐标 && 布局

一.窗体 在Qt中,把窗体(口)叫做Widget. Widget可以是主窗体(口),也可以是依附在主窗体(口)上的各种控件,作为子窗体,这两种窗口,分别称作顶级窗口(top-level widget)和子窗口(sub widget). 顶级窗口:一个标准的窗口,带边框.标题栏.若干按钮.(独立) 子窗口:在窗口里面的窗口,例如:按钮.文本框等控件.(不独立,随着父窗口移动) 注意: 1.每个子窗口都有一个父窗口 2.子窗口里面可能包含了若干子窗口,是一层一层的关系. 3.顶级窗口也有父窗口:就是

qt学习 (五) 登陆界面之连接按钮

登陆步骤是比对输入的账号密码与数据库中的表项目是否一致 一样,  跳出mainwidget对话框 不一样,跳出消息错误框 今天就是要进去, 因为进去以后是widget的窗口,所以把用来核对消息的数据库放在MAINwidget.cpp中, 再拿一个用户点击连接的子类 login.cpp, 就在这里面画用户登录账号密码textEdit 1 除了textEdit 基本都是button 慢慢加. 登录界面可以学的东西很多. 2 在widget.h文件中加入数据库所需要的头文件, #include <Qt

QT学习笔记—1

1.模态和非模态的区别:非模态可以同时操作两个窗口,模态的只能在顶层窗口关闭之后才能使用其他窗口 //同时显示出widget和dialog窗口,非模态     QDialog *dialog = new QDialog(this);     dialog->show(); //同时显示出widget和dialog窗口,模态     QDialog *dialog = new QDialog(this);     dialog->setModal(true);     dialog->sh

Qt学习一:直接使用QT工具

今天通过直接使用QT的一些工具来编写命令行程序,可以看到一种Qt的更加通用的使用方法. 内容非常简单,输出当前的日期. 首先使用的是QDate类,可以使用QDate类的静态方法currentDate来获得当前日期. 其次,标准库里面的cout已经无法输出QString类型,就此使用QTextStream类来输出.在QTextStream类已经定义了endl和flush等常用变量,可以直接使用. 于是,一个简单的程序就诞生了: #include <QTextStream> #include &l