1,触发对话框
在qt中,对话框分成两种
一种是模态对话框,简单的说,就是点开后无法忽视它,必须要关闭才能操作其他窗口
【如果强制操作会发出duang的声音】
另一种是非模态对话框,跟上面那个相反,是一个无所谓的对话框。
具体的话……
先在ui里创建两个触发
一个叫new,一个叫open
用new触发模态对话框的生成,代码如下
connect(ui->actionnew,&QAction::triggered,[=](){
//对话框分类
//模态对话框(不可以对其他对话框操作),非模态(可以)
//模态创建 阻塞
QDialog dlg(this);
dlg.resize(200,100);
dlg.exec();
qDebug() << "success";
});
需要说明几点
1,运用了信号槽和匿名函数
2,触发点击使用的是triggered,因为没有click
3,不写=会报错
4,生成模态对话框需要使用exec,这是一种阻塞函数——换言之,函数运行到这里就停住了,所以在关闭窗口后控制台才会出现“success”
5,修改大小是因为默认的对话框太小,不改会弹警告
用open触发非模态的对话框,代码如下
connect(ui->actionopen,&QAction::triggered,[=]()
{
//非模态对话框
QDialog *dlg2 = new QDialog(this);
dlg2->resize(200,100);
dlg2->show();
dlg2->setAttribute(Qt::WA_DeleteOnClose);
qDebug() << "success2";
});
需要说明的几点:
1,要用new申请堆上的内存,不然,函数结束后栈内存回收,会出现窗口闪一下就消失的鬼片效果……
2,但是,堆上内存不会被自动回收,所以我们要设置一个状态参量,设定它关闭窗口时回收
【attribute这里翻译成状态,后面的枚举值是去帮助里面查的】
2,标准对话框
所谓标准对话框,是Qt内置的一系列对话框,用于简化开发
总所周知,qt是面向帮助文档编程的
所以……
先搜个文档康康。
在文件里添加头文件,然后实现一下试试
这个可以直接调用静态函数,所以举一个做例子
connect(ui->actionnew,&QAction::triggered,[=](){
//QMessageBox::critical(this,"first","错误");
//QMessageBox::information(this,"second","信息");
if(QMessageBox::question(this,"third","是否要这样?",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel) == QMessageBox::Save)
qDebug() << "save";
});
根据编译器的提示和上面的帮助文档,我们可以知道这个函数的几个参数含义
比如question 从左到右为父类,名称,文本框内容,下面选择摁钮的文本和默认摁钮
其他函数类似
返回值是两个选择摁钮的枚举值
3,其他常见对话框
①颜色对话框
这个对话框还蛮有意思的
顺便一提,在qt中,颜色有三个参数,分别是red(),green()和blue()
而且这个对话框有自己的头文件
#include <QColorDialog>
connect(ui->actionnew,&QAction::triggered,[=]()
{
QColor color =QColorDialog::getColor(QColor(255,0,0));
qDebug() << color.red();
});
然后就会弹出这样一个对话框
【看见了吗?输入的255,0,0是初始值哦】
用这个对话框可以选定颜色
②选中文件对话框
同样需要头文件
#include <QFileDialog>
connect(ui->actionnew,&QAction::triggered,[=]()
{
//文件对话框
QFileDialog::getOpenFileName(this,"open","C:\\Users\\井室羽\\Desktop","*.doc");
});
三个参数,父类,文件路径和筛选条件(可不加)
返回值是QString,即选中的文件路径
③字体对话框
跟颜色对话框比较类似,顺便一提字体的英文是FONT
#include <QFontDialog>
//字体对话框
bool flag;
QFont font = QFontDialog::getFont(&flag,QFont("华文彩云",36));
qDebug() << font.family().toUtf8().data();
QFont就是字体的类,里面有family(字体),pointSize(大小),bold(是否加粗),italic(是否倾斜)都可以打印出来
另:打印字体需要转一下格式,这个跟之前一样。