主页 | 所有的类 | 主要的类 | 注释的类 | 分组的类 | 函数

QMessageBox类参考

QMessageBox类提供了一个有一条简短消息、一个图标和一些按钮的模式对话框。 详情请见……

#include <qmessagebox.h>

继承了QDialog

所有成员函数的列表。

公有成员

静态公有成员

属性


详细描述

QMessageBox类提供了一个有一条简短消息、一个图标和一些按钮的模式对话框。

消息框用于提供情报信息并且问一些简单的问题。

QMessageBox提供了一个不同信息的范围,大致按两个轴进行排列:严重程度和复杂程度。

按严重程度分:

信息 用于普通操作的一部分的消息框
警告 用于告诉用户一些不常出现的错误的消息框
严重 用于告诉用户严重的错误的消息框

对于每一个严重程度,消息框都有不同的图标。

按复杂程度分为一个按钮(确定)的简单消息、或者用于提问的两个或者甚至三个按钮。

还有一些用于常用情况的静态函数。

实例:

如果程序不能找到一个支持文件,但是能在没有它的情况在做得很好:

QMessageBox::information( this, "Application name",
    "Unable to find the user preferences file.\n"
    "The factory default will be used instead." );

warning()可以用于告诉用户一些不常出现的错误,或者不容易被修复的错误:

switch( QMessageBox::warning( this, "Application name",
        "Could not connect to the <mumble> server.\n"
        "This program can't function correctly "
        "without the server.\n\n",
        "Retry",
        "Quit", 0, 0, 1 ) )
    case 0: // 用户点击“再试”或者按下回车键
        // 再次尝试
        break;
    case 1: // 用户点击“退出”或者按下Esc键
        // 退出
        break;
}

所有消息框的消息的文本部分都可以是多信息文本或者一般文本。如果拟制定一个多信息文本格式字符串,它将会被使用默认样式单来呈现。详细情况请参考QStyleSheet::defaultSheet()。对于包含XML元字符的特定字符串,自动多信息文本检测可能会失败,会把一般文本不正确地解释为多信息文本。在这种情况下,可以使用QStyleSheet::convertFromPlainText()来把你的一般文本字符串转化为在视觉上一致的多信息文本或者明确地通过setTextFormat()设置文本格式。

注意微软视窗用户界面指南强烈建议在把应用程序名称作为这个窗口的标题。

下面是更多的关于如何使用静态成员函数地实例。在这些实例之后,你将会找到非静态成员函数的概述。

退出程序是正常操作的一部分。如果存在没有保存地数据,用户可能应该被被询问他们是否想保存数据。例如:

switch( QMessageBox::information( this, "Application name here",
        "The document contains unsaved changes\n"
        "Do you want to save the changes before exiting?",
        "&Save", "&Discard", "Cancel",
        0,      // Enter == button 0
        2 ) ) { // Escape == button 2
    case 0: // Save被点击或者Alt+S被按下或者Enter被按下。
        // 保存
        break;
    case 1: // Discard被点击或者Alt+D被按下。
        // 不保存但退出
        break;
    case 2: // Cancel被点击或者Alt+C被按下或者Escape被按下。
        // 不退出
        break;
}

为了和微软的建议一致,应用程序的名称被作为窗口标题。Escape按钮撤销整个退出操作,并且按下Enter导致在退出发生之前这些变化被保存。

磁盘已满错误是不常见的(在完美的世界中,它们是存在的)并且它们通常很难变为正确。这个实例使用了预定义的按钮来替换了写在代码中的按钮文本:

switch( QMessageBox::warning( this, "Application name here",
        "Could not save the user preferences,\n"
        "because the disk is full.  You can delete\n"
        "some files and press Retry, or you can\n"
        "abort the Save Preferences operation.",
        QMessageBox::Retry | QMessageBox::Default,
        QMessageBox::Abort | QMessageBox::Escape )) {
    case QMessageBox::Retry: // Retry被点击或者Enter被按下。
        // 再次尝试
        break;
    case QMessageBox::Abort: // Abort被点击或者Escape被按下。
        // 放弃
        break;
}

critical()函数应用被用于保留严重错误。在这个实例中,errorDetails是QString或者const char*,并且QString被用于连接几个字符串:

