02. 基本控件-上
基本控件-上
一、setupUi
- setupUi的作用:setupUi下面的作用的是用来初始化窗口上面的控件(是在设计里面拖过去的控件才有,如果是自己 写的那么是不会有的),可以理解为在设计下拖的控件,那么要经过执行setupUi之后才会被创建,所以 拖过去的控件使用就必须要在setupUi之后,不能在之前
- setupUi的其他的好处:在setupUi下面可以看到控件的定义,初始化,等等信息(通过设计设计好的属性,基本都会在这个里面看到调用的什么成员来初始化的),我们可以在setupUi的定义里看到控件是如何被定义的
- ui:这个ui可以理解为ui界面,在这个ui界面上的控件是通过ui->控件对象名字来使用的 (自己的写的就不归它管)
二、button控件(按钮控件)
-
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")); //可以在按钮左边设置一个小图片
-
toolButton控件
- 菜单按钮,点击后有弹框
-
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())
判断是否被选中
-
-
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())
判断控件是否被勾选
-
-
commandlinkbutton控件
- 和pushbutton类似,只不过这个的显示是以图标+文件显示的
- 可以在属性里更改图标和图标大小
- 其余操作和pushbutton基本一致
-
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 输入控件
-
comboxbox:
-
下拉列表,由按钮和弹出列表组成
-
双击这个控件,可以直接往里面加内容,一行一个
-
insertItem(2,"bb");//在第二个位置添加一个字符串
可以用这种方式添加一行
-
-
FontComboBox
- 让用户选择一个字体的部件
-
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() //只要选择改变这个信号就会被发射
-
-
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);
-
-
spinbox+doublespinbox
- 这两个都是派生自QAbstractSpinBox的,分别是整数调节按钮和浮点数调节按钮,功能基本是一样的, 只是精度不一样
- 可在属性中修改对应属性
- frame:是否有框
- readOnly:是否只读
- accelerated:调节时非法加(按住上下会让数字指数增长)
- suffix:后缀
- prefix:前缀
- minimum:最小值(单精度)
- maximum:最大值(单精度)
- singleStep:步长(小数点后多少位),例如填0.01就是小数点后两位(单精度)
- decimals:精度,例如填2就是小数点后两位,和单精度的有区别(双精度)
-
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()); }
-
-
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();//获取值
-