Qt桌面应用开发 第四天(对话框 界面布局)
目录
1.对话框
1.1模拟对话框
1.2非模拟对话框
1.3消息对话框
1.3.1询问对话框
1.3.2严重错误对话框
1.3.3信息提示对话框
1.3.4警告对话框
1.4其他对话框
1.4.1颜色对话框
1.4.2文件对话框
1.4.3字体对话框
1.5界面布局
1.对话框
1.1模拟对话框
会阻塞同一应用程序中其他窗口的输入。
创建流程:
- 利用QDialog类创建对话框对象
- 调用对象的exec()成员函数
//举例:模拟对话框
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->actionnew,&QAction::triggered,
[=](){
QDialog l(this);
l.setWindowTitle("模拟对话框");
l.resize(100,80);
l.exec(); //会弹出模拟对话框
}
);
}
运行效果:
1.2非模拟对话框
打开非模拟对话框时,可以操作其他窗口。
创建流程:
- 利用QDialog类创建对话框对象
- 调用对象的show()成员函数
connect(ui->actionnew,&QAction::triggered,
[=](){
QDialog* l=new QDialog(this);
l->setWindowTitle("非模拟对话框");
l->resize(100,80);
l->show();
//关闭非模拟对话框时,将对话框对象释放
l->setAttribute(Qt::WA_DeleteOnClose);
}
);
运行效果:
在上述案例中,对话框创建在堆区,没有释放窗口对象,可以设置属性,在关闭非模拟对话框时,将对话框对象释放;若非模拟对话框创建在栈区,对话框会马上释放
l->setAttribute(Qt::WA_DeleteOnClose);//55号属性
1.3消息对话框
Qt内置标准对话框:
QMessageBox用于显示消息提示,一般会使用的静态成员函数如下:
1.3.1询问对话框
connect(ui->actionnew,&QAction::triggered,
[=](){
if(QMessageBox::Save==QMessageBox::question(this,"询问对话框","是否保存",
QMessageBox::Save|QMessageBox::Cancel,
QMessageBox::Cancel))
{
qDebug()<<"选择保存";
}
else
{
qDebug()<<"选择取消";
}
}
);
运行效果:
1.3.2严重错误对话框
connect(ui->actionnew,&QAction::triggered,
[=](){
QMessageBox::critical(this,"严重错误对话框","出错了");
}
);
运行效果:
1.3.3信息提示对话框
connect(ui->actionnew,&QAction::triggered,
[=](){
QMessageBox::information(this,"信息提示对话框","小贴士提醒您");
}
);
运行效果:
1.3.4警告对话框
connect(ui->actionnew,&QAction::triggered,
[=](){
QMessageBox::warning(this,"警告对话框","注意前方道路");
}
);
运行效果:
1.4其他对话框
1.4.1颜色对话框
QColorDialog::getColor()创建颜色对话框。
connect(ui->actionnew,&QAction::triggered,
[=](){
QColor color=QColorDialog::getColor();
qDebug()<<color.red()<<color.green()<<color.blue();
}
);
运行效果:
1.4.2文件对话框
QFileDialog::getOpenFileName创建文件对话框。
connect(ui->actionnew,&QAction::triggered,
[=](){
//参数:父类窗口,窗口标题,默认的文件路径
QString filePath=QFileDialog::getOpenFileName(this,"文件对话框","E:/a");
qDebug()<<filePath;
}
);
运行效果:
1.4.3字体对话框
connect(ui->actionnew,&QAction::triggered,
[=](){
bool ok;
QFont font=QFontDialog::getFont(&ok);
qDebug()<<"字体"<<font.family()
<<"字号"<<font.pointSize()
<<"加粗"<<font.bold()
<<"倾斜"<<font.italic()
<<"ok"<<ok;
}
);
运行效果:
1.5界面布局
水平布局/垂直布局:
水平弹簧控件/垂直弹簧控件:
页面widget的sizePolicy中的垂直策略fixed,会让窗口高度和控件高度贴合:
运行效果: