Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: rik_mik_2raza от Апрель 13, 2023, 21:49



Название: QTreeView как сделать чтобы текст был по середине Widgeta
Отправлено: rik_mik_2raza от Апрель 13, 2023, 21:49
Доброго времени суток.

Небольшой пример.
Код:
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 изменяется на ноль, Подскажите как сделать правильно?