找回密码
 立即注册
Qt开源社区 门户 查看内容

QT软件开发-第四章 对话框

2019-4-16 20:45| 发布者: admin| 查看: 2119| 评论: 0

摘要: 点击上方蓝字关注我们对话框在应用程序很常见,对话框没有最大化按钮、没有最小化按钮、基本上不能改变移动形状大小。QT提供了一些内置的标准对话框,标准对话框的基类为QDialog。继承关系如下图:图4-1 对话框继承 ...


点击上方蓝字关注我们





对话框在应用程序很常见,对话框没有最大化按钮、没有最小化按钮、基本上不能改变移动形状大小。QT提供了一些内置的标准对话框,标准对话框的基类为QDialog。继承关系如下图:


 图4-1 对话框继承关系视图

4.1 标准消息对话框


在实际应用程序中,经常会有各种各样提示框给用户提供一些信息。比如:警告、错误信息等等。QT使用QMessageBox类封装了标准的信息提示框。包含:about(简单文本提示框)、aboutQt(关于QT信息提示框)、critical(致命信息提示框)、information(基本信息提示框)、question(问题提示框)、warning(警告信息提示框)。

4.1.1 QMessageBox静态函数


以上提及的各种类型的消息对话框QT提供了静态函数接口,方便调用,以下介绍静态函数的使用方法。

使用消息对话框需要添加QMessageBox头文件。

    1. 简单纯文本提示框

void QMessageBox::about(QWidget *parent, const QString &title, const QString &text)

参数信息:

QWidget *parent:父窗口指针。

const QString &title:对话框标题。

const QString &text:提示的文本信息。

  • 使用示例:

QMessageBox::about(this,"提示信息",tr("纯文本对话框演示!"));



图4-1-1 纯文本对话框运行效果

    2. QT信息提示框

void aboutQt(QWidget *parent, const QString &title = QString())

使用示例:

QMessageBox::aboutQt(this);


 图4-1-2 QT信息提示框运行效果

    3. 致命信息提示框

static StandardButton critical(QWidget *parent, const QString &title,const QString &text, StandardButtons buttons = Ok,StandardButton defaultButton = NoButton);

参数信息:

QWidget *parent:父窗口指针。

const QString &title:对话框标题。

const QString &text:提示的文本信息。

StandardButtons buttons = Ok :可选择的标准按钮。

StandardButton defaultButton = NoButton : 默认选择的按钮。

返回值:选中的按钮。

  • StandardButtons是标准按钮的枚举类型,枚举类型的值如下表:

QMessageBox::Ok

确定

QMessageBox::Open

打开

QMessageBox::Save

保存

QMessageBox::Cancel

取消

QMessageBox::Close

关闭

QMessageBox::Discard

丢弃

QMessageBox::Yes

Yes

QMessageBox::No

No

  • 使用示例

int value;

value=QMessageBox::critical(this,"错误提示","当前产生了一个致命错误!",

QMessageBox::Ok | QMessageBox::Discard| QMessageBox::Cancel,QMessageBox::Ok);

    switch(value)

    {

        case QMessageBox::Ok:

            /*处理代码*/

            break;

        case QMessageBox::Cancel:

            /*处理代码*/

            break;

        case QMessageBox::Discard:

            /*处理代码*/

            break;

    }



图4-1-3 致命错误提示框运行效果

    4. 基本信息提示框

StandardButton information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)

参数信息:

QWidget *parent:父窗口指针。

const QString &title:对话框标题。

const QString &text:提示的文本信息。

StandardButtons buttons = Ok :可选择的标准按钮。

StandardButton defaultButton = NoButton : 默认选择的按钮。

返回值:选中的按钮。

  • 使用示例


int value;

value=QMessageBox::information(this,"错误提示","基本信息提示框演示",

QMessageBox::Ok | QMessageBox::Discard|QMessageBox::Cancel,QMessageBox::Ok);

switch(value)

{

case QMessageBox::Ok:

    /*处理代码*/

    break;

case QMessageBox::Cancel:

    /*处理代码*/

    break;

case QMessageBox::Discard:

    /*处理代码*/

    break;

}



图4-1-4 基本信息提示框运行效果

    5. 询问消息框

StandardButton information(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)

参数信息:

QWidget *parent:父窗口指针。

const QString &title:对话框标题。

const QString &text:提示的文本信息。

StandardButtons buttons = Ok:可选择的标准按钮。

