学习QT之基本对话框

本文详细介绍了Qt中常用的标准对话框,包括文件、颜色、字体、输入和消息对话框的功能和使用方法。通过实例展示了如何调用这些对话框并处理用户输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用的标准基本对话框包括:标准文件对话框(QFileDialog)标准颜色对话框(QColorDialog)标准字体对话框(QFontDialog)标准输入对话框(QInputDialot)标准消息对话框(QMessageBox)

各种标准基本对话框通过调用陪你过各自不同的静态函数来完成其功能,具体说明见下表:

相关类类说明静态函数函数说明
getOpenFileName获得用户选择的文件名
QFileDialog标准文件对话框getSaveFileName获得用户保存的文件名
getExistingDirectory获得用户选的的已存在的目录名
getOpenFileNames获得用户选择的文件名列表
QColorDialog标准颜色对话框getColor获得用户选择的颜色值
QFontDialog标准字体对话框getFont获得用户选择的字体
getText标准字符串输入对话框
QInputDialog标准输入对话框getItem下拉表条目输入框
getIntint类型数据输入对话框
getDoubledouble类型数据输入对话框
QMessageBox::questionQuestion消息框
QMessageBox::informationInformation消息框
QMessageBox标准消息对话框QMessageBox::warningWarning消息框
QMessageBox::criticalCritical消息框
QMessageBox::aboutAbout消息框
QMessageBox::aboutQtAbout Qt消息框

一、标准文件对话框

1、函数原型说明
QString QFileDialog::getOpenFileName
(
    QWidget* parent = 0,                    //标准文件对话框的父窗口
    const QString & caption = QString(),    //标准文件对话框的标题名
    const QString & dir = QString(),        //注(1)
    const QString & filter = QString(),     //注(2)
    QString * selectedFilter=0,             //用户选择的过滤器通过此参数返回
    Options options=0                       //选择显示文件名的格式,默认是同时显示目录与文件名
)

注(1):指定了默认的目录,若此参数带有文件名,则文件将是默认选中的文件。

注(2):此参数对文件类型进行过滤,只有与过滤器匹配的文件类型才显示,可以同时指定多种过滤方式供用户选择,多种过滤器之间使用;;隔开。

2、使用示例
void Dialog::showFile()
{
    QString s = QFileDialog::getOpenFileName(this,"open file dialog","/","C++ files(*.cpp);;C files(*.c);;Head files(*.h)");
    //第一个参数:标准文件对话框的父窗口;第二个参数:标准文件对话框的标题;第三个参数:指定默认的目录;第四个参数:文件过滤器
    fileLineEdit->setText(s);
}
3、运行结果

在这里插入图片描述

二、标准颜色对话框

1、函数原型说明
QColor::getColor
(
    const QColor & initial = Qt::white,  //注(1)
    QWidget* parent = 0                  //标准颜色对话框的父窗口
)

注(1):指定了默认选中的颜色,默认为白色。通过QColor::isValid()函数可以判断用户选择的颜色是否有效,但是当用户选择文件是,如果选择“取消”(Cancel),则QColor::isValid()函数将返回false。

2、使用示例
void Dialog::showColor()
{
    QColor c = QColorDialog::getColor(Qt::blue);
    if(c.isValid())
    {
        colorFrame->setPalette(QPalette(c));
    }
}
3、运行结果

在这里插入图片描述

三、标准字体对话框

1、函数原型说明
QFont::getFont
(
	bool* ok,                //注(1)
    QWidget* parent = 0      //标准字体对话框的父窗口
)

注(1):若用户单击“OK”按钮,则该参数*ok为true,函数返回用户所选择的字体;否则,将设为false,此时函数返回默认字体。

2、使用示例
void Dialog::showFont()
{
    bool ok;
    QFont f = QFontDialog::getFont(&ok);
    if(ok)
        fontLineEdit->setFont(f);
}
3、运行结果

在这里插入图片描述

四、标准输入对话框

1、函数原型说明

标准字符串输入对话框

QString getText
(
	QWidget* parent,                             //标准输入对话框的父窗口
    const QString& title,                        //标准输入对话框的标题名
    const QString& label,                        //标准输入对话框的标签提示
    QLineEdit::EchoMode mode=QLineEdit::Normal,  
    								 //指定标准输入对话框中QLineEidt控件的输入模式
    const QString& text = QString(), //标准字符输入对话中弹出式QLineEdit控件默认出现的文字     
    bool* ok = 0,                    //注(1)
    Qt::WindowFlags flags = 0        //指明标准输入对话框的窗体标识
)

注(1):指示标准输入对话框的哪个按钮被触发,若为true,则表示用户单击了“OK”(确定)按钮;若为false,则表示用户单击了“Cancle”(取消)按钮。

标准条目选择对话框

