alin的学习之路(Qt篇:二)(QMainWindow,资源文件导入,QDaialog,ui界面,常见按钮)

alin的学习之路(Qt篇:二)(QMainWindow,资源文件导入,QDaialog,ui界面,常见按钮)

1.QMainWindow

  1. QMainWindow包括:菜单栏,工具栏,状态栏,铆接部件(浮动窗口),中心部件

    1. 菜单栏:

      • 菜单栏只有一个
      • 从大到小:菜单栏->菜单->菜单项(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. 工具栏:工具栏可以添加菜单项

      //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);
      
    3. 状态栏:状态栏中可添加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. 铆接部件

      //4.添加铆接部件 可以有多个
      QDockWidget* dock = new QDockWidget("浮动窗口",this);
      //位置是相对中心部件而言的位置
      this->addDockWidget(Qt::BottomDockWidgetArea,dock);
      //设置允许停靠的位置
      dock->setAllowedAreas(Qt::BottomDockWidgetArea | Qt::TopDockWidgetArea);
      
    5. 中心部件

      //5.添加中心部件  只有一个
      QTextEdit* edit = new QTextEdit(this);
      this->setCentralWidget(edit);
      

2.资源文件的导入

步骤:

  1. 将资源文件复制到项目目录下
  2. 在项目中添加文件,选择Qt->Qt Resource File,命名后产生资源文件,例如:res.qrc
  3. 编辑res.qrc,添加前缀,再添加文件,添加文件时选择需要添加的资源
  4. 点击编译

调用::前缀名/文件名

3.常用的对话框QDialog

  1. 对话框的分类:

    1. 模态对话框:阻塞,只能操作该窗口

      //1.模态  阻塞,只能操作该对话框
      QDialog dlg(this);
      dlg.resize(160,30);
      dlg.exec();   //进入消息队列,阻塞
      
    2. 非模态对话框:非阻塞,可以操作其他窗口

      • 注意:显示对话框并不会阻塞,所以创建的对话框对象不能创建在栈上,要创建在堆上
      • 注意:创建在堆上且自动释放要在整个程序结束后才会发生,所以要管理堆上的数据,要让它关闭后就是释放,设置55号属性以解决此问题
      //2.非模态 可以操作其他窗口
      QDialog *dlg = new QDialog(this);
      dlg->resize(160,30);
      dlg->show();
      //创建在堆上且自动释放要在整个程序结束后才会发生,所以要管理堆上的数据,要让它关闭后就是释放
      dlg->setAttribute(Qt::WA_DeleteOnClose);    //55号属性,指的是关闭后就释放数据
      
  2. 常用消息对话框

    1. 错误对话框

      QMessageBox::critical(this,"critical","错误");
      
    2. 警告对话框

      QMessageBox::warning(this,"warning","警告");
      
    3. 提示对话框

      QMessageBox::information(this,"info","信息提示");
      
    4. 询问对话框

      参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";
      
    5. 颜色对话框

      //默认是选择白色,可更改参数选择不同的颜色
      QColor(255,0,0) //三个参数是红色,绿色,蓝色的比例
      QColor color = QColorDialog::getColor(QColor(255,0,0));
      qDebug() << color.red() << color.green() << color.blue();
      
    6. 字体对话框

      bool ok;
      QFont("华文彩云",15)   参1:字体   参2:字号
      QFont font = QFontDialog::getFont(&ok,QFont("华文彩云",15));
      qDebug() << font.family() << font.pointSize() << font.bold() << font.italic();
      
    7. 文件对话框

      //用于打开文件
      //可指定默认打开的路径和过滤显示的文件
      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界面的使用及布局调整

  1. 使用Widget进行布局的调整,可以调整一些水平和垂直的方向
  2. 使用弹簧进行布局的水平和垂直的修改

5. 常用按钮

  1. QPushButton和ToolButton:常见的按钮,按下可以发出信号,可以添加图片

  2. 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;
      });
      
  3. 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;
      });
      
  4. 设置一个提交按钮来输出选择的内容

    //提交按钮获取用户的选择
    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();
            }
        }
    });
    

猜你喜欢

转载自blog.csdn.net/qq_41775886/article/details/107128625