StandardButton defaultButton = NoButton:默认选择的按钮。

返回值:选中的按钮。

  • 使用示例

int value;

value=QMessageBox::question(this,"询问提示","确定退出?",

QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes);

switch(value)

{

case QMessageBox::Yes:

    /*处理代码*/

    break;

case QMessageBox::No:

    /*处理代码*/

    break;

}



图4-1-5 询问提示框运行效果

    6. 警告信息提示框

StandardButton warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)

参数信息:

QWidget *parent:父窗口指针。

const QString &title:对话框标题。

const QString &text:提示的文本信息。

StandardButtons buttons = Ok:可选择的标准按钮。

StandardButton defaultButton = NoButton:默认选择的按钮。

返回值:选中的按钮。

  • 使用示例

int value;

value=QMessageBox::warning(this,"警告提示","配置文件未找到,请检查路径!",

QMessageBox::Ok | QMessageBox::Discard,QMessageBox::Ok);

switch(value)

{

case QMessageBox::Ok:

    /*处理代码*/

    break;

case QMessageBox::Discard:

    /*处理代码*/

    break;

}



图4-1-6 警告提示框运行效果

4.1.2 QMessageBox常用成员函数介绍


创建QMessageBox对话框除了用静态函数之外,还可以使用接口函数创建对话框,实现制作个性对话框。

  • 使用QMessageBox成员函数创建对话框示例

QMessageBox msgBox;

msgBox.setText("文件内容已经被更改!");

msgBox.setInformativeText("是否需要保存更改?");

msgBox.setWindowTitle("文件提示");

msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);

msgBox.setDefaultButton(QMessageBox::Save);

int ret = msgBox.exec();

switch (ret)

{

case QMessageBox::Save:

   //处理代码

   break;

case QMessageBox::Discard:

   //处理代码

   break;

case QMessageBox::Cancel:

   //处理代码

   break;

}

  • 以下介绍QMessageBox常用的成员函数

    1. 设置对话框窗口标题

void setWindowTitle(const QString &title);

    2. 添加标准对话框按钮

void setStandardButtons(StandardButtons buttons);  //添加标准对话框按钮

StandardButtons standardButtons() const;

StandardButtons是一个标准按钮的枚举类型。可以参考4.1.1小节。

    3. 添加按钮

void addButton(QAbstractButton *button, ButtonRole role);

QPushButton *addButton(const QString &text, ButtonRole role);

QPushButton *addButton(StandardButton button);

void removeButton(QAbstractButton *button);  //移除按钮

StandardButton是一个枚举类型,表示按钮的类型,在检测按钮是否按下时比较有用。

使用示例:

QMessageBox msgBox;

msgBox.setText("文件内容已经被更改!");

msgBox.setInformativeText("是否需要保存更改?");

msgBox.setWindowTitle("文件提示");

QPushButton *button_ok=new QPushButton("确定");

QPushButton *button_close=new QPushButton("取消");

msgBox.addButton(button_ok,QMessageBox::AcceptRole);

msgBox.addButton(button_close,QMessageBox::RejectRole);

int ret = msgBox.exec();

switch (ret)

{

case QMessageBox::AcceptRole:

   //处理代码

   break;

case QMessageBox::RejectRole:

   //处理代码

   break;

}

    4. 添加复选框按钮

void QMessageBox::setCheckBox(QCheckBox *cb)

QCheckBox *QMessageBox::checkBox() const

    5. 获取被点击的按钮指针

QAbstractButton *QMessageBox::clickedButton() const

使用示例:

QMessageBox messageBox(this);

QAbstractButton *disconnectButton =messageBox.addButton(tr("Disconnect"), QMessageBox::ActionRole);

/*…………..…*/

messageBox.exec();

if (messageBox.clickedButton() == disconnectButton) {

    /*处理代码*/

}

    6. 文本设置相关的函数

QString text() const  //获取字符串文本

void setText(const QString &text) //设置消息框显示的字符串文本

QString informativeText() const //扩展文本获取

void setInformativeText(const QString &text)  //扩展文本设置

Qt::TextFormat textFormat() const //获取文本格式

void setTextFormat(Qt::TextFormat format)  //文本格式设置

    7. 设置消息框默认按下的按钮

void QMessageBox::setDefaultButton(QPushButton *button)

void QMessageBox::setDefaultButton(StandardButton button)

    8. 消息框默认图标设置

