Доброго времени суток.
Небольшой пример.
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QDirModel *model = new QDirModel(this);
ui->treeView->setModel(model) ;
ui->treeView->setMaximumWidth(200);
ui->treeView->hideColumn(1);
ui->treeView->hideColumn(2);
ui->treeView->hideColumn(3);
ui->treeView->hideColumn(4);
m_RootIndex = model->index("/home/user");
ui->treeView->setRootIndex(m_RootIndex);
connect(ui->treeView, SIGNAL(expanded(const QModelIndex &)), this, SLOT(on_tree_widget_expanded(const QModelIndex &)));
connect(ui->treeView, SIGNAL(collapsed(const QModelIndex &)), this, SLOT(on_tree_widget_collapsed(const QModelIndex &)));
}
///пройдемся по parent найдем m_RootIndex
int MainWindow::depth_branch(const QModelIndex &index)
{
int ret = 0;
QModelIndex in = index;
while (in != m_RootIndex)
{
in = in.parent();
ret++;
}
return ret;
}
void MainWindow::on_tree_widget_expanded(const QModelIndex &index)
{
ui->treeView->resizeColumnToContents(0);
int value = ui->treeView->horizontalScrollBar()->value();
qDebug() << value;
ui->treeView->horizontalScrollBar()->setValue(value + depth_branch(index)*10);
m_value = ui->treeView->horizontalScrollBar()->value();
}
void MainWindow::on_tree_widget_collapsed(const QModelIndex &index)
{
ui->treeView->resizeColumnToContents(0);
int value = ui->treeView->horizontalScrollBar()->value();
ui->treeView->horizontalScrollBar()->setValue(value - depth_branch(index)*10);
m_value = ui->treeView->horizontalScrollBar()->value();
}
и
Когда user переходит по каталогам (стрелка вправо ) с большой вложенностью размера ширины treeview не хватает чтобы показать имя директории, надо как то заставить горизонтальный scroll подвинуться и сдвинуться обратно когда нажата стрелка вправо (вышли из ветки)
Когда переходим по веткам текст current item-а должен быть по середине widgeta пытаюсь в данном примере, управлять горизонтальным scrollbar,
но когда пользователь переходит на стрелке вниз значение scrollBar->value изменяется на ноль, Подскажите как сделать правильно?