QMessageBox::critical( 0, "Application name here",
        QString("An internal error occurred. Please ") +
        "call technical support at 123456789 and report\n"+
        "these numbers:\n\n" + errorDetails +
        "\n\n<Application> will now exit." );

在这个实例中,一个“OK”按钮被显示。

QMessageBox提供了一个非常简单的关于框,可以显示你提供的适当的图标和文本。

QMessageBox::about( this, "About <Application>",
        "<Application> is a <one-paragraph blurb>\n\n"
        "Copyright 1951-2002 Such-and-such.  "
        "<License words here.>\n\n"
        "For technical support, call 123456789 or see\n"
        "http://www.such-and-such.com/Application/\n" );

更多信息请参考about()。

如果你想让用户知道这个应用程序是使用Qt构建的(这样他们就会知道你使用的是高质量的工具):你也许喜欢在帮助菜单下的“关于Qt”菜单选项来调用aboutQt()。

如果没有任何标准消息框是合适地,你可以自己手工创建一个QMessageBox并且自己定义按钮文本:

QMessageBox mb( "Application name here",
        "Saving the file will overwrite the original file on the disk.\n"
        "Do you really want to save?",
        QMessageBox::Information,
        QMessageBox::Yes | QMessageBox::Default,
        QMessageBox::No,
        QMessageBox::Cancel | QMessageBox::Escape );
mb.setButtonText( QMessageBox::Yes, "Save" );
mb.setButtonText( QMessageBox::No, "Discard" );
switch( mb.exec() ) {
    case QMessageBox::Yes:
        // 保存并且退出
        break;
    case QMessageBox::No:
        // 不保存退出
        break;
    case QMessageBox::Cancel:
        // 不保存并且不退出
        break;
}

QMessageBox定义了两个枚举变量:Icon和没有名称的按钮类型。Icon为每一个图形用户界面风格定义了InformationWarningCritical图标。它被构造函数和information()、warning()和critical()静态函数使用。叫做standardIcon()的函数让你能够访问不同的图标。

按钮类型有:

按钮类型可以由上述类型和下面两个修饰成分使用或“|”来进行组合。

text()、icon()和iconPixmap()函数提供了对消息框的当前文本和像素映射的访问。

setButtonText()和buttonText()提供了对按钮的访问。setText()、setIcon()和setIconPixmap()让你能够修改它。setIcon()和setIconPixmap()的不同是前者接受QMessageBox::Icon并且用于设置标准图标,而后者接受QPixmap并且用于设置自定义图标。

QMessageBox没有信号和槽。

也可以参考QDialogIsys on error messages图形用户界面设计手册:消息框对话框类


成员类型文档

QMessageBox::Icon

这个枚举变量包含被提供的如下值:


成员函数文档

QMessageBox::QMessageBox ( QWidget * parent = 0, const char * name = 0 )

构造一个没有文本和一个标签为“OK”的按钮的消息框。

如果parent为0,消息框变为应用程序全局的模式对话框。如果parent为一个窗口部件,消息框变为相对于parent的模式对话框。

parentname参数被传递给QDialog构造函数。

QMessageBox::QMessageBox ( const QString & caption, const QString & text, Icon icon, int button0, int button1, int button2, QWidget * parent = 0, const char * name = 0, bool modal = TRUE, WFlags f = WStyle_DialogBorder )

构造一个标题为caption、文本为text、图标为icon并且最多为三个按钮的消息框。

icon必须为如下之一:

每一个按钮,button0button1button2为如下之一:

如果你的消息框少于三个按钮,QMessageBox::NoButton用于靠后的参数。

一个按钮可以和QMessageBox::Default标记进行或运算,这使得它成为默认按钮(当Enter被按下时,它被点击)。

一个按钮可以和QMessageBox::Escape标记进行或运算,这使得它成为撤销或者关闭按钮(当Escape被按下时,它被点击)。

实例:

QMessageBox mb( "Application Name",
        "Hardware failure.\n\nDisk error detected\nDo you want to stop?",
        QMessageBox::NoIcon,
        QMessageBox::Yes | QMessageBox::Default,
        QMessageBox::No  | QMessageBox::Escape, 
        QMessageBox::NoButton );