Icon icon() const

void setIcon(Icon)

Icon参数的可选参数:QMessageBox::NoIcon、QMessageBox::Question、QMessageBox::Information、QMessageBox::Warning、QMessageBox::Critical

    9. 消息框自定义图标设置

QPixmap iconPixmap() const

void setIconPixmap(const QPixmap &pixmap)

使用示例:

msgBox.setIconPixmap(QPixmap("E:/msg_error.png"));



图4-1-7 消息框自定义图标运行效果

4.2 标准颜色对话框


QColorDialog类提供了一个用于选择颜色的对话框控件,用来给用户提供选择颜色的功能。

4.2.1 创建颜色对话框


  • QColorDialo类提供了一个静态函数,方便用户打开对话框获取颜色值:

QColor QColorDialog::getColor(const QColor &initia= Qt::white, QWidget *parent = Q_NULLPTR, const QString &title = QString(), ColorDialogOptions options = ColorDialogOptions())

参数:

const QColor &initia= Qt::white :默认选择的颜色。

QWidget *parent = Q_NULLPTR:父窗口指针。

const QString &title = QString():颜色对话框的标题

ColorDialogOptions options = ColorDialogOptions():颜色对话框显示的模式

使用示例:

QColor clr=QColorDialog::getColor(Qt::white,this,tr("颜色选择"));

if(clr.isValid())

{

    /*处理代码*/

}



图4-2-1 颜色选择框运行效果

  •  以下介绍两个颜色运用的例子

    1. 设置textEdit文本编辑器字体的颜色示例

QColor clr = QColorDialog::getColor(Qt::black); //设置默认选择的颜色为黑色

if(clr.isValid())   //如果用户选了颜色

{

      ui->textEdit->setTextColor(clr); //设置textEdit文本编辑器字体的颜色

}

    2. 设置按钮前景色示例

QColor clr = QColorDialog::getColor(Qt::black); //设置默认选择的颜色为黑色

if(clr.isValid())   //如果用户选了颜色

{

QString buttons_color = tr("color: %1").arg(clr.name());

    ui->pushButton->setStyleSheet(buttons_color); //使用样式表设置按钮的前景颜色

}

4.2.2 Qcolor类介绍


颜色对话框getColor静态函数的返回值类型是Qcolor,Qcolor类是用来描述一组颜色的的详细信息。通常情况下色彩值会使用一组RGB(red,green,blue:红绿蓝)色彩值来表示,但有时候也会用其他的色彩值组件,比如HSV(hue,saturation,value : 色调,饱和度,阀值) ,除此之外也可以用一个颜色名来指定颜色。


 图4-2-2 颜色表示方法

  • 以下介绍一些常用的成员函数

    1. 判断颜色是否有效

booQColor::isValid() const

返回true表示颜色值有效。

    2. 返回颜色的字符串名称

QString QColor::name() const

返回颜色的名称格式:“# RRGGBB”,即“#”字符后面跟着三组十六进制数字。

    3. 构造颜色值

QColor::QColor(int r, int g, int b, int a = 255)

QColor::QColor(const QString &name)

4. 获取颜色值

QRgb QColor::rgb() const

QRgb QColor::rgba() const  //包含透明值

4.3 标准字体对话框


QFontDialog类封装的对话框用于选择标准字体,该对话框是通过一个getFont()静态函数进行创建。

  • getFont()静态函数原型

QFont getFont(boo*ok, const QFont &initial, QWidget *parent = Q_NULLPTR, const QString &title = QString(), FontDialogOptions options = FontDialogOptions())

QFont getFont(boo*ok, QWidget *parent = Q_NULLPTR)

参数:

boo*ok:保存了选择的状态。如果用户点击了确定按钮,ok将赋值为true,否则赋值为false。

const QFont &initial:设置对话框默认选择的字体。

QWidget *parent = Q_NULLPTR:设置父窗体

const QString &title = QString():设置对话框标题

FontDialogOptions options = FontDialogOptions():设置显示的字体类型,可过滤不需要显示字体。比如:等宽字体。

返回值:用户选择的字体由QFont字体类进行描述。

  • 字体对话框使用示例:

boook;

QFont font=QFontDialog::getFont(&ok, QFont("幼圆", 12),this,tr("字体选择"));

if(ok) //用户点击的了确定按钮

{

    this->setFont(font); //设置当前字体

}

