02. 基本控件-上

基本控件-上

一、setupUi

  1. setupUi的作用:setupUi下面的作用的是用来初始化窗口上面的控件(是在设计里面拖过去的控件才有,如果是自己 写的那么是不会有的),可以理解为在设计下拖的控件,那么要经过执行setupUi之后才会被创建,所以 拖过去的控件使用就必须要在setupUi之后,不能在之前
  2. setupUi的其他的好处:在setupUi下面可以看到控件的定义,初始化,等等信息(通过设计设计好的属性,基本都会在这个里面看到调用的什么成员来初始化的),我们可以在setupUi的定义里看到控件是如何被定义的
  3. ui:这个ui可以理解为ui界面,在这个ui界面上的控件是通过ui->控件对象名字来使用的 (自己的写的就不归它管)

二、button控件(按钮控件)

  1. pushbutton:

    • button通过setText设置文字
    /*在类中定义一个bool isDown;构造中初始化为false,拖入一个button,直接修改名字为连接设
    备,转到槽写上如下代码,那么就能实现,点击按钮时断开和连接设备了*/
    if(!isDown)
    {
        isDown=true;
        ui->pushButton->setText("断开连接");
    }
    else
    {
        isDown=false;
        ui->pushButton->setText("连接设备");
    }
    
    • button通过样式表,把按钮换成一个图片的形状

      右键这个按钮,选择改变样式表,添加资源-->broder-image,选择你的图片,然后点OK,那么这个按钮就变成了一个图片的样子,就如下 button,看起来是个图片但实际是一个按钮,只不过是一个图片形状的按钮

    • button通过setIcon设置按钮上有一个小图片

      在构造函数中

      ui->pushButton_3-
      >setIcon(QIcon(":/image/C:/Users/yxd/Desktop/image/ico/class02.ico"));
      //可以在按钮左边设置一个小图片
      
  2. toolButton控件

    • 菜单按钮,点击后有弹框
  3. radiobutton控件

    • 单选控件,多个此控件可新建按钮组,分组后每组内只有一个可被选中

    • 和checkbox控件区别:不新建按钮组时,所有radiobutton里只能有一个被选中,新建组后,每组中只能有一个被选中,但不同组内可以有其他radiobutton被勾选;不新建按钮组时,所有checkbox均可被选中,但新建组后,每组中只能有一个被选中,未被分组的依旧可以被多选

    • //每个按钮添加clicked槽
      void Widget::on_radioButton_hunan_clicked(bool checked)
      {
          if(checked)
          ui->radioButton_hunan->setChecked(true);//设置为选中
      }
      void Widget::on_radioButton_guizhou_clicked(bool checked)
      {
          if(checked)
          ui->radioButton_guizhou->setChecked(true);//设置为选中
      }
      void Widget::on_radioButton_huibei_clicked(bool checked)
      {
          if(checked)
          ui->radioButton_huibei->setChecked(true);//设置为选中
      }
      void Widget::on_radioButton_changsha_clicked(bool checked)
      {
          if(checked)
          ui->radioButton_changsha->setChecked(true);//设置为选中
      }
      void Widget::on_radioButton_guiyang_clicked(bool checked)
      {
          if(checked)
          ui->radioButton_guiyang->setChecked(true);//设置为选中
      }
      void Widget::on_radioButton_wuhan_clicked(bool checked)
      {
          if(checked)
          ui->radioButton_wuhan->setChecked(true);//设置为选中
      }
      
    • 可以用 if(ui->radioButton_hunan->isChecked()) 判断是否被选中

  4. checkbox控件

    • 多选控件

    • 和radiobutton控件区别:不新建按钮组时,所有radiobutton里只能有一个被选中,新建组后,每组中只能有一个被选中,但不同组内可以有其他radiobutton被勾选;不新建按钮组时,所有checkbox均可被选中,但新建组后,每组中只能有一个被选中,未被分组的依旧可以被多选

    • 为每个按钮生成事件clicked(bool)

      void Widget::on_checkBox_xieBUG_clicked(bool checked)
      {
          if(checked)
          ui->checkBox_xieBUG->setChecked(true);//设置为选中
      }
      void Widget::on_checkBox_gaiBUG_clicked(bool checked)
      {
          if(checked)
          ui->checkBox_gaiBUG->setChecked(true);//设置为选中
      }
      void Widget::on_checkBox_shengcheng_clicked(bool checked)
      {
          if(checked)
          ui->checkBox_shengcheng->setChecked(true);//设置为选中
      }
      void Widget::on_checkBox_zhixing_clicked(bool checked)
      {
          if(checked)
          ui->checkBox_zhixing->setChecked(true);//设置为选中
      }
      void Widget::on_checkBox_chenggong_clicked(bool checked)
      {
          if(checked)
          ui->checkBox_chenggong->setChecked(true);//设置为选中
      }
      void Widget::on_checkBox_zhaoBUG_clicked(bool checked)
      {
          if(checked)
          ui->checkBox_zhaoBUG->setChecked(true);//设置为选中
      }
      
    • 可以使用 if(ui->checkBox_xieBUG->isChecked()) 判断控件是否被勾选

  5. commandlinkbutton控件

    • 和pushbutton类似,只不过这个的显示是以图标+文件显示的
    • 可以在属性里更改图标和图标大小
    • 其余操作和pushbutton基本一致
  6. Dialog button box控件

    • 一个按钮组,选择可以自己再属性的位子选择

    • 添加clicked(QAbstractButton *)

      void Widget::on_buttonBox_clicked(QAbstractButton *button)
      {
          if(ui->buttonBox->button(QDialogButtonBox::Ok)==button)
          {
              QMessageBox::information(this,"你的选择","OK",QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
          }
      }
      

三、InputWidgets 输入控件

  1. comboxbox:

    • 下拉列表,由按钮和弹出列表组成

    • 双击这个控件,可以直接往里面加内容,一行一个

    • insertItem(2,"bb");//在第二个位置添加一个字符串 可以用这种方式添加一行

  2. FontComboBox

    • 让用户选择一个字体的部件
  3. lineEdit

    • 单行文本输入框,有丰富的输入操作

    • 密码输入框,修改属性echomode 为Password

    • ip地址输入框,修改属性inputMask,text-maxLength

    • 对齐格式输入,修改属性alignment

    • 提示文本输入,修改属性placeholderText

    • 是否只读,只读就勾上readOnly

    • 带清除按钮的,修改属性clearButtonEnabled

    • 带图片的输入框,先把图片加载一下,图片类型为ico,在构造函数中

          ui->lineEdit_7->setPlaceholderText("这是个带ico的");
          QAction *paction=new QAction(this);
          paction->setIcon(QIcon(":/image/class02.ico"));
          ui->lineEdit_7->addAction(paction,QLineEdit::LeadingPosition);
      
          QString str;
          str=ui->lineEdit->text();//获取单行edit中的内容 字符串
          QMessageBox::information(this,"你选择
      了",str,QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
      //如果是输入的内容是数字那么 str.toInt(),就能得到数字
      
      textChanged()//文本发生改变
      textEdited() //文本编辑信号
      cursorPositionChanged()//光标发生改变
      returnPressed() //回车键或return按键按下信号
      editingFinished()//回车键或
      return//按键按下信号或者焦点丢失信号
      selectionChanged() //只要选择改变这个信号就会被发射
      
  4. text edit 和plain text edit

    • text edit是多行edit,可以有超链接之类的

    • plain text edit是多行纯文本,只能有文字

    • 获取里面的内容

      QString str;
      str=ui->textEdit->toPlainText();//获取多行edit中的内容
      QMessageBox::information(this,"你选择了",str,QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
      
      QString str;
      str=ui->plainTextEdit->toPlainText();//获取纯文本中的内容
      QMessageBox::information(this,"你选择了",str,QMessageBox::Yes|QMessageBox::No,QMessageBox::Yes);
      
  5. spinbox+doublespinbox

    • 这两个都是派生自QAbstractSpinBox的,分别是整数调节按钮和浮点数调节按钮,功能基本是一样的, 只是精度不一样
    • 可在属性中修改对应属性
      • frame:是否有框
      • readOnly:是否只读
      • accelerated:调节时非法加(按住上下会让数字指数增长)
      • suffix:后缀
      • prefix:前缀
      • minimum:最小值(单精度)
      • maximum:最大值(单精度)
      • singleStep:步长(小数点后多少位),例如填0.01就是小数点后两位(单精度)
      • decimals:精度,例如填2就是小数点后两位,和单精度的有区别(双精度)
  6. TimeEdit + DateEdit + TimeDateEdit

    • 用来显示时间的

    • yyyy:MM:dd:HH:mm:ss 表示 xxxx年:xx月xx日:xx时xx 分:xx秒

    • 可以在属性中修改displayFormat,更改时间显示样式,例如把冒号改成别的符号或者少显示几个时间

    • 获取时间的方式:(以下例子实现的是TimeEdit,其他两个和这个一样)

      //包含头文件:
      #include <QTime>
      #include <QTimer>
      QTimer qtimer; //这个是计时器
      QTime time=QTime::currentTime();//获取时间 时分秒
      ui->timeEdit->setTime(time);
      QDate time2=QDate::currentDate();//获取时间 年月日
      ui->timeEdit->setDate(time2);
      
      
          //定义槽函数用来自动设置时间 
          void timeoutslot();
          qtimer.start(1);//时间间隔为1ms
          //关联信号和槽,是计时器发的信号,信号为QTimer::timeout
          connect(&qtimer, &QTimer::timeout,this, &Widget::timeoutslot);
      
      
      
      //槽实现
      void Widget::timeoutslot()
      {
          ui->timeEdit->setTime(QTime::currentTime());
          ui->dateEdit->setDate(QDate::currentDate());
      }
      
  7. dial

    • 一个圆型的范围控制,比如速度计电位计等

    • 属性:

      • minimum:最小值
      • maximum:最大值
      • singleStep:按上下键增加和减少的值
      • wrapping:最大最小是否重合
      • notchesVisible:是否有刻度
    • valueChanged(int)信号,表示这个被修改了,可以直接获取到控件的值

      void Widget::on_dial_valueChanged(int value)
      {
          ui->label->setNum(value);
      }
      

      代码设置它的值,获取它的值

      ui->dial->setValue(66);//设置值
      ui->dial->value();//获取值
      
posted @ 2022-07-28 18:11  Quirkygbl  阅读(79)  评论(0编辑  收藏  举报