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);//半選
}
}