else //用户点击了取消按钮

{

     this->setFont(font); //设置当前字体

}



图4-3-1 字体对话框运行效果

4.4 标准文件对话框


QFileDialog类提供了一个获取路径信息的对话框,允许用户遍历文件系统来选择一个或多个路径。QFileDialog提供了一系列静态函数,可以快速方便的创建出符合自己要求的对话框。以下将介绍QFileDialog常用的静态函数。

4.4.1 获取选择的目录路径


static QString getExistingDirectory(QWidget *parent = Q_NULLPTR,

                                    const QString &caption = QString(),

                                    const QString &dir = QString(),

                                    Options options = ShowDirsOnly);

1) 参数解析

QWidget *parent = Q_NULLPTR:父窗口指针

const QString &caption = QString():设置对话框的标题

const QString &dir = QString() :设置默认的目录。不同系统的路径风格都不一样,Linux下”/”表示根目录。

Options options = ShowDirsOnly:设置对话框显示属性。

2) 返回值

如果用户点击了取消按钮将返回空字符,点击确定按钮将返回选中的目录路径字符串。

3) 使用示例

QString dir=QFileDialog::getExistingDirectory(this,"选择目录","C:/",

QFileDialog::ShowDirsOnly| QFileDialog::DontResolveSymlinks);

//dir==返回目录的路径


 图4-4-1 目录选择对话框运行效果

4.4.2 获取打开的文件名称


getOpenFileName函数运用在需要让用户选择文件的场合,只能选择单个文件。

static QString getOpenFileName(QWidget *parent = Q_NULLPTR,

                                   const QString &caption = QString(),

                                   const QString &dir = QString(),

                                   const QString &filter = QString(),

                                   QString *selectedFilter = Q_NULLPTR,

                                   Options options = Options());

1) 参数解析:

QWidget *parent = Q_NULLPTR:父窗口指针

const QString &caption = QString():设置对话框的标题

const QString &dir = QString() :设置默认的目录。不同系统的路径风格都不一样,Linux下”/”表示根目录。

const QString &filter = QString():设置需要过滤的文件后缀。

2) 返回值

如果用户点击了取消按钮将返回空字符,点击确定按钮将返回选中的目录路径字符串。

3) 使用示例

QString filename=QFileDialog::getOpenFileName(this,"选择打开的文件","C:/",tr("*.bmp *.jpg *.png"));

//filename==选择文件的绝对路径



 图4-4-2 getOpenFileName运行效果

4.4.3 获取打开的文件名称列表


getOpenFileNames函数运用在允许让用户选择文件的场合,运行用户同时选择多个文件,比如:Ctrl+A。返回的文件名称由QStringList字符串列表保存。

static QStringList getOpenFileNames(QWidget *parent = Q_NULLPTR,

                                    const QString &caption = QString(),

                                    const QString &dir = QString(),

                                    const QString &filter = QString(),

                                    QString *selectedFilter = Q_NULLPTR,

                                    Options options = Options());

getOpenFileNames函数形参参考getOpenFileName函数。返回值是QStringList类型。

使用示例:

QStringList filenamelist=QFileDialog::getOpenFileNames(this,"选择打开的文件","C:/",tr("*.bmp *.jpg *.png"));

for(int i;i<filenamelist.count();i++)

{

    qDebug()<<filenamelist.at(i); //循环取出列表中的文件名称

}

4.4.4 获取保存的文件名称


getSaveFileName函数运用在需要保存文件的场合,可以获取保存的文件名称,比如:拍照保存的、录制视频等。返回的文件名是一个QString类型。如果点击取消按钮,返回空字符串。

static QString getSaveFileName(QWidget *parent = Q_NULLPTR,

                                 const QString &caption = QString(),

                                 const QString &dir = QString(),

                                 const QString &filter = QString(),

                                 QString *selectedFilter = Q_NULLPTR,

                                 Options options = Options());

 使用示例:

QString filename=QFileDialog::getSaveFileName(this,"保存到文件","C:/imagefile.bmp",tr("*.bmp *.jpg *.png"));

qDebug()<<filename; //文件名称



 图4-4-3 getSaveFileName运行效果

4.5 标准输入对话框


QInputDialog类提供了的对话框允许用户输入一个值。输入的值可以是字符串、整数、浮点数、下拉框等类型。必须设置一个标签告诉用户应该输入什么数据。输入对话框一般使用QInputDialog提供的几个静态函数进行创建,下面将介绍常用的几个静态函数。

