对话框
- 一.前言
- 二.文件对话框
- 1.选择一个文件
- 2.选择多个文件
- 3.选择目录
- 4.保存文件
 
- 三.颜色对话框
- 1.获取颜色
 
- 四.字体对话框
- 1.获取字体
 
- 五.输入对话框
- 1.输入文本
- 2.输入整数
- 3.输入小数
- 4.输入条目
 
- 六.消息对话框
- 1.问题框
- 2.信息框
- 3.警告框
- 4.危机框
- 5.关于框
- 6.关于qt框
- 七.总结
 
一.前言
对话框就是主窗口的子窗口弹出,以供你操作完后,才能继续对主窗口进行操作。
 光说不练假把式,我们还是来边做边学。
 目标图:
 
看到这么多是不是已经害怕了,不用怕,只要记住接口就行了,参数我们可以查找在线文档!
先做界面吧!
 
 不会的可以问我哦,界面的拖放就不讲了!
二.文件对话框
1.选择一个文件
void MainWindow::on_pushButtonSelectFile_clicked()
{
   QString fileName= QFileDialog::getOpenFileName(
               this,//父窗口是谁
               "选择一个文件",//对话框标题
               QDir::currentPath(),//打开对话框的路径
               "文本文件(*.txt);;C/C++文件(*.c *.h *.cpp);;图片文件(*.png *.jpg *.gif);;所有文件(*.*)");//筛选器
   if(!fileName.isEmpty())
   {
       ui->plainTextEdit->appendPlainText(fileName);
   }
}
运行结果:
 点击会弹出你刚刚设置路径的文件对话框
 
确定后
 
可以通过f1来查看参数,所以我们需要的是记住接口
 
2.选择多个文件
用法基本与选择一个文件相同,只不过接口多了一个S,返回的是一个字符串链表而已!
void MainWindow::on_pushButtonSelectFiles_clicked()
{
    QStringList fileNames= QFileDialog::getOpenFileNames(
                this,
                "选择多个文件",
                QDir::currentPath(),
                "文本文件(*.txt);;C/C++文件(*.c *.h *.cpp);;图片文件(*.png *.jpg *.gif);;所有文件(*.*)");
    if(fileNames.count()>0)
    {
        for(int i=0;i<fileNames.count();i++)
        {
            ui->plainTextEdit->appendPlainText(fileNames[i]);
        }
        
    }
}
运行结果:
 
 
3.选择目录
void MainWindow::on_pushButtonSelectMu_clicked()
{
    QString fileName= QFileDialog::getExistingDirectory(
                this,
                "选择一个文件",
                QDir::currentPath(),
                QFileDialog::ShowDirsOnly);//只显示目录
    if(!fileName.isEmpty())
    {
        ui->plainTextEdit->appendPlainText(fileName);
    }
}
运行结果:
 
 
4.保存文件
void MainWindow::on_pushButtonSaveFile_clicked()
{
    QString fileName= QFileDialog::getSaveFileName(
                this,
                "选择一个文件",
                QDir::currentPath(),
                "文本文件(*.txt);;C/C++文件(*.c *.h *.cpp);;图片文件(*.png *.jpg *.gif);;所有文件(*.*)");
    if(!fileName.isEmpty())//如果路径不为空
    {
        //将纯文本编辑器的内容保存到txt文件中
        QFile qFile(fileName);
        //以只写,保存到文本文件,截断的方式打开文件
        if(!qFile.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Truncate))
        {
            return;//打开文件失败就返回
        }
        QTextStream stream(&qFile);
        stream<<ui->plainTextEdit->toPlainText();
        qFile.close();
        ui->plainTextEdit->appendPlainText("已保存到:"+fileName);
    }
}
运行结果:
 
 
 我们来看看是不是真的保存了
 
哈哈看来真的保存了也。
三.颜色对话框
1.获取颜色
void MainWindow::on_pushButtonColoe_clicked()
{
    QPalette plet=ui->plainTextEdit->palette();//拿到纯文本编辑器
    QColor currentColor=plet.color(QPalette::Text);//拿到文本颜色
    
    QColor color=QColorDialog::getColor(
                currentColor,//默认选中颜色
                this,
                "颜色选择框");
    if(color.isValid())
    {
        plet.setColor(QPalette::Text,color);//修改成选择的颜色
        ui->plainTextEdit->setPalette(plet);//设置到纯文本中
    }
}
运行结果:
 
 
四.字体对话框
1.获取字体
void MainWindow::on_pushButtonFont_clicked()
{
    bool ok=false;
    QFont font=QFontDialog::getFont(
                         &ok,//判断是否选择成功
                         ui->plainTextEdit->font(),//对话框默认字体
                         this,
                         "字体选择框");
    if(ok)
    {
        ui->plainTextEdit->setFont(font);
    }
}
参数我也记不住,一定要看在线文档呀
 
