天天看點

QT學習——控件篇

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

           

繼續閱讀