4.5.1 浮点数输入框


static double getDouble(QWidget *parent, const QString &title,

const QString &label,

double value = 0,

                            double minValue = -2147483647,

double maxValue = 2147483647,

                            int decimals = 1,

boo*ok = Q_NULLPTR,

Qt::WindowFlags flags = Qt::WindowFlags());

1) 参数解析:

QWidget *parent:父窗口指针

const QString &title:对话框标题

const QString &label:创建的标签,提示用户该输入什么数据。

double value = 0:设置默认显示的值

double minValue = -2147483647:最小值设置

double maxValue = 2147483647:最大值设置

int decimals = 1:设置小数位数

boo*ok = Q_NULLPTR:保存输入的状态值。

Qt::WindowFlags flags = Qt::WindowFlags():设置对话框的类型。

2) 返回值:用户输入的值。

3) 使用示例:

boook;

double d = QInputDialog::getDouble(this, tr("金额设置"),tr("输入金额:"), 37.56, -10000, 10000, 2, &ok);

if (ok)

    doubleLabel->setText(QString("$%1").arg(d));  //显示输入的数值



图4-5-1 浮点数输入框效果图

4.5.2 整数输入框


static int getInt(QWidget *parent, const QString &title, const QString &label, int value = 0,

                      int minValue = -2147483647, int maxValue = 2147483647,

                      int step = 1, boo*ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());

使用方法与浮点数输入框类似。参数的填充可以参考浮点数输入框,其中“int step = 1”表示整数步进的步数。

使用示例:

boook;

int data = QInputDialog::getInt(this, tr("获取年龄"),tr("输入年龄:"), 20, 10, 1000, 2, &ok);

if (ok)

    intLabel->setText(QString("$%1").arg(data));  //显示设置



图4-5-2 整数输入框效果图

4.5.3 下拉框输入


static QString getItem(QWidget *parent, const QString &title, const QString &label,

                       const QStringList &items, int current = 0, booeditable = true,

                       boo*ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags(),

                       Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

1) 参数:

const QStringList &items:创建下拉框显示的选项列表。

int current = 0:设置默认选择的项目索引

booeditable = true:设置下拉框的可编辑属性

boo*ok = Q_NULLPTR:保存状态

2) 使用示例:

QStringList items;

//设置选项

items << tr("Spring春天") << tr("Summer夏天") << tr("Fall秋天") << tr("Winter 冬天");

boook;

QString item = QInputDialog::getItem(this, tr("季节选择"),tr("请选择对应的季节:"), items, 0, false, &ok);

if (ok && !item.isEmpty())   //判断用户是否点击了OK

ui->lineEdit->setText(item);  //在单行编辑器显示标准输入框获取的内容





图4-5-3 下拉框效果图

4.5.4 多行输入框


static QString getMultiLineText(QWidget *parent, const QString &title, const QString &label,

                                const QString &text = QString(), boo*ok = Q_NULLPTR,

                                Qt::WindowFlags flags = Qt::WindowFlags(),

                                Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

使用示例:

boook;

QString text= QInputDialog::getMultiLineText(this,"信息采集","请输入改进建议:","1. 加入时间管理",&ok);

if (ok && !text.isEmpty())

ui->lineEdit->setText(text) //在单行编辑器显示标准输入框获取的内容



图4-5-4 多行输入框效果图

4.5.6 单行输入框


static QString getText(QWidget *parent, const QString &title, const QString &label,

                         QLineEdit::EchoMode echo = QLineEdit::Normal,

                         const QString &text = QString(), boo*ok = Q_NULLPTR,

                         Qt::WindowFlags flags = Qt::WindowFlags(),

                         Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

参数:

QLineEdit::EchoMode echo = QLineEdit::Normal:设置单行编辑框的显示模式。

使用示例:

boook;

QString text = QInputDialog::getText(this, tr("文本查找"),tr("请输入查找的关键字:"), QLineEdit::Normal,

                                  tr("qstring"),&ok);

if (ok && !text.isEmpty())

 ui->lineEdit->setText(text); //在单行编辑器显示标准输入框获取的内容



图4-5-5 多行输入框效果图


技术合作与咨询

QQ:1126626497
关注我长按二维码可识别微信号:xl1126626497



----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:DS小龙哥 嵌入式技术资讯,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了