QT学习——控件篇
QPushButton的属性
//今日领悟信号与槽:信号在发射过程中不能将函数在成员中定义,但是信号函数中的参数会自动与槽函数进行关联
//故在槽函数中可以采用lambda(匿名函数)的参数列表进行对应的参数传递,也可以自定义另外的成员槽函数,用地址进行绑定。
connect(ui->chcekbtn,&QPushButton::toggled,this,[=](bool bl){
QString str=QString(bl);
int a=5;
QString str1=QString("(%1)有").arg(a);
QString s = QString::number(bl);
QMessageBox::about(this,"按钮",str);
QMessageBox::about(this,"按钮",s);
//%数字起站位符的作用,arg重装函数进行对应的格式化字符串。bool类型的转化为0/1。
QMessageBox::about(this,"按钮",QString("%1").arg(bl));
qDebug()<<bl;
});
QPushButton与下拉菜单
QMenu *menu=new QMenu; //实例化菜单对象
QAction *acts[5];//定义一个对象指针数组
acts[0]=menu->addAction("羽毛球");//调用addAction函数为下拉项的文本赋值且返回值为QAction对象,并为信号发出者
acts[1]=menu->addAction("篮球");
acts[2]=menu->addAction("足球");
acts[3]=menu->addAction("排球");
ui->P_menubtn->setMenu(menu);//关联菜单
//用vector进行对象的存储 注:QT中为QVector,调用方式不变
QVector<QAction*> act;
for(int i=0;i<=3;i++)
{
act.push_back(acts[i]);
}
for(QVector<QAction*>::iterator it=act.begin();it!=act.end();++it)//迭代器
{
connect(*it,&QAction::triggered,this,[=](){//connect信号链接的第一个参数必须为指针类型
qDebug()<<"我爱运动!!";
});
}
//用for循环进行信号与槽的匹配
for(int i=0;i<=3;i++)
{
connect(acts[i],&QAction::triggered,this,[=](){
QMessageBox::about(this,"菜单项","我最喜欢的运动是"+QString("“%1”").arg(acts[i]->text()));//用text()函数将文本信息输出
});
}
QToolButton的样式设置
QAction *actbtn=new QAction(QIcon(":/res/plane1.png"),"你喜欢什么?");
ui->toolbtn->setDefaultAction(actbtn);//用setDefaultAction方式将QAction对象与toolbtn进行绑定
connect(ui->toolbtn,&QToolButton::triggered,this,[=](QAction *mct){//取与toolbtn绑定的QAction对象
mct->setIcon(QIcon(":/res/plane2.png"));
mct->setText("我爱你中国!!!");
ui->toolbtn->setIconSize(QSize(50,50));
});
ui->toolbtn->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);//枚举值,此枚举是在图标的后面显示文字
QToolButton设置图标的三种方式:
方式1.直接用ui->toolbtn调用setIcon();
方式2.用QAction类实例化对象,调用构造函数初始化,调用setDefaultAction()进行设置。
方式3.调用setArrowType()函数进行带箭头的图标设置。
QToolButton类型菜单弹出的三种枚举方式
/*
弹出菜单的弹出模式是一个枚举类型: QToolButton::ToolButtonPopupMode, 取值如下
- QToolButton::DelayedPopup: 延时弹出, 按压工具按钮一段时间后才能弹出, 比如:浏览器的返回按钮
长按按钮菜单弹出, 但是按钮的 clicked 信号不会被发射
- QToolButton::MenuButtonPopup: 在这种模式下,工具按钮会显示一个特殊的箭头,表示有菜单。
当按下按钮的箭头部分时,将显示菜单。按下按钮部分发射 clicked 信号
- QToolButton::InstantPopup: 当按下工具按钮时,菜单立即显示出来。
在这种模式下,按钮本身的动作不会被触发(不会发射clicked信号
*/
// 设置弹出菜单的弹出方式
void setPopupMode(QToolButton::ToolButtonPopupMode mode);
// 获取弹出菜单的弹出方式
QToolButton::ToolButtonPopupMode popupMode() const;
/*
QRadioButton——单选按钮
ui->radioButton_1->setChecked(true);//为单选按钮设置默认选项
放在不同的容器中来区分不同的组,每组只能选择一个。
QCheckBox——复选框按钮
//将根复选框的与子框进行调控
connect(ui->computer,&QCheckBox::clicked,this,[=](bool bl){
if(bl==true)
{
ui->c_btn->setChecked(true);
ui->PHP_btn->setChecked(true);
ui->java_btn->setChecked(true);
}
else
{
ui->c_btn->setChecked(false);
ui->PHP_btn->setChecked(false);
ui->java_btn->setChecked(false);
}
});
ui->computer->setTristate(true);//将复选框的三态属性设置为true(缺省值即为true)
connect(ui->PHP_btn,&QCheckBox::stateChanged,this,&Mywidget::changed);//将每一个按钮的的信号添加相同的槽,执行相同的操作
connect(ui->c_btn,&QCheckBox::stateChanged,this,&Mywidget::changed);
connect(ui->java_btn,&QCheckBox::stateChanged,this,&Mywidget::changed);
槽函数:
void Mywidget::changed(int cha)
{
if(cha==Qt::Checked)
{
b_number++;//用计数器的方式来进行判断
}
else {
b_number--;
}
if(b_number==3)
{
ui->computer->setCheckState(Qt::Checked);//三种枚举值,全选
}
else if(b_number==0)
{
ui->computer->setCheckState(Qt::Unchecked);//全不选
}
else {
ui->computer->setCheckState(Qt::PartiallyChecked);//半选
}
}