我的QT Creator学习笔记(七)——标准对话框

    参考文献:《Qt Creator 快速入门》第三版 霍亚飞编著

Qt提供了一些常用的对话框类型,他们全部继承自QDialog类,并增加了自己的特色功能,比如获取颜色、显示特定信息等。

新建Qt Widgets应用,在其ui设计模式中添加一些按钮,然后实现点击不同按钮显示不同对话的演示。

 

1、颜色对话框

     颜色对话框类QColorDialog提供了一个可以获取指定颜色的对话框部件。

    转到“颜色对话框”的单机信号槽,修改代码如下(记得要包含<QDebug>和<QColorDialog>)

void MyWidget::on_pushButton_clicked()
{
    QColor color=QColorDialog::getColor(Qt::red,this,"color dialog");
    qDebug()<<"color"<<color;

}

        这里使用了QColorDialog的静态函数getColor来获取颜色,它的3个参数,分别是:设置初始颜色、指定父窗口和设置对话框标题

点击“颜色对话框”,弹出如下对话框

           选择黑色点击OK后,输出信息color QColor(ARGB 1, 0, 0, 0)。4个值分别代表透明度(alpha)、红色(red)、绿色(green)、蓝色(blue)。

        在getColor函数中还可以使用最后一个参数添加对alpha的设置,代码如下

QColor color=QColorDialog::getColor(Qt::red,this,tr("color dialog"),QColorDialog::ShowAlphaChannel);

        前面使用了QColorDialog的静态函数来直接显示颜色对话框,也可以先创建对象,再设置各项参数,代码如下,效果都是一样的。第一种方法代码更简洁,第二种方法使用更灵活。

void MyWidget::on_pushButton_clicked()
{
    QColorDialog colorDlg(Qt::red,this);
    colorDlg.setOption(QColorDialog::ShowAlphaChannel);
    colorDlg.exec();
    QColor color=colorDlg.currentColor();
    qDebug()<<"color"<<color;

}

2、文件对话框

  文件对话框类QFileDialog类提供了一个允许用户选择文件或文件夹的对话框。

  转到“文件对话框”按钮的单击信号槽修,改代码如下

void MyWidget::on_pushButton_5_clicked()
{
    QString fileName=QFileDialog::getOpenFileName(this,"file dialog","D:","picture(*png *jpg)");
    qDebug()<<"fileName"<<fileName;
}

        这里使用了QFileDialog的静态函数getOpenFileName来获取选择的文件名,这个函数会以模态形式运行一个文件对话框。它的4个参数分别是:指定父窗口、设置对话框标题、指定默认打开路径和设置文件类型过滤器。

点击“颜色对话框”按钮,弹出如下对话框。

选择某个文件后,输出信息如下

fileName "D:/fundrive/mapbarengin/dmax/images/map/camera_icons/s_10.png"。

 

3、字体对话框

字体对话框QFontDialog类提供了一个可以选择字体的对话框部件。

转到“字体对话框”按钮的单击信号槽,修改代码如下

void MyWidget::on_pushButton_2_clicked()
{
    bool ok;
    QFont font=QFontDialog::getFont(&ok,this);
    //如果单击OK按钮,让“字体对话框”按钮使用新字体
    //如果单击Cancel按钮,那么输出信息。
    if(ok)
        ui->pushButton_2->setFont(font);
    else
        qDebug()<<"unselect font";
}

        这里使用了QFontDialog的getFont()静态函数来获取选择的字体。这个函数的第一个参数用来存放按下的按钮状态,true-ok,false-cancel。

   单击“字体对话框”按钮弹出如下对话框

4、输入对话框

      输入对话框QInputDialog类用来提供一个对话框,可以让用户输入一个单一的值或字符串。

     转到“字体对话框”按钮的单击信号槽,修改代码如下

void MyWidget::on_pushButton_6_clicked()
{
    bool ok;
    //获取字符串
    QString string=QInputDialog::getText(this,"input string dialog",
                                           "input user name:",QLineEdit::Normal,"admin",&ok);
    if(ok)
        qDebug()<<"string:"<<string;
    //获取整数
    int value=QInputDialog::getInt(this,"input integer dialog",
                                   "please input int from -1000 to 1000",100,-1000,1000,10,&ok);
    if(ok)
         qDebug()<<"value:"<<value;
    //获取浮点数
    double value2=QInputDialog::getDouble(this,"input double dialog","please input double form -1000 to 1000",
                                          0.00,-1000,1000,2,&ok);
    if(ok)
        qDebug()<<"value2:"<<value2;

    QStringList items;
    items<<"itme1"<<"itme2";
    //获取条目
    QString item=QInputDialog::getItem(this,"input item dialog",
                                       "please input or chose a item",items,0,true,&ok);
    if(ok)
        qDebug()<<"item:"<<item;

}

       这里一个创建了4个不同类型的输入对话框,也就是使用了4个静态函数。1、getText函数可以提供一个可输入字符串的对话框,个参数的作用分别是: 指定父窗口、设置窗口标题、设置对话框中的标签显示文本、设置输入字符串的显示模式、设置默认字符串和获取按下按钮信息的布尔变量。2、getInt函数可以提供一个输入整型数值的对话框,其参数依次为:指定父窗口、设置窗口标题、设置对话框中的标签显示文本、设置默认数值、设置最小输入数值、设置最大输入数值、设置使用箭头时,每次按下数值变化
