Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: rokky05 от Апрель 09, 2009, 14:15



Название: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: rokky05 от Апрель 09, 2009, 14:15
Всем привет, у меня такая проблема:
Мне нужно перегрузить прорисовку Хдерных колонок в таблице, я унаследувался от класа QHeaderView и перегрузи функцию paintsection, дальше я просто скопипастил код из оригинальной функции в свою перегруженою, когда наяал компилировать компилятор выдал на ету строку Q_D(const QHeaderView); такую ошыбку:
"error: 'const QHeaderView::d_func() const' is private within this context "
Можете подсказать как ето выправить....


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: Rcus от Апрель 09, 2009, 14:24
Нужно исправлять не эту ошибку, а ту что идет после слов "дальше я просто".


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: rokky05 от Апрель 09, 2009, 14:30
Нужно исправлять не эту ошибку, а ту что идет после слов "дальше я просто".

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


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: pastor от Апрель 09, 2009, 14:31
Посмотри на пример перегрузки в этом топике http://www.prog.org.ru/topic_9143_0.html


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: Alex Custov от Апрель 09, 2009, 14:55
Нужно исправлять не эту ошибку, а ту что идет после слов "дальше я просто".

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

Потому что в Qt практически везде используются d-указатели, и просто скопировать код из многих методов нельзя (т.к. d-указатели - private члены).


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: spirit от Апрель 09, 2009, 14:59
можно покапаться в приватных классах и повытягивать все переменные, которые определены в приватном классе, либо же подрубить соответствующий привайный файл, но это зло.


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: rokky05 от Апрель 09, 2009, 15:14
можно покапаться в приватных классах и повытягивать все переменные, которые определены в приватном классе, либо же подрубить соответствующий привайный файл, но это зло.
Повытаскивать все пеменные... думаю ето не выход потому что тогда ета не будет работать коректно...


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: Alex Custov от Апрель 09, 2009, 16:41
Код
C++ (Qt)
#define private public

 ;D


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: rokky05 от Апрель 09, 2009, 16:45
Код
C++ (Qt)
#define private public

 ;D

и??? ето мне ничего не говорит....


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: spirit от Апрель 09, 2009, 17:15
можно покапаться в приватных классах и повытягивать все переменные, которые определены в приватном классе, либо же подрубить соответствующий привайный файл, но это зло.
Повытаскивать все пеменные... думаю ето не выход потому что тогда ета не будет работать коректно...
как раз это оптимальное решение, т.к. твой виджет будет самодостаточен и будет работать с более поздними версиями кьюти.
а вот если ты собираешься юзать приватные кьютищные файлы, то такой гарании уже никто не дает.
из приватного ашника кьюти
Цитировать
//
//  W A R N I N G
//  -------------
//
// This file is not part of the Qt API.  It exists purely as an
// implementation detail.  This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//

PS. я делал свой хедер именно таким образом (перенося все переменные в свой класс) и все работает чудесно.
а когда юзал приватные ашники кьюти, то было много головной боли.


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: rokky05 от Апрель 09, 2009, 17:18
Я уже впринципе так и сделал.... но тут ищо одна задачка: как мне теперь подстпвить етот унаследований клас от QHeaderView моему QTbaleView?


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: spirit от Апрель 09, 2009, 17:21
очень просто: см. QTableView::setVerticalHeader & QTableView::setHorizontalHeader.


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: rokky05 от Апрель 09, 2009, 17:29
очень просто: см. QTableView::setVerticalHeader & QTableView::setHorizontalHeader.


работает!!! сенкс :)


Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: Jo от Ноябрь 25, 2009, 15:31
Не стал создавать новую тему, продолжу эту.

Столкнулся примерно с той же проблемой, только необходимо переопределить метод paintEvent в наследнике от QTableView. Родная реализация меня почти что всем устраивает, хочу лишь сделать так что бы вертикальные линии сетки не рисовались.

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

Да и вообще реально ли собрать свой класс как бы сказать гибрид QTableView и QTableViewPrivate.
Если да, то как это делается?

Просто из за такой конструкции в Qt вообще непонятно как частично менять методы унаследованного класса.
Помогите пожалуйста.



Название: Re: Проблема с перегрузкой фукцыи QHeaderView::paintsection()
Отправлено: spectre71 от Ноябрь 25, 2009, 17:38
Не стал создавать новую тему, продолжу эту.

Столкнулся примерно с той же проблемой, только необходимо переопределить метод paintEvent в наследнике от QTableView. Родная реализация меня почти что всем устраивает, хочу лишь сделать так что бы вертикальные линии сетки не рисовались.

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

Да и вообще реально ли собрать свой класс как бы сказать гибрид QTableView и QTableViewPrivate.
Если да, то как это делается?

Просто из за такой конструкции в Qt вообще непонятно как частично менять методы унаследованного класса.
Помогите пожалуйста.


Отправь лучше заявку троллям.