if ( mb.exec() == QMessageBox::No )
    // 再次尝试

如果parent为0,消息框变为应用程序全局的模式对话框。如果parent为一个窗口部件,消息框变为相对于parent的模式对话框。

如果modal为真,这个消息框变为模式的,否则它变为非模式的。

parentnamemodalf参数被传递给QDialog构造函数。

也可以参考captiontexticon

QMessageBox::~QMessageBox ()

销毁这个消息框。

void QMessageBox::about ( QWidget * parent, const QString & caption, const QString & text ) [静态]

显示一个标题为caption并且文本为text的简单关于框。关于框的父对象为parent

about()在四个位置查找合适的图标:

  1. 如果parent->icon()存在,它会首先使用它。
  2. 如果没有,它会尝试一下包含parent的顶级窗口部件。
  3. 如果这个也失败了,它会尝试主窗口部件
  4. 作为最后的手段,它使用信息图标。

关于框有一个标签为OK的单一按钮。

也可以参考QWidget::iconQApplication::mainWidget()。

实例:action/application.cppapplication/application.cppchart/chartform.cpphelpviewer/helpwindow.cppmdi/application.cppmenu/menu.cppthemes/themes.cpp

void QMessageBox::aboutQt ( QWidget * parent, const QString & caption = QString::null ) [静态]

显示标题为caption并且放在parent(如果parent不为0)的中间关于Qt的简单消息框。这个消息包含这个应用程序正在使用的Qt的版本号。

这个会被包含在帮助菜单中。关于实例请参考examples/menu/menu.cpp。

实例:action/application.cppapplication/application.cppchart/chartform.cpphelpviewer/helpwindow.cppmenu/menu.cppthemes/themes.cpptrivial/trivial.cpp

void QMessageBox::adjustSize () [虚]

仅在QDialog::exec()或QDialog::show()被调用之前调节消息框的大小来适合内容。

如果消息框在显示之前已经被明显地重新定义大小,这个函数就不会被调用。

QWidget中重新实现。

QString QMessageBox::buttonText ( int button ) const

返回消息框按钮button的文本,或者如果消息框没有包含这个按钮返回零。

也可以参考setButtonText()。

int QMessageBox::critical ( QWidget * parent, const QString & caption, const QString & text, int button0, int button1, int button2 = 0 ) [静态]

打开一个标题为caption并且文本为text的严重消息框。这个对话框最多有三个按钮。每个按钮参数button0button1button2被设置为下列各值之一:

如果你不想要三个按钮,设置最后一个按钮或者最后两个按钮为QMessageBox::NoButton。

返回被点击的按钮地标识(QMessageBox::Ok或QMessageBox::No等等)。

如果parent为0,消息框变为应用程序全局的模式对话框。如果parent为一个窗口部件,消息框变为相对于parent的模式对话框。

也可以参考information()和warning()。

实例:network/ftpclient/ftpmainwindow.cppprocess/process.cppxml/outliner/outlinetree.cpp

int QMessageBox::critical ( QWidget * parent, const QString & caption, const QString & text, const QString & button0Text = QString::null, const QString & button1Text = QString::null, const QString & button2Text = QString::null, int defaultButtonNumber = 0, int escapeButtonNumber = -1 ) [静态]

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

显示一个标题为caption、文本为text并且按钮分别为1、2、3的严重消息对话框。返回被点击的按钮的数字(0、1或2)。

button0Text为第一个按钮的文本并且它是可选的。如果button0Text没有被提供,“OK”(被翻译的)将被使用。button1Text为第二个按钮的文本并且它是可选的并且button2Text为第三个按钮的文本并且它是可选的。defaultButtonNumber(0、1或2)是默认按钮的索引,按下Return或者Enter和点击这个默认按钮是相同的。它默认为0(第一个按钮)。escapeButtonNumber是Escape按钮的索引,按下Escape和点击这个按钮是相同的。它默认为-1(就是按下Escape什么也不做),提供0、1或2使按下Escape等同于按下对应的按钮。

如果parent为0,消息框变为应用程序全局的模式对话框。如果parent为一个窗口部件,消息框变为相对于parent的模式对话框。

也可以参考information()和warning()。

Icon QMessageBox::icon () const

