一、描述
问题描述:点击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<ProductConf