学习记录,不好勿喷
通过右击菜单动态添加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 *item, int 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()<<"不打开";
}
}
大佬勿喷!!!