Название: Проблема с QTableCornerButton в QTableView Отправлено: Istrid от Сентябрь 09, 2012, 23:23 Добрый день. Возникла задача вместо стандартной кнопки на пересечении двух хедеров в QTableView, сделать ComboBox, при нажатии на который чекались все комбобоксы в вертикальном хедере (туда их уже засунул). Проблема в том, что этот QTableCornerButton зашит рядом с классом QTableViewPrivate, и инициализируется в нем же. До QTableViewPrivate добраться не получается, потому что из DLL-ки он не экспортируется.
Подскажите, как можно до него этой чудо-кнопки достучаться. Вроде довольно тривиальный функционал. Название: Re: Проблема с QTableCornerButton в QTableView Отправлено: Istrid от Сентябрь 10, 2012, 01:13 Еще нашел что-то похожее на решение :
для доступа к приватным классам Qt: namespace Hack { template <class To, class From> inline To* d_ptr(From* ptr){ return (To*)QObjectPrivate::get(ptr);}} Эту функцию можно использовать например для включения функционала в QLineEdit, который пишет текст типа "введите сюда что-нибудь", когда в QLineEdit ничего нет: #include "private/qlineedit_p.h" ... { Hack::d_ptr<QLineEditPrivate>(ui->lineEdit)->placeholderText = "Test"; } Или для установки своего виджета вместо QTableCornerButton в QTableView: #include "private/qtableview_p.h" ... QLabel* label = new QLabel(ui->tableWidget); label->setText("<span style=\"color: red\">Bye</span> <span style=\"color: green\">Bye</span>, <span style=\"color: blue\">World!</span>"); label->setAlignment(Qt::AlignCenter); QTableViewPrivate* tvPrivate = Hack::d_ptr<QTableViewPrivate>(ui->tableWidget); tvPrivate->cornerWidget->deleteLater(); tvPrivate->cornerWidget = label; Но при подключении #include "private/qtableview_p.h" ругается, создаю папку private, кидаю туда qtableview_p.h, он ругается на "private/qtabstractitemview_p.h" и по кругу до qobjecta. Название: Re: Проблема с QTableCornerButton в QTableView Отправлено: Bepec от Сентябрь 10, 2012, 07:40 setCornerWidget ( QWidget * ) чем вам не подошёл?
Пробуйте, смотрите, наслаждайтесь результатом и... И дай вам боже пока не лазить в исходники . :) Название: Re: Проблема с QTableCornerButton в QTableView Отправлено: Istrid от Сентябрь 10, 2012, 10:55 Он мне не подошел потому что не работает) Это другой CornerButton. Он идет от QScrollArea и является вообще чем-то странным.
Если б все было так просто) Название: Re: Проблема с QTableCornerButton в QTableView Отправлено: Bepec от Сентябрь 10, 2012, 10:57 Кхм. Нарисуй что тебе надо. В пейнте али ещё как. Тогда мб помогу :) А то не совсем понимайт твою хотелку :)
Название: Re: Проблема с QTableCornerButton в QTableView Отправлено: Istrid от Сентябрь 10, 2012, 11:24 вот) на рисунке подчеркнул чудо-кнопку. Вместо нее нужен чекбокс, как под ней.
(http://s2.hostingkartinok.com/uploads/thumbs/2012/09/a26fcf2dfc649b0e17f54b6a716150f5.png) (http://hostingkartinok.com/show-image.php?id=a26fcf2dfc649b0e17f54b6a716150f5) Название: Re: Проблема с QTableCornerButton в QTableView Отправлено: Bepec от Сентябрь 10, 2012, 13:51 Достать эту часть действительно невозможно :) Она запрятана глубокоооо...
Есть простое решение/хак. Думаю вам подойдёт. Создаём QCheckBox с родителем QTableView. Мувим его на центр той кнопки. Саму кнопку делаем неактивной методом setCornerButtonEnables. И уже в программе обрабатываем нащёлкивания на него. Конечно необходимо подумать и об центровке - но это довольно легко. Данные о длине/щирине можно брать из Horizontal/VerticalHeader. И при ресайзе чекбокс двигать. PS вроде просто и доступно объяснил. Но это конечно же хак :) |