步长和获取按下按钮信息的布尔变量。3、getDouble提供输入浮点型的对话框,其参数与getInt类似。4、getItem提供一个可以输入条目的对话框,需要先给它提供一些条目如这里的items,另外参数0表示默认显示列表中的第0条,true表示可以被更改。

 

  5、消息对话框

    消息对话框QMessageBox类提供了一个模态的对话框来通知用户一些信息,或者向用户提出一个问题,并且获取答案。

   转到“消息对话框”按钮的单击信号槽,修改代码如下

void MyWidget::on_pushButton_3_clicked()
{
    //quesition dialog
    int ret1=QMessageBox::question(this,"quesition dialog","Do you know qt?",QMessageBox::Yes,QMessageBox::No);
    if(ret1==QMessageBox::Yes)
        qDebug()<<"Qusition Yes";
    //inform dialog
    int ret2=QMessageBox::information(this,"infomation dialog","this is qt creator book!",QMessageBox::Ok);
    if(ret2==QMessageBox::Ok)
        qDebug()<<"information dialog ok";
    //warning dialog
    int ret3=QMessageBox::warning(this,"warning dialog","can not end now",QMessageBox::Abort);
    if(ret3==QMessageBox::Abort)
        qDebug()<<"warning dialog";
    //error dialog
    int ret4=QMessageBox::critical(this,"critical dialog","There is an error,please restart",QMessageBox::YesAll);
    if(ret4==QMessageBox::YesAll)
        qDebug()<<"error";
    //about dialog
    QMessageBox::about(this,"ABout dialog","Qt creator");
}

这里创建了4个不同类型的消息对话框,几个参数分别用于设置父窗口、标题栏、显示信息和拥有哪些标准按钮。返回值就是那些标准按钮。about没有返回值,因为它默认只有一个按钮。运行效果如下

6、进度对话框

     进度对话框QProgressDialog对一个耗时较长的操作的进度提供了反馈。

     转到“进度对话框”按钮的单击槽,修改代码如下。

void MyWidget::on_pushButton_7_clicked()
{
    QProgressDialog dialog("copy file ......","cancel",0,5000,this);
    dialog.setWindowTitle("progress dialog");
    dialog.setWindowModality(Qt::WindowModal);
    dialog.show();
    for(int i=0;i<=5000;i++)
    {
        dialog.setValue(i);
        QCoreApplication::processEvents();//避免界面冷冻
        if(dialog.wasCanceled())
            break;
    }
    qDebug()<<"copy file finished";
}

   这里首先创建了一个progressDialog 对话框的类对象dialog,构造函数的参数分别用于设置对话框的标签内容、取消按键的显示文本、最小值、最大值、父窗口。for循环模拟文件复制,setValue函数使得进度条向前推进。wasCanceled函数用来判断是否按下了cancel按键。运行效果如下

7、错误信息对话框

    错误信息对话框QErrorMessage提供了一个显示错误信息的对话框。

    首先在widget的头文件里添加类的前置声明 ,并添加QErrorMessage类型的私有成员变量

   

class QErrorMessage;

 

QErrorMessage* errordlg;

     转到“错误信息对话框”的单击槽,修改代码如下

void MyWidget::on_pushButton_4_clicked()
{
    errordlg->setWindowTitle("error dlg");
    errordlg->showMessage("this is  error info");
}

      showMessage函数会以模态对话框的信息显示错误信息。这里之所以使用成员变量,而不是在槽函数里创建一个临时对话框,是因为错误信息对话框默认有一个“show this message again"复选框,可以选择以后是否还要显示相同错误信息。用临时对话框的话框,这个复选框起不到作用。

     运行效果如下

 

8、向导对话框

  向导对话框QWizard类提供了一个设计向导界面的框架。

  添加三个返回值为QWizardPage类对象的指针函数,其实现代码如下

QWizardPage* MyWidget::createPage1()//向导页面1
{
    QWizardPage* page=new QWizardPage;
    page->setTitle("introduce");
    return page;
}

QWizardPage* MyWidget::createPage2()//向导页面2
{
    QWizardPage* page=new QWizardPage;
    page->setTitle("user choice information");
    return page;
}

QWizardPage* MyWidget::createPage3()//向导页面3
{
    QWizardPage* page=new QWizardPage;
    page->setTitle("finished");
    return page;
}

转到“向导对话框”按钮的单击槽,修改代码如下

void MyWidget::on_pushButton_8_clicked()
{
    QWizard wizard(this);
    wizard.setWindowTitle("wizard dialog");
    wizard.addPage(createPage1());
    wizard.addPage(createPage2());
    wizard.addPage(createPage3());
    wizard.exec();
}

     这里新建了QWizard类对象,然后使用addPage()函数为其增加了3个页面。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值