alin的学习之路(Qt篇:二)(QMainWindow,资源文件导入,QDaialog,ui界面,常见按钮)
1.QMainWindow
-
QMainWindow包括:菜单栏,工具栏,状态栏,铆接部件(浮动窗口),中心部件
-
菜单栏:
- 菜单栏只有一个
- 从大到小:菜单栏->菜单->菜单项(QMenuBar->QMenu->QAction)
- 菜单项的扩展是一个菜单
//1.创建菜单栏(仅有一个) QMenuBar *bar = menuBar(); //添加到界面中,没有内容时不会显示 setMenuBar(bar); //给菜单添加内容 QMenu* fileMenu = bar->addMenu("文件"); QMenu* editMenu = bar->addMenu("编辑"); //添加菜单项Action QAction* newAction = fileMenu->addAction("新建"); fileMenu->addSeparator(); //添加分割线 QAction* openAction = fileMenu->addAction("打开"); //菜单项再添加扩展内容,需要添加一个QMenu QMenu * newMenu = new QMenu(this); QAction* smallAction1 = newMenu->addAction("子菜单项1"); newMenu->addSeparator(); //添加分割线 QAction* smallAction2 = newMenu->addAction("子菜单项2"); //将子菜单设置进菜单项中 newAction->setMenu(newMenu);
-
工具栏:工具栏可以添加菜单项
//2.创建工具栏 QToolBar *toolBar = new QToolBar(this); //添加工具栏到窗口中,可以设置初始位置 addToolBar(Qt::LeftToolBarArea,toolBar); //设置允许停靠侧 toolBar->setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea); //设置浮动(默认true) toolBar->setFloatable(false); //设置移动(默认true) toolBar->setMovable(false); //添加菜单项 toolBar->addAction(newAction); toolBar->addSeparator(); toolBar->addAction(openAction);
-
状态栏:状态栏中可添加QLabel
//3.添加状态栏 只有一个 QStatusBar *sbar = statusBar(); //在状态栏中添加QLabel,上面显示文字 QLabel *label1 = new QLabel("左侧信息",this); //从左面按顺序添加 sbar->addWidget(label1); QLabel *label2 = new QLabel("右侧信息",this); //从右面按顺序添加 sbar->addPermanentWidget(label2); //在指定位置插入一个QLabel QLabel *label3 = new QLabel("左侧信息2",this); sbar->insertWidget(0,label3);
-
铆接部件
//4.添加铆接部件 可以有多个 QDockWidget* dock = new QDockWidget("浮动窗口",this); //位置是相对中心部件而言的位置 this->addDockWidget(Qt::BottomDockWidgetArea,dock); //设置允许停靠的位置 dock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
-
中心部件
//5.添加中心部件 只有一个 QTextEdit* edit = new QTextEdit(this); this->setCentralWidget(edit);
-
2.资源文件的导入
步骤:
- 将资源文件复制到项目目录下
- 在项目中添加文件,选择Qt->Qt Resource File,命名后产生资源文件,例如:res.qrc
- 编辑res.qrc,添加前缀,再添加文件,添加文件时选择需要添加的资源
- 点击编译
调用::前缀名/文件名
3.常用的对话框QDialog
-
对话框的分类:
-
模态对话框:阻塞,只能操作该窗口
//1.模态 阻塞,只能操作该对话框 QDialog dlg(this); dlg.resize(160,30); dlg.exec(); //进入消息队列,阻塞
-
非模态对话框:非阻塞,可以操作其他窗口
- 注意:显示对话框并不会阻塞,所以创建的对话框对象不能创建在栈上,要创建在堆上
- 注意:创建在堆上且自动释放要在整个程序结束后才会发生,所以要管理堆上的数据,要让它关闭后就是释放,设置55号属性以解决此问题
//2.非模态 可以操作其他窗口 QDialog *dlg = new QDialog(this); dlg->resize(160,30); dlg->show(); //创建在堆上且自动释放要在整个程序结束后才会发生,所以要管理堆上的数据,要让它关闭后就是释放 dlg->setAttribute(Qt::WA_DeleteOnClose); //55号属性,指的是关闭后就释放数据
-
-
常用消息对话框
-
错误对话框
QMessageBox::critical(this,"critical","错误");
-
警告对话框
QMessageBox::warning(this,"warning","警告");
-
提示对话框
QMessageBox::information(this,"info","信息提示");
-
询问对话框
参1:父窗口 参2:标题 参3:中间显示内容 参4:按钮样式 参5:默认激活按钮 if(QMessageBox::Cancel == QMessageBox::question(this,"ask","do you want to save?",QMessageBox::Save | QMessageBox::Cancel,QMessageBox::Cancel)) qDebug() << "user choose cancel"; else qDebug() << "user choose save";
-
颜色对话框
//默认是选择白色,可更改参数选择不同的颜色 QColor(255,0,0) //三个参数是红色,绿色,蓝色的比例 QColor color = QColorDialog::getColor(QColor(255,0,0)); qDebug() << color.red() << color.green() << color.blue();
-
字体对话框
bool ok; QFont("华文彩云",15) 参1:字体 参2:字号 QFont font = QFontDialog::getFont(&ok,QFont("华文彩云",15)); qDebug() << font.family() << font.pointSize() << font.bold() << font.italic();
-
文件对话框
//用于打开文件 //可指定默认打开的路径和过滤显示的文件 QString str = QFileDialog::getOpenFileName(this,"选择文件","C:\\Users\\wwww\\Desktop","(*.docx *.pdf)"); qDebug() << str; //用于保存文件 QString str = QFileDialog::getSaveFileName(this,"选择文件","C:\\Users\\wwww\\Desktop","(*.docx *.pdf)"); qDebug() << str;
-
4. ui界面的使用及布局调整
- 使用Widget进行布局的调整,可以调整一些水平和垂直的方向
- 使用弹簧进行布局的水平和垂直的修改
5. 常用按钮
-
QPushButton和ToolButton:常见的按钮,按下可以发出信号,可以添加图片
-
radioPushButton:单选按钮
-
在同一作用域下只能选择一个,可以使用GroupBox将单选按钮包起来
-
可以设置默认选择
-
可以获取到选择的值
ui->rBtn_man->setChecked(true); //设置默认选择 this->sex = true; //点击男设置sex为true connect(ui->rBtn_man,&QRadioButton::clicked,[=](){ this->sex = true; }); //点击女设置sex为false connect(ui->rBtn_woman,&QRadioButton::clicked,[=](){ this->sex = false; });
-
-
checkBox:复选按钮
-
可以选择多个
-
有三种状态,state代表它的状态:0表示未选,1表示半选,2表示全选
-
它的状态用它独有的信号来获取:QCheckBox::stateChanged
//捕获checkBox的选择 connect(ui->checkBox,&QCheckBox::stateChanged,[&](int state){ qDebug() << state; checkBox_state[0] = state; }); connect(ui->checkBox_2,&QCheckBox::stateChanged,[&](int state){ qDebug() << state; checkBox_state[1] = state; }); connect(ui->checkBox_3,&QCheckBox::stateChanged,[&](int state){ qDebug() << state; checkBox_state[2] = state; }); connect(ui->checkBox_4,&QCheckBox::stateChanged,[&](int state){ qDebug() << state; checkBox_state[3] = state; });
-
-
设置一个提交按钮来输出选择的内容
//提交按钮获取用户的选择 connect(ui->btn_submit,&QPushButton::clicked,[=](){ if(this->sex) { qDebug() << "性别:选择男"; } else { qDebug() << "性别:选择女"; } qDebug() << "调查问卷的选择是:"; for(int i=0 ;i<4 ;++i) { if(checkBox_state[i] > 0) { qDebug() << sentence[i].toUtf8().data(); } } });