文章目录
- 前言
- 一、颜色对话框
- 颜色对话框代码解析
- 二、文本对话框
- 文本对话框代码解析
- 三、输入对话框
- 1.整型输入对话框
- 2.浮点数输入对话框
- 3.条目对话框
- 四、提示对话框
- 1.提问对话框
- 2.消息对话框
- 3.警告对话框
- 4.关键对话框
- 五、进度对话框
- 六、向导对话框
- 总结
前言
今天介绍几种标准对话框,都是Qt封装好的,我们先创建一个界面,添加几个按钮,然后分别在几个按钮的回调函数里添加创建不同对话框的逻辑
一、颜色对话框
void MainWindow::on_pushButton_clicked()
{QColorDialog colordlg(Qt::blue,this);//颜色 父本colordlg.setOption(QColorDialog::ShowAlphaChannel);colordlg.exec();//模态对话框 阻塞在这QColor color=colordlg.currentColor();//返回当前颜色qDebug()<<"color is "<<color<<Qt::endl;
}
颜色对话框代码解析
以上代码实现了函数部分
QColorDialog:一个用于让用户选择颜色的对话框
setOption:这是一个方法,用于设置对话框的显示选项。
ShowAlphaChannel:这是一个选项,启用后会在对话框中显示透明度调节控件。
QColorDialog::setOption(QColorDialog::ShowAlphaChannel) 的作用是启用颜色对话框中的Alpha通道设置,允许用户调整颜色的透明度。通过设置这个选项,颜色对话框会显示一个滑块或其他控件,让用户能够调节颜色的透明度级别。这对于需要精确控制颜色透明度的应用场景非常重要,例如在设计图形界面或需要半透明效果的地方。
二、文本对话框
void MainWindow::on_pushButton_2_clicked()
{QString path=QDir::currentPath();//要打开的文件的地址 就用当前的地址QString title="文本对话框";//生成的这个框左上角的名字QString filter = tr("文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)");//filter是一个过滤器QString aFileName=QFileDialog::getOpenFileName(this,title,path,filter);qDebug() << aFileName << Qt::endl;
}
文本对话框代码解析
QDir::currentPath() 返回当前工作目录的路径
QString title 变量保存了对话框的标题文字,当对话框弹出时,标题栏会显示“文本对话框”
QString filter 变量定义了文件对话框中显示的文件类型过滤器。
tr() 函数用于国际化支持,将字符串翻译成当前语言环境下的文字。虽然在这个例子中没有实际变化,但它使代码更具扩展性。
分号 ;; 用于分隔不同的过滤器项。
每个过滤器项由描述和模式组成,例如:
“文本文件(.txt)":显示“文本文件”并仅列出 .txt 文件。
"图片文件(.jpg .gif .png)":显示“图片文件”并列出 .jpg, .gif, 和 .png 文件。
"所有文件(.)”:显示“所有文件”并列出所有类型的文件。
QFileDialog::getOpenFileName 是一个静态方法,用于显示一个标准的打开文件对话框
三、输入对话框
1.整型输入对话框
void MainWindow::on_pushButton_3_clicked()
{bool falg=false;auto intdata=QInputDialog::getInt(this,tr("整型输入"),tr("请输入"),200,0,400,1,&falg);if(falg){qDebug() << intdata << Qt::endl;}
}
2.浮点数输入对话框
void MainWindow::on_pushButton_4_clicked()
{bool falg=false;auto doubledata=QInputDialog::getDouble(this,tr("浮点数输入"),tr("请输入"),0.1,-2,4,1,&falg);if(falg){qDebug() << doubledata << Qt::endl;}
}
3.条目对话框
void MainWindow::on_pushButton_5_clicked()
{bool flag=false;QStringList items;items<<"条目1"<<"条目2";//创建一个个条目auto itemdata=QInputDialog::getItem(this,tr("条目对话框"),tr("请选择"),items,1,true,&flag);if(flag){qDebug() << itemdata << Qt::endl;}
}
四、提示对话框
1.提问对话框
QMessageBox::question(this,tr("提示对话框"),tr("你是单身狗吗?"));//默认有两个按键Yes No
2.消息对话框
QMessageBox::information(this,tr("提示对话框"),tr("请赶紧学习!"),QMessageBox::Yes);
3.警告对话框
QMessageBox::warning(this,tr("警告对话框"),tr("你最好找个地方发泄一下"),QMessageBox::Ok);
4.关键对话框
QMessageBox::critical(this,tr("关键提示对话框"), tr("我梦寐以求是真爱和自由"),QMessageBox::Ok);
五、进度对话框
当我们复制或进行文件传输时,会显示一个进度条的对话框,我们可以使用QProcessDialog来操作
void MainWindow::on_pushButton_7_clicked()
{_progressdialog=new QProgressDialog(tr("文件复制中"),tr("取消复制"),0,5000,this);_progressdialog->setWindowTitle("文件复制框");_progressdialog->setWindowModality(Qt::ApplicationModal);//设置为全局模态//设置定时器_qtimer=new QTimer(this);//时间到了就更新connect(_qtimer,&QTimer::timeout,this,&MainWindow::on_updateProgressDialog);connect(_progressdialog,&QProgressDialog::canceled,this,&MainWindow::on_cancelProgressDialog)_qtimer->start(2);//每2毫秒开始一次}void MainWindow::on_updateProgressDialog()//窗口的更新
{_count++;if(_count>5000){_qtimer->stop();//停止delete _qtimer;_qtimer=nullptr;delete _progressdialog;_progressdialog=nullptr;_count=0;return;}_progressdialog->setValue(_count);
}void MainWindow::on_cancelProgressDialog()
{_qtimer->stop();delete _qtimer;_qtimer = nullptr;delete _progressdialog;_progressdialog= nullptr;_count = 0;return;}
我们首先创建一个按键,然后构造这个槽函数on_pushButton_7_clicked()
当点击按键时进入这个槽函数,这里的 _progressdialog是QProgressDialog类型,我把他写成了指针当作类MainWindow的类对象,所以这里就直接new就行(如果直接用对象的方式创建的话一定要绑定父窗口)下面那个_qtimer我也在MainWindow中的对象里面添加了,
_count相当于进度条,如果满了5000,就退出窗口,定时器和窗口都是new出来的,所以要手动delete
下面这个函数on_cancelProgressDialog()是因为打开窗口会有一个取消的按钮,我们为了点击取消可以关闭窗口就写了这个函数
六、向导对话框
当我们想引导用户操作时可以采用向导对话框,比如安装软件时就会根据向导对话框一步一步操作,我们也实现一个向导对话框
我先写一部分供大家看看
void MainWindow::on_pushButton_8_clicked()
{QWizard wizar(this);wizar.setWindowTitle(tr("全城热恋"));auto page1=new QWizardPage();page1->setTitle(tr("婚恋介绍引导程序"));auto label1=new QLabel();label1->setText(tr("该程序帮助您找到人生伴侣"));auto layout=new QVBoxLayout();layout->addWidget(label1);page1->setLayout(layout);wizar.addPage(page1);wizar.show();wizar.exec();
}
QWizard是向导对话框
QWizardPage是向导对话框中的每一页的页面
QLabel是标签 上面可以输入文字
QVBoxLayout是垂直布局
流程就是新开一页,写页名,然后写标签,标签和页面放入布局中,然后再总体加入这个wizar向导中
给你们看看这一页的演示效果,再对着代码分析
接下来我们继续完成全部内容
总体代码如下
void MainWindow::on_pushButton_8_clicked()
{//第一页-----------------------------QWizard wizar(this);wizar.setWindowTitle(tr("全城热恋"));auto page1=new QWizardPage();page1->setTitle(tr("婚恋介绍引导程序"));auto label1=new QLabel();label1->setText(tr("该程序帮助您找到人生伴侣"));auto layout=new QVBoxLayout();layout->addWidget(label1);page1->setLayout(layout);wizar.addPage(page1);//第二页------------------------------QWizardPage * page2=new QWizardPage();page2->setTitle(tr("选择心动类型"));auto group=new QButtonGroup(page2);//将按钮组父亲设置到第二页上//创建第一个按钮 添加名字 放入按钮组中auto btn1=new QRadioButton;btn1->setText(tr("白富美"));group->addButton(btn1);//创建第二个按钮 添加名字 放入按钮组中auto btn2=new QRadioButton;btn2->setText(tr("萝莉"));group->addButton(btn2);auto btn3=new QRadioButton;btn3->setText(tr("御姐"));group->addButton(btn3);auto btn4=new QRadioButton;btn4->setText(tr("清纯少女"));group->addButton(btn4);auto btn5=new QRadioButton;btn5->setText(tr("女汉子"));group->addButton(btn5);auto btn6=new QRadioButton;btn6->setText(tr("成年人不做选择!我全要!"));group->addButton(btn6);auto layout2=new QVBoxLayout();for(int i=0;i<group->buttons().size();i++){layout2->addWidget(group->buttons()[i]);}page2->setLayout(layout2);wizar.addPage(page2);//第三页----------------------------------QWizardPage * page3=new QWizardPage();page3->setTitle(tr("你的缘分即将到来"));auto label3=new QLabel();label3->setText("感谢您的参与,接下来的一个月会遇到对的人!");QVBoxLayout * layout3=new QVBoxLayout();layout3->addWidget(label3);//标签放入布局page3->setLayout(layout3);//布局放入页面wizar.addPage(page3);wizar.show();wizar.exec();
}
内容展示
总结
在调用这些对话框的时候不需要死记硬背,传参的时候多查看文档即可
函数内参数是什么不需要记,忘记了就查看文档,多用就会了
基础对话框基本上就是以上这些了,在实际开发中99%的也是这些,和在这些的基础上进行变换!!!!!!!!!!!!!!!!!!!!!!