运行结果:
 
五.输入对话框
1.输入文本
void MainWindow::on_pushButtonString_clicked()
{
    bool ok=false;
    QString str=QInputDialog::getText(
                this,
                "输入文本框",
                "请输入姓名:",
                QLineEdit::Normal,//输入的方式
                "姚国林",//默认值
                &ok);//判断是否成功
    if(ok&&!str.isEmpty())
    {
        ui->plainTextEdit->appendPlainText(str);
    }
}
运行结果:
 
 这里的输入方式有4种
 NoEcho就是没有回显的,类似于Linux操作系统里输入密码
 Password就是正常的*******这种
 最后一个就是,当输入密码时显示,不输入的时候 ******

2.输入整数
void MainWindow::on_pushButtonInt_clicked()
{
    bool ok=false;
    //我这里是输入整数打算与字体大小关联起来
    int value =QInputDialog::getInt(
                this,
                "整数输入框",
                "请输入字体大小:",
                ui->plainTextEdit->font().pixelSize(),//默认输入的大小
                8,//最小值
                80,//最大值
                1,//单步值
                &ok);
    if(ok)
    {
        QFont font=ui->plainTextEdit->font();
        font.setPointSize(value);
        ui->plainTextEdit->setFont(font);
    }
}
运行结果:
 
3.输入小数
void MainWindow::on_pushButtonFloat_clicked()
{
    bool ok=false;
    double value=QInputDialog::getDouble(
                this,
                "输入浮点数框",
                "输入小数:",//前缀
                3.14,//默认值
                0,//最小值
                999,//最大值
                2,//精度
                &ok);
    if(ok)
    {
        QString str=QString::asprintf("输入了一个浮点数:%.2f",value);
        ui->plainTextEdit->appendPlainText(str);
    }
}
运行结果:
 
4.输入条目
void MainWindow::on_pushButtonItem_clicked()
{
    bool ok=false;
    QStringList jobs={"老师","医生","炊事员","程序员"};
    QString job= QInputDialog::getItem(
                this,
                "输入条目框",
                "请选择职业:",
                jobs,//条目列表
                0,//默认显示第几个
                true,//是否能进行编辑
                &ok);
    if(ok&&!job.isEmpty())
    {
        ui->plainTextEdit->appendPlainText(job);
    }
                
}
运行结果:

六.消息对话框
1.问题框
void MainWindow::on_pushButtonQuestion_clicked()
{
    QMessageBox::StandardButton ret= QMessageBox::question(//返回的是一个标准按钮
                this,
                "问题框",
                "你承认你是一个帅哥吗?",//问题框内容
                QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel,//选择的按钮
                QMessageBox::NoButton);//默认的选择
    
    if(ret==QMessageBox::Yes)
    {
        ui->plainTextEdit->appendPlainText("选择了 YES");
    }
    else if(ret==QMessageBox::No)
    {
        ui->plainTextEdit->appendPlainText("选择了 No");
    }
    else if(ret==QMessageBox::Cancel)
    {
        ui->plainTextEdit->appendPlainText("选择了 Cancel");
    }
    else
    {
        ui->plainTextEdit->appendPlainText("什么也没有选择");
    }
}
运行结果:
 
2.信息框
void MainWindow::on_pushButtonInformation_clicked()
{
    QMessageBox::information(
                this,
                "消息框",
                "你居然不给我点关注",
                QMessageBox::Ok,
                QMessageBox::NoButton);
}
运行结果:
 
3.警告框
void MainWindow::on_pushButtonWarning_clicked()
{
    QMessageBox::warning(
                this,
                "警告框",
                "你要完蛋了!");
}
运行结果:
 
4.危机框
void MainWindow::on_pushButtonCritical_clicked()
{
    QMessageBox::critical(
                this,
                "危机框",
                "你完蛋了!系统姚重启了");
}
运行结果:
 
5.关于框
void MainWindow::on_pushButtonAbout_clicked()
{
    QMessageBox::about(
                this,
                "关于框",
                "我是一位天才,我的能力十分强悍!");
}
运行结果:
 
6.关于qt框
void MainWindow::on_pushButtonAboutQt_clicked()
{
    QMessageBox::aboutQt(
                this,
                "关于Qt");
}
运行结果:
 
七.总结
虽然对话框的种类虽多,但是一类的用法基本差不多,重要的是我们要记住接口就行了,参数不要背,看在线文档!
 对了,这里姚用到这些头文件:
 
慢慢成长,慢慢成为大




















