QTreewidget设置不可输入特殊字符

QTreewidget设置不可输入特殊字符,第1张

使用到QTreeWidget设置,如下:

QTreeWidgetCalibrationWidget=newQTreeWidget

CalibrationWidget->setColumnCount(2)//将treewidget设置为两列

CalibrationWidget->setColumnWidth(0,155)//设置指定列宽

CalibrationWidget->setItemsExpandable(true)//设置默认为展开

QStringListm_header

m_headerQStringListdynamic

dynamicdynamicItem=newQTreeWidgetItem(CalibrationWidget,dynamic)//添加列表

1、删除所有子列表项

QListQTreeWidgetItem::takeChildren()//删除所有子列表项

Removesthelistofchildrenandreturnsit,otherwisereturnsanemptylist.

2、删除指定子列表项

voidQTreeWidgetItem::removeChild(QTreeWidgetItem*child)//删除指定子列表项

Removesthegivenitemindicatedbychild.Theremoveditemwillnotbedeleted.

3、删除指定索引的子列表项

QTreeWidgetItem*QTreeWidgetItem::takeChild(intindex)//删除指定索引的子列表项

Removestheitematindexandreturnsit,otherwisereturn0.

4、添加子列表项

voidQTreeWidgetItem::addChild(QTreeWidgetItem*child)//添加子列表项

Appendsthechilditemtothelistofchildren.

5、添加多条子列表项

voidQTreeWidgetItem::addChildren(constQList&children)//添加多条子列表项

Appendsthegivenlistofchildrentotheitem.

6、设置treewidget字体样式及treewidget头字体样式

QTreeWidget->setFont(QFont("微软雅黑",12,QFont::Normal,false))

QTreeWidget->headerItem()->setFont(0,QFont("微软雅黑",12,QFont::Normal,false))//设置treewidget头字体格式。

在自定义的delegate中检查if(index.data(Qt::UserRole).toString() == "your value")的值,该值在QTreeWidget中要预先设定。这样就可以在让指定QTreeWidgetItem->setData(1, (Qt::UserRole), "your value")的QTreeWidgetItem使用相对应的delegate了.

就在构造函数里面加上以下两行代码即可:

//根据内容自动设置列宽

ui->treeWidget->header()->setResizeMode(QHeaderView::ResizeToContents)

ui->treeWidget->header()->setStretchLastSection(false)

在解决完上述问题后,又遇到一个问题,就是用鼠标左键或者右键单击QTreeWidget里面的选项时,水平滚动条会自动跑到最左边,双击不会出现这个问题,详细查阅了QTreeWidget的实现代码,在其父类中有个事件处理函数void QAbstractItemView::timerEvent(QTimerEvent *event),加了一个滚动处理,这里真是有点晕了,它的注释就是“we only get here if there was no double click”,大家可以看下这里为什么要加这个滚动处理。

解决方法如下(我已经对QTreeWidget进行了二次封装,就直接在这上面改的,不封装照样可以实现,原理是一样的):

1.加两个变量,记录是否有选项被点击,一个记录点击时的水平滚动条位置

bool m_isItemClicked

int m_horizontalScrollBarPos

2.对两个事件进行处理

connect(ui->treeWidget->horizontalScrollBar(), SIGNAL(valueChanged(int)), this,SLOT(scrollbarchange(int)))

void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)

{

m_isItemClicked = true

m_horizontalScrollBarPos = ui->treeWidget->horizontalScrollBar()->sliderPosition()

}

void MainWindow::scrollbarchange(int value)

{

if (m_isItemClicked)

{

ui->treeWidget->horizontalScrollBar()->setValue(m_horizontalScrollBarPos)

m_isItemClicked = false

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11766983.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-18
下一篇 2023-05-18

发表评论

登录后才能评论

评论列表(0条)

保存