信號與槽(SIGNAL-SLOT)

一、系統(tǒng)設(shè)置槽-信號

  • 在QtCreator中建立槽信號事件

槽的建立(添加Button)

注意:我們的文件ui_zbtx.h是編譯環(huán)境(VS及其插件QtCreator)產(chǎn)生的描述程序(類似QtCreator(Xcode)自動布局產(chǎn)生控件)

  • 設(shè)置槽事件
//.h
public slots:
   void on_btn_addpara_click();
   void on_btn_delpara_click();
   void on_btn_save_clicked();

  • 設(shè)置信號事件
//.cpp
void zbtx::on_btn_addpara_click()
{
    ParaSetting dlg;
    if (dlg.exec() == QDialog::Accepted)
    {
        int row = ui.tbl_paras->rowCount();
        ui.tbl_paras->insertRow(row);
        QTableWidgetItem* it = new QTableWidgetItem;
        //it->setText(dlg.name);
        it->setText(dlg.sign);
        ui.tbl_paras->setItem(row, 0, it);
        it = new QTableWidgetItem;
        //it->setText(dlg.typ == 1 ? tr("data") : tr("sub indicator"));
        it->setText(dlg.typ == 1 ?QStringLiteral("數(shù)據(jù)") : QStringLiteral("子指標(biāo)"));
        it->setData(Qt::UserRole, dlg.typ);
        ui.tbl_paras->setItem(row, 1, it);
        it = new QTableWidgetItem;
        it->setText(dlg.ch);
        ui.tbl_paras->setItem(row, 2, it);
        /*it = new QTableWidgetItem;
        it->setText(QString::number(dlg.id));
        ui.tbl_paras->setItem(row, 3, it);*/
    }

}
void zbtx::on_btn_delpara_clicked(){
    ui.tbl_paras->removeRow(ui.tbl_paras->currentRow());

}
槽信號事件

二、自定義槽信號事件

  • 設(shè)置對應(yīng)的槽信號事件


    on_tree_zhibiao_customContextMenuRequested
on_tree_zhibiao_currentItemChanged
  • 設(shè)置槽事件
//.h
public slots:
   void on_tree_zhibiao_currentItemChanged(QTreeWidgetItem * current, QTreeWidgetItem * previous);//修改Tree Item 
   void on_btn_modify_zb_clicked();//應(yīng)用
   void on_tree_zhibiao_customContextMenuRequested(const QPoint & pos);//tree Item 右選擇鍵 操作
  • 設(shè)置信號事件
//.cpp
void zbtx::on_tree_zhibiao_customContextMenuRequested(const QPoint & pos)
{

    QTreeWidgetItem * current = ui.tree_zhibiao->currentItem();
    if (!current)
        return;
    int ntyp = current->data(0, Qt::UserRole).toInt();

    QMenu menu;
        if (ntyp == 0)//
    {
         //建立槽SLOT(add_zb_sub_level())  【兩次槽-信號的建立】
        menu.addAction(QStringLiteral("添加子指標(biāo)"), this, SLOT(add_zb_sub_level()));//添加子指標(biāo)
        menu.addAction(QStringLiteral("刪除指標(biāo)"), this, SLOT(delete_zb()));//刪除指標(biāo)
    }
        menu.exec(QCursor::pos());
}

void zbtx::add_zb_sub_level()
{
    QTreeWidgetItem * current = ui.tree_zhibiao->currentItem();
    if (!current)
        return;
    QTreeWidgetItem* it = new QTreeWidgetItem;
    it->setText(0, QStringLiteral("添加子指標(biāo)"));
    it->setData(0, Qt::UserRole-1, g_zb_id++);//id
    it->setData(0, Qt::UserRole, 0);//indicator
    current->addChild(it);
    current->setExpanded(true);
}
void zbtx::delete_zb()
{
    QTreeWidgetItem * current = ui.tree_zhibiao->currentItem();
    if (!current)
        return;
    if (!current->parent())
        return;
    ui.tree_zhibiao->clearSelection();
    current->parent()->removeChild(current);
}

一、系統(tǒng)自定義槽信號[改]

在項(xiàng)目中,場景SceCreator.h中,我們的評估方案中

//.h
private:

    void connectSlots();         //連接signals-slots


private slots:


    void on_newEval_clicked();  //評估指標(biāo) 新建方案

實(shí)現(xiàn)槽信號

//.cpp
void CSceCreator::connectSlots()
{
//評估方案管理
    connect(ui.newEval,   SIGNAL(clicked()),    this,   SLOT(on_newEval_clicked()));//注:ui.newEval 為QtCreator中 控件button的命名 name



}

實(shí)現(xiàn)槽函數(shù)

void CSceCreator::on_newEval_clicked()
{
    m_zb_doc.clear();
    m_evalIndDock->new_plan();
}

備注:

  1. 針對QLineEdit、QTextEidt等輸入框 信息的保存
//彈出的屬性設(shè)置對話框(QDialog)
void ParaSetting::accept()
{
    typ = ui.comb_typ->currentIndex() + 1;
    ch = ui.le_ch->text();
    sign = ui.le_sign->text();
    //name = ui.comb_para->currentText();
    //id = ui.comb_para->itemData(ui.comb_para->currentIndex(), 0).toInt();
    QDialog::accept();
}
  1. 關(guān)于每個控件對應(yīng)的槽信號 怎么去區(qū)分與響應(yīng)
//在QtCreator創(chuàng)建槽信號(Edit Signal/Slots)
//ui_zbtx.h

QObject::connect(btn_addpara, SIGNAL(clicked()), zbtx, SLOT(on_btn_addpara_click()));
QObject::connect(btn_delpara, SIGNAL(clicked()), zbtx, SLOT(on_btn_delpara_clicked()));
QObject::connect(btn_save, SIGNAL(clicked()), zbtx, SLOT(on_btn_save_clicked()));

QMetaObject::connectSlotsByName(zbtx);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容