Russian Qt Forum

Qt => Model-View (MV) => Тема начата: carhun от Август 04, 2012, 13:08



Название: Ресайз высоты строчки по нажатию кнопки
Отправлено: carhun от Август 04, 2012, 13:08
Добрый день.

У меня есть TreeView, в к-м будем считать условно есть 2 колонки. первая колонка, собсвтвенно, кнопка, 2я колонка - пусть будет QLineEdit...

Соотв при нажатии на кнопку хочу сделать, что бы QLineEdit увеличивал свои размеры....

Все бы хорошо, но для того, что бы оно изменило свои размеры приходится делать так:

Код:
collapse(index.parent());
expand(index.parent());

Да оно так работает, но это криво да и работает не всегда правильно. Например, если у меня много строчек и они не помещаются на эран все, и я скролю допустим до самой посл, то когда я нажму на кнопку, то оно меня перенесет в самый верх TreeView, правда при этом все равно отресайзит ту строчку где я нажал. Но хотелось бы, что бы оно не перескакивало в самый вверх...

Надеюсь вы мне поможете.

С уважением,
 carhun


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: Bepec от Август 05, 2012, 22:49
Проблема не осознал - у меня почти 12 ночи :)

Но проблема у тебя в обновлении - у тебя явно где то update вызывается, он и отбрасывает на 1 строчку.


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: carhun от Август 06, 2012, 10:38
update используется где-то внутри collapse или expand...

просто надо как бы отказаться от вызова этих ф-ий, пробывал на прямую вызывать update, так оно тогда ничего не обновляет...


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: Bepec от Август 06, 2012, 10:46
Телепаты  на мальдивах, а я кода не вижу :)


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: carhun от Август 06, 2012, 11:36
Код:
QPushButton *btn = (QPushButton *)sender();
QModelIndex i = btns[btn];

QLineEdit *le = (QLineEdit *)indexWidget(i);

le->setFixedHeight(150);

//updateGeometries();
update(i);

//    collapse(i.parent());
//    expand(i.parent());

Вот пробую делать так, и геометрия не обновляется, обновляется только когда я закрываю/открываю ....


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: Bepec от Август 06, 2012, 11:53
Позвольте спросить, а ху из дыс btns и где эта конструкция находится? В каком классе. А класс от кого и где?


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: carhun от Август 06, 2012, 12:06
в классе MyTreeView : public QTreeView {
....

QMap<QPushButton*, QModelIndex> btns;
....
}

другого способа как связать кнопку и индекс, к-ый ей соотв. я не нашел, может подскажете тоже, как лучше...


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: Bepec от Август 06, 2012, 12:07
Мдам. Я боюсь спросить, а как вы кнопочку отрисовываете?


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: carhun от Август 06, 2012, 12:10
Вот так:

...
QPushButton *btn = new QPushButton();
....
setIndexWidget(index, btn);


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: Bepec от Август 06, 2012, 12:12
А вы не думали использовать делегатик?  

PS где то тут делегатобот обретается.

PPS судя по всему вы очень далеки от моей логики программирования. Если вы выложите тестовый проект, с которым я смогу поразбираться - я возможно решу вашу проблема. Если нет, то умываю руки.


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: carhun от Август 06, 2012, 12:27
сейчас сделаю тестовый проект, через 10 мин скину.

Вот собственно, пусть будет вот так.
Если такой вариант как я пытюась сделать - это вообще полный бред, то посоветуйте как лучше , просто опыта нету и я не знаю, что есть хорошо делать, что плохо.. Желательно с кодом, я понимаю, что так хорошо, но в делигате у меня например не получилось отрисовать кнопку, наложить на нее картинку и сделать ее нажимаемой и обрабатывать результат соотвественно... получилось только ее отрисовать.



Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: Bepec от Август 10, 2012, 08:36
Кхм. Пусть и с запозданием посмотрел - ничего не понял. Пустая модель с пустыми данными, lineEdit'ов нету. Детей нету. Что смотреть?


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: carhun от Август 10, 2012, 11:33
Смотреть на то что происходит при нажатии на кнопку в первой колонке, почему происходит не правильный ресайз и как его вообще правильно делать?


Название: Re: Ресайз высоты строчки по нажатию кнопки
Отправлено: Bepec от Август 10, 2012, 12:11
Ну, ресайза у тебя не происходит :D Почему? Потому что ты ресайзишь виджет внутри ячейки. А значения ячейки остаются неизменёнными.

PS чтоб ты не паниковал добавляю - смотрю и пытаюсь сделать чо неть :)

PPS и не обманывай больше. Комбобоксы вместо лайнэдитов это плохо!!!