QT_QDialog 对话框

QT_对话框
建议参考

  1. 模态对话框,就是会阻塞同一应用程序中其它窗口的输入。
    模态对话框很常见,比如“打开文件”功能。你可以尝试一下记事本的打开文件,当打开文件对话框出现时,我们是不能对除此对话框之外的窗口部分进行操作的。
  1. 非模态对话框,例如查找对话框,我们可以在显示着查找对话框的同时,继续对记事本的内容进行编辑。

对话框分类

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

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

自定义对话框
Qt 支持模态对话框和非模态对话框。
模态与非模态的实现:

  1. 使用QDialog::exec()实现应用程序级别的模态对话框
    
  2. 使用QDialog::open()实现窗口级别的模态对话框
    
  3. 使用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>
//例程1
QString 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);
}

//例程2
void 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); //获取fps
	width = 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(); //获取现有palette
	QColor 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_OBJECT
	public:
	explicit QWDialogSize(QWidget *parent = 0);
	~QWDialogSize();
	int rowCount();//获取对话框输入的行数
	int columnCount();//获取对话框输入的列数
	void setRowColumn(int row, int column); //初始对话框上两个SpinBox 的值
	private slots:
	private:
	Ui::QWDialogSize *ui;
};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值