QTreeview之setData绑定一个对话框

来源:互联网 发布:收钱软件哪个好 编辑:程序博客网 时间:2024/06/07 19:11

一、问题描述:点击QTreeview节点实现弹出一个对话框,由于每点击一个节点都要弹出一个对话框,所以把对话框定义成类的成员函数肯定是不行的。但是在多次点击同一个叶子节点时会弹出多个对话框,这又不满足需求啦。

二、解决思路:要满足要求有两种思路,第一种是把treview节点和对应的对话框指针保存到一个容器中,每次点击时先查看容器中是否保存了该节点对应的窗口指针,这种方法应该是可行的,但是比较麻烦点;第二种就是使用setData设置角色,我采用的就是第二种方法实现的。

三、示例代码如下:

connect(m_tree, SIGNAL(clicked(const QModelIndex)), this, SLOT(dealShowCheckDlg(const QModelIndex)));void MainWindow::dealShowCheckDlg(const QModelIndex &index){    QStandardItem *pItem = m_model->itemFromIndex(index);    QString indexData = "";    int row = -1;    QString xmlFileName = "";    if (!index.parent().data().toString().isEmpty())    {        indexData = index.data().toString();        row = index.row();        xmlFileName = m_checkSrcList.at(row);    }    ProductConfigDlg *dlg = NULL;    QVariant tempDlgVar = pItem->data(Qt::UserRole + row + 1);    if (!tempDlgVar.isNull())    {        dlg = tempDlgVar.value<ProductConfigDlg*>();    }    else    {        dlg = new ProductConfigDlg;        QVariant dlgValue = QVariant::fromValue(dlg);        pItem->setData(dlgValue, Qt::UserRole + row + 1);    }    if (dlg == NULL)        return;dlg->show();
原创粉丝点击