码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-05-01 00:06:59      阅读:487      评论:0      收藏:0      [点我收藏+]

标签:com   blog   class   div   code   c   log   t   sp   ext   string   

顾名思义,消息框的作用是给用户提供一些提醒或一些简单的询问。主要由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();
}

 

【qt学习003】渐入佳境——各种标准消息框的使用,布布扣,bubuko.com

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

标签:com   blog   class   div   code   c   log   t   sp   ext   string   

原文地址:http://www.cnblogs.com/xy-kidult/p/3701202.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!