QString getItem
(
	QWidget* parent,            //标准输入对话框的父窗口
    const QString& title,       //标准输入对话框的标题名
    const QString& label,       //标准输入对话框的标签提示
    const QStringList& items,   //注(1)
    int current = 0,            //注(2)
    bool editable = true,       //指定QComboBox控件中显示的文字是否可编辑
    bool* ok = 0,               //注(3)
    Qt::WindowFlags flags = 0   //指明标准输入对话框的窗体标识
)

注(1):指定标准输入对话框中QComboBox控件显示的可选条目为一个QStringList对象

注(2):标准条目选择对话框弹出时QComboBox控件中默认显示的条目序号

注(3):指示标准输入对话框的哪个按钮被触发,若ok为true,则表示用户单击了“OK”(确定)按钮;若ok为false,则表示用户单击了“Cancle”(取消)按钮。

标准int类型输入对话框

int getInt
(
	QWidget* parent,            //标准输入对话框的父窗口
    const QString& title,       //标准输入对话框的标题名
    const QString& label,       //标准输入对话框的标签提示
    int value = 0,              //指定标准输入对话框中QSpinBox控件的默认显示值
    int min = -2147483647,      //指定QSpinBox控件的数值范围
    int max = 2147483647,       //指定QSpinBox控件的数值范围
    int step = 1,               //指定QSpinBox控件的步进值
    bool* ok = 0,               //注(1)
    Qt::WindowFlags flags = 0   //指明标准输入对话框的窗口标识
)

注(1):用于指示标准输入对话框的哪个按钮被触发了。若OK为true,则表示用户单击了“OK”(确定)按钮;若OK为false,则表示用户单击了“Cancel”(取消)按钮。

标准double类型输入对话框

double getDouble
(
	QWidget* parent,           //标准输入对话框的父窗口
    const QString& title,      //标准输入对话框的标题名
    const QString& label,      //标准输入对话框的标签提示
    double value = 0,          //指定标准输入对话框中QSpinBox控件默认的显示值
    double min = -2147483647,  //指定QSpinBox控件的数值范围
    double max = 2147483647,   //指定QSpinBox控件的数值范围
    int decimals = 1,          //指定QSpinBox控件的步进值
    bool* ok = 0,              //注(1)
    Qt::WindowFlags flags = 0  //指明标准输入对话框的窗口标识
)

注(1):用于指示标准输入对话框的哪个按钮被触发,若OK为true,则表示用户单击了“OK”(确定)按钮;若OK为false,则表示用户单击了“Cancel”(取消)按钮。

2、使用示例
void InputDlg::ChangeName()
{
    bool ok;
    QString text = QInputDialog::getText(this,tr("标准字符串输入对话框"),tr("请输入姓名:"),QLineEdit::Normal,nameLabel2->text(),&ok);
    if(ok && !text.isEmpty())
        nameLabel2->setText(text);
}

void InputDlg::ChangeSex()
{
    QStringList SexItems;
    SexItems<<tr("男")<<tr("女");
    bool ok;
    QString SexItem = QInputDialog::getItem(this,tr("标准条目选择对话框"),tr("请选择性别:"),SexItems,0,false,&ok);
    if(ok && !SexItem.isEmpty())
        sexLabel2->setText(SexItem);
}

void InputDlg::ChangeAge()
{
    bool ok;
    int age = QInputDialog::getInt(this,tr("标准int类型输入对话框"),tr("请输入年龄:"),ageLabel2->text().toInt(&ok),0,100,1,&ok);
    if(ok)
        ageLabel2->setText(QString(tr("%1")).arg(age));
}

void InputDlg::ChangeScore()
{
    bool ok;
    double score = QInputDialog::getDouble(this,tr("标准double类型输入对话框"),tr("请输入成绩:"),scoreLabel2->text().toDouble(&ok),0,100,1,&ok);
    if(ok)
        scoreLabel2->setText(QString(tr("%1")).arg(score));
}
3、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、标准消息对话框

1、函数原型说明

Question消息框

StandardButton QMessage::question
(
	QWidget* parent,                        //消息框的父窗口指针
    const QString& title,                   //消息框的标题栏
    const QString& text,                    //消息框的文字提示信息
    StandardButtons buttons = ok,           //注(1)
    StandardButton defaultButton = NoButton //注(2)
)

注(1):填写希望在消息框中出现的按钮,可根据需要在标准按钮中选择,用|连写,默认为QMessageBox::Ok。QMessageBox类提供了许多标准按钮,如QMessageBox::Ok、QMessageBox::Close、QMessage::Discard等。虽然在此可以选择,但并不是随意选择的,应注意按常规成对出现。例如,通常Sava与Discard成对出现,而Abort、Retry、Ignore则一起出现。

