将treewidget和tabwidget页面相互关联,双击treewidget的item打开tabwidget中的tab页

学习记录,不好勿喷

通过右击菜单动态添加treewidget以及动态添加的tabwidget的tab页

动态添加treewidget参考:Qt:QTreeWidge添加节点_qtreewidget添加节点-CSDN博客

思路:添加的treewidget的text和tabwidget添加的索引页存储在Qmap中,双击treewidget的item遍历Qmap找到其索引,进行页面的转换,可能存在的问题:item的text不能重复!!!后面如果发现更好的解决办法会随时更新。

代码如下:

创建父节点

void MainWindow::on_a_triggered()

{

    QInputDialog dia(this);

    dia.setWindowIcon(QIcon(":/image/head.jpg"));

    dia.setWindowTitle("城市");

    dia.setLabelText("请输入所在城市名称:");

    dia.setInputMode(QInputDialog::TextInput);//可选参数:DoubleInput  TextInput

    if(dia.exec() == QInputDialog::Accepted)

    {

        if(dia.textValue() == nullptr){

            QMessageBox::warning(this,"警告","请输入名称");

        }else {

            QTreeWidgetItem *temp=new QTreeWidgetItem(ui->treeWidget);

            temp->setText(0,dia.textValue());

            QVariant var;

            QString str = QUuid::createUuid().toString();

            var.setValue(str);

            temp->setData(0,Qt::UserRole,1);

            temp->setIcon(0,QIcon(":/image/2.jpg"));

        }

    }

}

temp->setData(0,Qt::UserRole,1);

这里我给父节点和子节点存储了不同的值,以便于双击item时进行判断

创建子节点

void MainWindow::on_c_triggered()

{

    qDebug()<<curItem;

    QInputDialog dia(this);

    dia.setWindowIcon(QIcon(":/image/head.jpg"));

    dia.setWindowTitle("设备");

    dia.setLabelText("请输入具体设备地点:");

    dia.setInputMode(QInputDialog::TextInput);//可选参数:DoubleInput  TextInput

    if(dia.exec() == QInputDialog::Accepted)

    {

        if(curItem == nullptr)

        {

            QMessageBox::warning(this,"警告","请选择父节点");

        }

        else {

            if(dia.textValue() == nullptr){

                QMessageBox::warning(this,"警告","请输入名称");

            }else {

                QTreeWidgetItem *temp=new QTreeWidgetItem(curItem);

                temp->setText(0,dia.textValue());

                QVariant var;

                QString str = QUuid::createUuid().toString();

                var.setValue(str);

                temp->setData(0,Qt::UserRole,0);

                temp->setIcon(0,QIcon(":/image/Error.jpg"));

                tabwidgetcontrol *ptr = new tabwidgetcontrol();

                ptr->setAttribute(Qt::WA_DeleteOnClose);

                int cur = ui->tabWidget->addTab(ptr,dia.textValue());

                qDebug()<<cur;

                ui->tabWidget->widget(cur)->setObjectName(dia.textValue());

                ui->tabWidget->setCurrentIndex(cur);

                ui->tabWidget->setVisible(true);

                m_map.insert(dia.textValue(),cur);

            }

        }

    }

}

双击子节点打开tab页

void MainWindow::on_treeWidget_itemDoubleClicked(QTreeWidgetItem *itemint column)

{

    int index = 0;

    QVariant var = curItem->data(0,Qt::UserRole);

    int indexs =var.toInt();

    if(m_map.contains(item->text(column)))

    {

        index = m_map[item->text(column)];

    }else {

        return;

    }

    if(indexs == 0)

    {

        qDebug()<<"打开tab";

        ui->tabWidget->setCurrentIndex(index);

    }else {

        qDebug()<<"不打开";

    }

}

大佬勿喷!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值