900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > QT_QDialog 对话框

QT_QDialog 对话框

时间:2019-01-28 13:32:51

相关推荐

QT_QDialog 对话框

QT_对话框

建议参考

文章目录

对话框分类1. 文件对话框的使用2. 颜色对话框3. 字体对话框4. 标准输入对话框5. 消息对话框6. 自定义对话框
模态对话框,就是会阻塞同一应用程序中其它窗口的输入。

模态对话框很常见,比如“打开文件”功能。你可以尝试一下记事本的打开文件,当打开文件对话框出现时,我们是不能对除此对话框之外的窗口部分进行操作的。

非模态对话框,例如查找对话框,我们可以在显示着查找对话框的同时,继续对记事本的内容进行编辑。

对话框分类

Qt 的内置对话框大致分为以下几类:

QColorDialog: 选择颜色;QFileDialog: 选择文件或者目录;QFontDialog: 选择字体;QInputDialog: 允许用户输入一个值,并将其值返回;QMessageBox: 模态对话框,用于显示信息、询问问题等;QPageSetupDialog: 为打印机提供纸张相关的选项;QPrintDialog: 打印机配置;QPrintPreviewDialog:打印预览;QProgressDialog: 显示操作过程。

自定义对话框

Qt 支持模态对话框和非模态对话框。

模态与非模态的实现:

使用QDialog::exec()实现应用程序级别的模态对话框

使用QDialog::open()实现窗口级别的模态对话框

使用QDialog::show()实现非模态对话框。

Qt 中使用QDialog类实现对话框。就像主窗口一样,我们通常会设计一个类继承QDialog。QDialog(及其子类,以及所有Qt::Dialog类型的类)的对于其 parent 指针都有额外的解释:如果 parent 为 NULL,则该对话框会作为一个顶层窗口,否则则作为其父组件的子对话框(此时,其默认出现的位置是 parent 的中心)。顶层窗口与非顶层窗口的区别在于:/*顶层窗口在任务栏会有自己的位置,而非顶层窗口则会共享其父组件的位置。*/#include <QDialog>#include <QMessageBox>#include <QColorDialog>#include <QFileDialog>//点击新建菜单项,弹出对话框connect(ui->actionnew,&QAction::triggered,this,[=](){// qDebug()<<"弹出对话框"<<endl;//对话框 有两种//模态对话框: 对话框开启状态不可以对其它窗口进行操作//非模态对话框:对话框开启状态是可以对其它窗口进行操作的//模态方式创建// QDialog dlg(this); // 父组件的子对话框。// dlg.resize(200,100);// dlg.exec(); //阻塞功能 应用程序级别dlg创建到栈上,没有被释放掉是因为exec()阻塞。// qDebug()<<"弹出对话框"<<endl;//非模态方式创建 ,不使用阻塞//QDialog dlg2(this); //创建到栈上,不使用阻塞的话一闪而过// dlg2->show(); //不使用阻塞的话一闪而过。show函数之后该Lambda表达式结束退出,则dlg2局部对象被销毁。对话框消失。// QDialog * dlg2 = new QDialog(this); //new出来的this对象在堆上,创建成widget的children表(this),这样只有在widget窗口关闭时才会释放!!!只有this对象析构才会被释放,这里this是整个widget窗口。如果没有这个this依赖(QDialog * dlg2 = new QDialog),则创建的对象需要手动delete才能删除(delete QDialog)。// dlg2->resize(200,100);// dlg2->show();// //设置dlg2的属性// dlg2->setAttribute(Qt::WA_DeleteOnClose); //点击对话框的关闭按钮时,释放掉该内存//设置标准对话框 QMessageBox// QMessageBox::critical(this,"错误"," critical");// QMessageBox::information(this,"信息"," info");//参数1 父亲, 2:标题 3:提示内容 4:按键类型 5:关联回车的按键// QMessageBox::question(this,"询问对话框","question",QMessageBox::Save | QMessageBox::Cancel);// if(QMessageBox::Save == QMessageBox::question(this,"询问对话框","question",QMessageBox::Save | QMessageBox::Cancel))// {// qDebug()<<"点击的是保存"<<endl;// }// else {// qDebug()<<"点击的是取消"<<endl;// }//选择颜色对话框QColor color_choose = QColorDialog::getColor(QColor(255,0,0));qDebug()<<color_choose.red()<<color_choose.blue()<<color_choose.green();//文件对话框,caption:标题 dir:路径 filter:显示哪些类型的文件(过滤功能)// QFileDialog::getOpenFileName(this,"打开文件","D:\\00_MyDate\\QT","(*.txt *.png)"); //注意.修改为双斜杠// QString path = QFileDialog::getOpenFileName(this,"打开文件","D:\\00_MyDate\\QT","(*.txt *.png)");// qDebug()<<path;QString name = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("请选择视频文件")); //fromLocal8Bit : 默认代码可能会中文出现乱码if (name.isEmpty())return; //如果没有选中文件,则name为空!string file = name.toLocal8Bit().data(); //中文转换, 非中文文件没问题。 中文则要通过toLocal8Bit转换为utf8格式。

1. 文件对话框的使用