注(2):默认按钮,即消息框出现时,焦点默认处于哪个按钮上。

Information消息框

StandardButton QMessage::information
(
	QWidget* parent,                         //消息框的父窗口指针
    const QString& title,                    //消息框的标题栏
    const QString& text,                     //消息框的文字提示信息
    StandardButtons buttons = ok,            //同Question消息框的注释内容
    StandardButton defaultButton = NoButton  //同Question消息框的注释内容
)

Warning消息框

StandardButton QMessage::warning
(
	QWidget* parent,                         //消息框的父窗口指针
    const QString& title,                    //消息框的标题栏
    const QString& text,                     //消息框的文字提示信息
    StandardButtons buttons = ok,            //同Question消息框的注释内容
    StandardButton defaultButton = NoButton  //同Question消息框的注释内容
)

Critical消息框

StandardButton QMessage::critical
(
	QWidget* parent,                         //消息框的父窗口指针
    const QString& title,                    //消息框的标题栏
    const QString& text,                     //消息框的文字提示信息
    StandardButtons buttons = ok,            //同Question消息框的注释内容
    StandardButton defaultButton = NoButton  //同Question消息框的注释内容
)

About消息框

StandardButton QMessage::about
(
	QWidget* parent,                         //消息框的父窗口指针
    const QString& title,                    //消息框的标题栏
    const QString& text                      //消息框的文字提示信息
)

About Qt消息框

void QMessageBox::aboutQt
(
	QWidget* parent,                  //消息框的父窗口指针
    const QString& title = QString()  //消息框的标题栏
)
2、使用示例
void MsgBoxDlg::showQuestionMsg()
{
    label->setText(tr("Question Message Box"));
    switch (QMessageBox::question(this,tr("Question消息框"),tr("您现在已经修改完成,是否要接收程序?"),
                                  QMessageBox::Ok |QMessageBox::Cancel),QMessageBox::Ok)
    {
        case QMessageBox::Ok:
            label->setText(tr("Question Button/OK"));
            break;
        case QMessageBox::Cancel:
            label->setText(tr("Question Button/Cancel"));
            break;
        default:
            break;
    }

    return;
}

void MsgBoxDlg::showInformationMsg()
{
    label->setText(tr("Information Message Box"));
    QMessageBox::information(this,tr("Information 消息框"),
                             tr("这是Information消息框测试,欢迎您!"));
    return;
}

void MsgBoxDlg::showWarningMsg()
{
    label->setText(tr("Warning Message Box"));
    switch (QMessageBox::warning(this,tr("Warning 消息框"),
                                 tr("您修改的内容还未保存,是否要保存对文档的修改?"),
                                 QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,
            QMessageBox::Save))
    {
        case QMessageBox::Save:
            label->setText(tr("Warning Button/Sava"));
            break;
        case QMessageBox::Discard:
            label->setText(tr("Warning Button/Discard"));
            break;
        case QMessageBox::Cancel:
            label->setText(tr("Warning Button/Cancel"));
            break;
        default:
            break;
    }

    return;
}

void MsgBoxDlg::showCriticalMsg()
{
    label->setText(tr("Critical Message Box"));
    QMessageBox::critical(this,tr("Critical 消息框"),
                             tr("这是Critical消息框测试!"));
    return;

}

void MsgBoxDlg::showAboutMsg()
{
    label->setText(tr("About Message Box"));
    QMessageBox::about(this,tr("About 消息框"),
                             tr("这是About消息框测试!"));
    return;
}

void MsgBoxDlg::showAboutQtMsg()
{
    label->setText(tr("About Qt Message Box"));
    QMessageBox::aboutQt(this,tr("About Qt 消息框"));

    return;
}

3、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

六、自定义消息框

代码如下

void Dialog::showCustomDlg()
{
    label->setText(tr("Custom Message Box"));
    QMessageBox customMsgBox;
    customMsgBox.setWindowTitle(tr("用户自定义消息框"));
    QPushButton *yesBtn = customMsgBox.addButton(tr("Yes"),QMessageBox::ActionRole);
    QPushButton *noBtn = customMsgBox.addButton(tr("No"),QMessageBox::ActionRole);
    QPushButton *cancelBtn = customMsgBox.addButton(QMessageBox::Cancel);
    customMsgBox.setText(tr("这是一个用户自定义消息框"));
    customMsgBox.setIconPixmap(QPixmap("321.png"));
    customMsgBox.exec();
    if(customMsgBox.clickedButton()==yesBtn)
        label->setText(tr("Custom Message Box/Yes"));
    if(customMsgBox.clickedButton()==noBtn)
        label->setText(tr("Custom Message Box/No"));
    if(customMsgBox.clickedButton()==cancelBtn)
        label->setText(tr("Custom Message Box/Cancel"));
}

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贝勒里恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值