返回消息框的图标。详细情况请参考“icon”属性。

const QPixmap * QMessageBox::iconPixmap () const

返回当前图标。详细情况请参考“iconPixmap”属性。

int QMessageBox::information ( QWidget * parent, const QString & caption, const QString & text, int button0, int button1 = 0, int button2 = 0 ) [静态]

打开一个标题为caption并且文本为text的信息消息框。这个对话框最多有三个按钮。每个按钮参数button0button1button2被设置为下列各值之一:

如果你不想要三个按钮,设置最后一个按钮或者最后两个按钮为QMessageBox::NoButton。

返回被点击的按钮地标识(QMessageBox::Ok或QMessageBox::No等等)。

如果parent为0,消息框变为应用程序全局的模式对话框。如果parent为一个窗口部件,消息框变为相对于parent的模式对话框。

也可以参考warning()和critical()。

实例:action/application.cppapplication/application.cppchart/chartform.cppdirview/dirview.cppfileiconview/qfileiconview.cpppicture/picture.cppqwerty/qwerty.cpp

int QMessageBox::information ( QWidget * parent, const QString & caption, const QString & text, const QString & button0Text = QString::null, const QString & button1Text = QString::null, const QString & button2Text = QString::null, int defaultButtonNumber = 0, int escapeButtonNumber = -1 ) [静态]

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

显示一个标题为caption、文本为text并且按钮分别为1、2、3的信息消息对话框。返回被点击的按钮的数字(0、1或2)。

button0Text为第一个按钮的文本并且它是可选的。如果button0Text没有被提供,“OK”(被翻译的)将被使用。button1Text为第二个按钮的文本并且它是可选的并且button2Text为第三个按钮的文本并且它是可选的。defaultButtonNumber(0、1或2)是默认按钮的索引,按下Return或者Enter和点击这个默认按钮是相同的。它默认为0(第一个按钮)。escapeButtonNumber是Escape按钮的索引,按下Escape和点击这个按钮是相同的。它默认为-1(就是按下Escape什么也不做),提供0、1或2使按下Escape等同于按下对应的按钮。

如果parent为0,消息框变为应用程序全局的模式对话框。如果parent为一个窗口部件,消息框变为相对于parent的模式对话框。

也可以参考warning()和critical()。

int QMessageBox::message ( const QString & caption, const QString & text, const QString & buttonText = QString::null, QWidget * parent = 0, const char * = 0 ) [静态]

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

使用特定参数直接打开模式消息框。

请使用information()、warning()或critical()来替代。

实例:grapher/grapher.cpp

bool QMessageBox::query ( const QString & caption, const QString & text, const QString & yesButtonText = QString::null, const QString & noButtonText = QString::null, QWidget * parent = 0, const char * = 0 ) [静态]

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

使用有两个按钮的模式消息框询问用户。注意caption不总是被显示,它依赖于窗口管理器。

请使用information()、warning()或critical()来替代。

void QMessageBox::setButtonText ( int button, const QString & text )

设置消息框按钮button的文本为text。设置一个没有在消息框中出现的按钮的文本会被默默地忽略。

也可以参考buttonText()。

void QMessageBox::setIcon ( Icon )

设置消息框的图标。详细情况请参考“icon”属性。

void QMessageBox::setIconPixmap ( const QPixmap & )

设置当前图标。详细情况请参考“iconPixmap”属性。

void QMessageBox::setText ( const QString & )

设置被显示的消息框文本。详细情况请参考“text”属性。

void QMessageBox::setTextFormat ( TextFormat )

设置消息框中被显示的文本的格式。详细情况请参考“textFormat”属性。

QPixmap QMessageBox::standardIcon ( Icon icon ) [静态]

返回标准图标使用的像素映射。这允许这些像素映射用于更复杂的消息框。icon指定了所需图标,例如QMessageBox::Information、QMessageBox::Warning或QMessageBox::Critical。

QPixmap QMessageBox::standardIcon ( Icon icon, GUIStyle style ) [静态]

这个函数是废弃的。它的提供只是为了保证旧代码能够工作。我们强烈建议在新代码中不要使用它。