#include <QFileDialog>#include <string>#include <QMessageBox>//例程1QString curPath=QDir::currentPath();//获取系统当前目录//获取应用程序的路径QString dlgTitle="选择一个文件"; //对话框标题QString filter="文本文件(*.txt);;图片文件(*.jpg *.gif *.png);;所有文件(*.*)"; //文件过滤器QString aFileName=QFileDialog::getOpenFileName(this,dlgTitle,curPath,filter);if (!aFileName.isEmpty())ui->plainTextEdit->appendPlainText(aFileName);}//例程2void XVideoUI::Open(){QString name = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("请选择视频文件")); //fromLocal8Bit : 默认代码可能会中文出现乱码if (name.isEmpty())return;string file = name.toLocal8Bit().data(); //中文转换, 非中文文件没问题。 中文则要通过toLocal8Bit转换为utf8格式。//QMessageBox::information(this, "", name);if (!XVideoThread::Get()->Open(file)){QMessageBox::information(this, "error", name + " open failed!");return;}Play(); //打开默认播放}//打开一号视频源文件static VideoCapture cap1;//一号视频源bool XVideoThread::Open(const std::string file){cout << "open :" << file << endl;mutex.lock();bool re = cap1.open(file);mutex.unlock();cout << re << endl;if (!re)return re;fps = cap1.get(CAP_PROP_FPS); //获取fpswidth = cap1.get(CAP_PROP_FRAME_WIDTH); //获取视频的宽、高height = cap1.get(CAP_PROP_FRAME_HEIGHT);if (fps <= 0) fps = 25; //万一没取到值。则取一个自定义值src1file = file; //打开时记录文件名double count = cap1.get(CAP_PROP_FRAME_COUNT);totalMs = (count / (double)fps) * 1000; //总帧数/fps = 秒时长, 换算为毫秒return true;}

2. 颜色对话框

QColorDialog 对话框

QColorDialog 是选择颜色对话框,选择颜色使用静态函数QColorDialog::getColor()。下面是

“选择颜色”按钮的代码,它为文本框的字体选择颜色。

void Dialog::on_btnColor_clicked(){QPalette pal=ui->plainTextEdit->palette(); //获取现有paletteQColor iniColor=pal.color(QPalette::Text); //现有的文字颜色QColor color=QColorDialog::getColor(iniColor,this,"选择颜色");if (color.isValid()) //选择有效{pal.setColor(QPalette::Text,color); //palette 设置选择的颜色ui->plainTextEdit->setPalette(pal); //设置palette}}

3. 字体对话框

QFontDialog 是选择字体对话框,选择字体使用静态函数QFontDialog::getFont()。下面是“选

择字体”按钮的代码,它为文本框选择字体,字体设置的内容包括字体名称、大小、粗体、

斜体等。

void Dialog::on_btnFont_clicked(){//选择字体QFont iniFont=ui->plainTextEdit->font(); //获取文本框的字体bool ok=false;QFont font=QFontDialog::getFont(&ok,iniFont); //选择字体if (ok) //选择有效ui->plainTextEdit->setFont(font);}

4. 标准输入对话框

QInputDialog 标准输入对话框

QInputDialog 有单行字符串输入、整数输入、浮点数输入、列表框选择输入和多行文本等多种输入方式,图3 是其中4 种界面效果。

void Dialog::on_btnInputString_clicked(){//输入字符串QString dlgTitle="输入文字对话框";QString txtLabel="请输入文件名";QString defaultInput="新建文件.txt";QLineEdit::EchoMode echoMode=QLineEdit::Normal;//正常文字输入//QLineEdit::EchoMode echoMode=QLineEdit::Password;//密码输入bool ok=false;QString text = QInputDialog::getText(this, dlgTitle,txtLabel, echoMode,defaultInput, &ok);if (ok && !text.isEmpty())ui->plainTextEdit->appendPlainText(text);}

5. 消息对话框

简单信息提示

消息对话框QMessageBox 用于显示提示、警告、错误等信息,或进行确认选择,由几个静态函数实现这些功能。其中warning()、information()、critical() 和about() 这几个函数的输入参数和使用方法相同,只是信息提示的图标有区别。

void Dialog::on_btnMsgInformation_clicked(){QString dlgTitle="information 消息框";QString strInfo="文件已经打开,字体大小已设置";QMessageBox::information(this, dlgTitle, strInfo,QMessageBox::Ok,QMessageBox::NoButton);}void Dialog::on_btnMsgWarning_clicked(){QString dlgTitle="warning 消息框";QString strInfo="文件内容已经被修改";QMessageBox::warning(this, dlgTitle, strInfo);}void Dialog::on_btnMsgCritical_clicked(){QString dlgTitle="critical 消息框";QString strInfo="有不明程序访问网络";QMessageBox::critical(this, dlgTitle, strInfo);}void Dialog::on_btnMsgAbout_clicked(){QString dlgTitle="about 消息框";QString strInfo="我开发的数据查看软件V1.0 \n 保留所有版权";QMessageBox::about(this, dlgTitle, strInfo);}

6. 自定义对话框

继承自QDialog 对话框

class QWDialogSize : public QDialog{Q_OBJECTpublic:explicit QWDialogSize(QWidget *parent = 0);~QWDialogSize();int rowCount();//获取对话框输入的行数int columnCount();//获取对话框输入的列数void setRowColumn(int row, int column); //初始对话框上两个SpinBox 的值private slots:private:Ui::QWDialogSize *ui;};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。