《QMainWindow_菜单栏和工具栏》
QMainWindow:菜单栏(menu bar)、多个工具栏(tool bars)、多个铆接部件(浮动窗口dock widgets)、中心部件(central widget)、状态栏(status bar)。
菜单栏MenuBar
菜单栏只能有一个
// 创建菜单栏MenuBar,使用系统提供的方法
QMenuBar *bar = menuBar();
// 将菜单栏放入窗口中
setMenuBar(bar);
// 创建菜单Menu
QMenu *fileMenu = bar->addMenu("文件");
QMenu *editMenu = bar->addMenu("编辑");
// 创建菜单项Action
fileMenu->addAction("新建");
fileMenu->addSeparator();
fileMenu->addAction("打开");
工具栏ToolBar
工具栏可以有多个
// 创建工具栏,系统没有提供对应的方法
QToolBar *toolBar = new QToolBar(this);
// 将工具栏放入窗口中
// addToolBar(Qt::LeftToolBarArea, toolBar);
addToolBar(toolBar);
// 设置浮动属性
// toolBar->setFloatable(false);
// 设置移动属性
// toolBar->setMovable(true);
// 工具栏中可以设置内容
toolBar->addAction("新建");
toolBar->addSeparator();
toolBar->addAction("打开");
// 工具栏中添加一些控件
QPushButton *btn = new QPushButton("aaa", this);
toolBar->addWidget(btn); // QPushButton父类的父类是QWidget
《QMainWindow_状态栏、铆接部件、核心部件》
状态栏StatusBar
// z状态栏只有一个
QStatusBar *stBar = statusBar();
// 将statusBar设置到窗口中
setStatusBar(stBar);
// 放置标签控件
QLabel *label = new QLabel("提示的信息", this);
stBar->addWidget(label);
铆接部件(浮动窗口)QDockWidget
// 铆接部件 (浮动窗口)
QDockWidget *docWidget = new QDockWidget("浮动", this);
addDockWidget(Qt::BottomDockWidgetArea, docWidget); // (add可以add多个)
//设置铆接部件后期的可停靠范围
docWidget->setAllowedAreas(Qt::TopDockWidgetArea| Qt::BottomDockWidgetArea);
核心部件
//----------------------------------------
// 设置中心部件(eg:记事本)
QTextEdit *edit = new QTextEdit(this);
setCentralWidget(edit); //中心部件只能有一个,所以需要用内置的set函数(set只能set一个)
《资源文件的添加》
ui->setupUi(this);
ui->actionNew->setIcon(QIcon("/home/clf/Downloads/lufei2.jpeg"));
// 使用添加Qt的资源 ": + 前缀名 + 文件名"
// 1. 把所有的图片及资源放入源码目录下
// 2. 右击项目->添加新文件->Qt->Resoure File->资源文件取名res->确定即可生成res.qrc文件
ui->actionNew->setIcon(QIcon(":/lufei/Image/lufei1.jpeg"));
《模态和非模态对话框创建》
模态对话框exec
// 对话框 分类
// 模态对话框(不可以对其他的窗口进行操作,有阻塞功能)、非模态对话框
// 模态创建
QDialog dlg(this);
dlg.resize(200, 100); //模态对话框太小的话,会提示一些警告,所以geometry设置大一些
dlg.exec(); //模态对话框(阻塞功能)
qDebug()<<"模态对话框弹出了";
非模态对话框show
// 非模态对话框
// QDialog dlg2(this);// 非模态对话框(因为dlg2是创建在堆上的,所以会一闪而过)
QDialog * dlg2 = new QDialog(this);
dlg2->resize(200, 100);
dlg2->show();
dlg2->setAttribute(Qt::WA_DeleteOnClose); // 防止关闭非模态对话框的时候,内存没法释放的
qDebug()<<"非模态对话框弹出了";
《标准对话框之消息对话框》
PS:系统为我们提供了很多写好了的对话框,我们可以直接用。
QMessageBox的static public Members:
- critical 错误
- information 信息
- question 提问
- warning 警告
//标准对话框:错误对话框、消息对话框
// QMessageBox::critical(this, "critical","错误");
// QMessageBox::information(this,"info","信息");
// 提问对话框
QMessageBox::question(this, "ques", "提问");
// 参1:父亲 参2:标题 参3:提示内容 参4:按键类型 参5:默认关联回车按键
if(QMessageBox::Save = QMessageBox::question(this, "ques", "提问",
QMessageBox::Save|QMessageBox::Cancel, QMessageBox::Cancel)) {
qDebug()<<"选择保存";
}
else {
qDebug()<<"选择取消";
}
《标准对话框之选择文件对话框》
// 文件对话框
// 参1:父亲 参2:标题 参3:默认打开路径 参4:过滤文件格式
QString strPath= QFileDialog::getOpenFileName(this, "打开","/home/clf/", "(*).txt");
qDebug()<<strPath;
《登录窗口布局》
1. 实现登录窗口
2. 利用布局的方式,给窗口进行美化
3. 选用widget进行布局,水平布局、垂直布局、栅格布局。
4. 给用户名、密码、登录、退出按钮进行总体布局
5. 默认窗口和控件之间有9间隙像素,可调整layoutLeftMargin
6. 利用弹簧进行布局
7. 窗口widget高度太高,可以调整sizepolicy属性为Fixed,即可自适应widget内部的控件大小
《控件-按钮组》
- QPushButton 常用按钮
- QToolButton 工具按钮,用于显示图片。如果想显示文字,修改风格:toolButtonStyle。突起风格 autoRaise
- radioButton 单选按钮,设置默认 ui->setCheck(true);
- checkBox 多选按钮, 监听状态。2选中 1半选 0未选。
《QListWidget控件》
QListWidget 列表容器
- QListWidgetItem 一行内容
《QTableWidget控件》
- 栈控件stackedWidget
- 页签控件 TabWidget
- 下拉框 combox
- 单行编辑框 line Edit
- 文本编辑框 TextEdit (可编辑字体颜色,格式)
- 纯文本编辑框 PlainTextEdit(
不可编辑字体颜色,格式) - 滑动条
- 标签 Label
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
// 栈控件的使用
// 设置默认定位
ui->stackedWidget->setCurrentIndex(1);
// 按钮关联栈控件
connect(ui->btn_ScrollArea, &QPushButton::clicked, [=](){
ui->stackedWidget->setCurrentIndex(0);
});
connect(ui->btn_TabWidget, &QPushButton::clicked, [=](){
ui->stackedWidget->setCurrentIndex(1);
});
// 下拉框comBox
ui->comboBox->addItem("奔驰");
ui->comboBox->addItem("宝马");
ui->comboBox->addItem("拖拉机");
// 点击按钮,选中拖拉机选项
connect(ui->btn_select, &QPushButton::clicked, [=](){
// ui->comboBox->setCurrentIndex(2);
ui->comboBox->setCurrentText("拖拉机");
});
// 利用QLabel显示图片 在Qt中的图片资源都叫Pixmap
ui->lbl_Image->setPixmap(QPixmap(":/Image/lufei1.jpeg"));
// 利用QLabel显示动图 仅限于gif的图片
QMovie * movie = new QMovie(":/Image/maliao.gif");
// 动图需要启动播放的动作
ui->lbl_Movie->setMovie(movie);
movie->start();
}