返回标准图标使用的像素映射。这允许这些像素映射用于更复杂的消息框。icon指定了所需图标,例如QMessageBox::Information、QMessageBox::Warning或QMessageBox::Critical。

style不被使用。

QString QMessageBox::text () const

返回被显示的消息框文本。详细情况请参考“text”属性。

TextFormat QMessageBox::textFormat () const

返回消息框中被显示的文本的格式。详细情况请参考“textFormat”属性。

int QMessageBox::warning ( QWidget * parent, const QString & caption, const QString & text, int button0, int button1, int button2 = 0 ) [静态]

打开一个标题为caption并且文本为text的警告消息框。这个对话框最多有三个按钮。每个按钮参数button0button1button2被设置为下列各值之一:

如果你不想要三个按钮,设置最后一个按钮或者最后两个按钮为QMessageBox::NoButton。

返回被点击的按钮地标识(QMessageBox::Ok或QMessageBox::No等等)。

如果parent为0,消息框变为应用程序全局的模式对话框。如果parent为一个窗口部件,消息框变为相对于parent的模式对话框。

也可以参考information()和critical()。

实例:chart/chartform.cppi18n/main.cppnetwork/mail/smtp.cppqwerty/qwerty.cppshowimg/showimg.cppsound/sound.cpp

int QMessageBox::warning ( QWidget * parent, const QString & caption, const QString & text, const QString & button0Text = QString::null, const QString & button1Text = QString::null, const QString & button2Text = QString::null, int defaultButtonNumber = 0, int escapeButtonNumber = -1 ) [静态]

这是一个重载成员函数,提供了方便。它的行为基本上和上面的函数相同。

显示一个标题为caption、文本为text并且按钮分别为1、2、3的警告消息对话框。返回被点击的按钮的数字(0、1或2)。

button0Text为第一个按钮的文本并且它是可选的。如果button0Text没有被提供,“OK”(被翻译的)将被使用。button1Text为第二个按钮的文本并且它是可选的并且button2Text为第三个按钮的文本并且它是可选的。defaultButtonNumber(0、1或2)是默认按钮的索引,按下Return或者Enter和点击这个默认按钮是相同的。它默认为0(第一个按钮)。escapeButtonNumber是Escape按钮的索引,按下Escape和点击这个按钮是相同的。它默认为-1(就是按下Escape什么也不做),提供0、1或2使按下Escape等同于按下对应的按钮。

如果parent为0,消息框变为应用程序全局的模式对话框。如果parent为一个窗口部件,消息框变为相对于parent的模式对话框。

也可以参考information()和critical()。


属性文档

Icon icon

这个属性保存的是消息框的图标。

消息框的图标可以是如下预定义图标的一种:

用于显示图标的实际像素映射依赖于当前图形用户界面风格。你也可以使用QMessageBox::iconPixmap属性来设置自定义像素映射。默认图标为QMessageBox::NoIcon。

也可以参考iconPixmap

通过setIcon()设置属性值并且通过icon()来获得属性值。

QPixmap iconPixmap

这个属性保存的是当前图标。

这个图标正在被这个消息框使用。注意很难绘制一个在Motif和Windows风格中看起来比较一致的像素映射,你也许需要绘制两个像素映射。

也可以参考icon

通过setIconPixmap()设置属性值并且通过iconPixmap()来获得属性值。

QString text

This property holds the message box text to be displayed. 这个属性保存的是被显示的消息框文本。

这个文本将被解释为一般文本或者多信息文本,根据文本格式设置(QMessageBox::textFormat)。默认设置为AutoText,也就是说消息框将会试图自动检测文本格式。

这个属性的默认设置是QString::null

也可以参考textFormat

通过setText()设置属性值并且通过text()来获得属性值。

TextFormat textFormat

This property holds the format of the text displayed by the message box. 这个属性保存的是消息框中被显示的文本的格式。

这是当前被消息框使用的文本格式。对于可能选项的解释请参考Qt::TextFormat枚举变量。

默认设置是AutoText

也可以参考text

通过setTextFormat()设置属性值并且通过textFormat()来获得属性值。


这个文件是Qt工具包一部分。 版权所有 © 1995-2002 Trolltech。保留所有权利。


Copyright © 2002 Trolltech Trademarks 译者:Cavendish
Qt 3.0.5版