Cómo mostrar automáticamente la barra de desplazamiento horizontal de QTreeWidget
ui->treeWidget->header()->setStretchLastSection(false);
Después de resolver el problema anterior, encontré otro problema, es decir, cuando cuando Si hace clic con el botón izquierdo o con el botón derecho en una opción en QTreeWidget, la barra de desplazamiento horizontal se ejecutará automáticamente hacia la izquierda. Este problema no ocurrirá si hace doble clic. Después de ver el código de implementación de QTreeWidget en detalle, hay un manejo de eventos. función void QAbstractItemView en su clase principal: :timerEvent (QTimerEvent *event), además de un proceso de desplazamiento, es realmente un poco confuso aquí, su comentario es "Solo llegaremos aquí si no hay doble clic", puedes entender por qué Es necesario agregar este controlador de desplazamiento.
La solución es la siguiente (he encapsulado QTreeWidget por segunda vez, así que puedo cambiarlo directamente. También se puede implementar sin encapsulación. El principio es el mismo):
1. isItemClicked;
int m_horizontalScrollBarPos;
2. Manejar dos eventos
connect(ui->treeWidget->horizontalScrollBar(), SIGNAL(valueChanged( int)), this ,SLOT(scrollbarchange(int)));
void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem *item.
{
m_isItemClicked = true
m_horizontalScrollBarPos = ui->treeWidget->horizontalScrollBar()->.
void MainWindow::scrollbarchange(int value)
{
if ( m_isItemClicked)
{
ui-> treeWidget->horizontalScrollBar()->setValue(m_horizontalScrollBarPos);
m_isItemClicked = false; /p>
}
}