Russian Qt Forum
Сентябрь 22, 2024, 07:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Настройка QListWidget под легенду для графика  (Прочитано 12555 раз)
daimon
Гость
« : Май 16, 2011, 00:04 »

Как программно скрыть скролл и кнопки на виджете списка?
Идея такая - чтобы не долбать мозги с виджетом легенды для графика, я хочу создать объект виджета спискаи его настроить под легенду и скрыть скролл и кнопки. При нахождении курсора мыши на виджете кнопки и скролл появляются, если вне - снова исчезают. При этом список висит на виджете и он полностью рабочий. Было бы круто потом делать граб большого виджета со списком и там бы не было даже заметно, что присутствует лист виджет.
спс
« Последнее редактирование: Май 16, 2011, 15:15 от daimon » Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Май 16, 2011, 09:04 »

void   QAbstractScrollArea::setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy )
void   QAbstractScrollArea::setHorizontalScrollBarPolicy ( Qt::ScrollBarPolicy )
Записан

Qt 5.11/4.8.7 (X11/Win)
daimon
Гость
« Ответ #2 : Май 16, 2011, 13:33 »

void   QAbstractScrollArea::setVerticalScrollBarPolicy ( Qt::ScrollBarPolicy )
void   QAbstractScrollArea::setHorizontalScrollBarPolicy ( Qt::ScrollBarPolicy )
спс, а как заставить лист виджет открывать и скрывать скролы по наведению на него мыши?
 - пробовал с фокусом - нет (если лист виджет один на виджете, то он сразу в фокусе)
 - пробовал с координатами мыши - если локальные, то они уже не считываются при наведении мыши на лист виджет, так как там уже свои координаты относительно лист виджета, если глобальные - нет метода для лист виджета - глобальное положение

мне нужно как-то увидеть, что мышь наведена на лист виджет

спс
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Май 16, 2011, 13:41 »

Отнаследуйся от QListWidget и перегрузи event():
Код
C++ (Qt)
bool YourListWidget::event( QEvent *event )
{
switch( event->type() )
{
case QEvent::HoverEnter:
setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded );
setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );
break;
case QEvent::HoverLeave:
setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
break;
default:
break;
}
return QListWidget::event( event );
}
 
Записан

Qt 5.11/4.8.7 (X11/Win)
daimon
Гость
« Ответ #4 : Май 16, 2011, 14:14 »

Отнаследуйся от QListWidget и перегрузи event():
Код
C++ (Qt)
bool YourListWidget::event( QEvent *event )
{
switch( event->type() )
{
case QEvent::HoverEnter:
setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded );
setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );
break;
case QEvent::HoverLeave:
setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
break;
default:
break;
}
return QListWidget::event( event );
}
 

сделал так
Код
C++ (Qt)
#include <QtGui>
 
class CListLegend: public QListWidget
{
Q_OBJECT
public:
CListLegend(QWidget *parent):QListWidget(parent)
{
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
}
bool event(QEvent * ev)
{
switch( ev->type() )
{
case QEvent::HoverEnter:
setVerticalScrollBarPolicy( Qt::ScrollBarAsNeeded );
setHorizontalScrollBarPolicy( Qt::ScrollBarAsNeeded );
break;
case QEvent::HoverLeave:
setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
break;
default:
break;
}
return QListWidget::event( ev );
}
 
 
};
 
 

где использую добавил много итемов - не работает, дебажу - в евент моего типа заходит только типы евентов не те
что не так?
Код
C
list = new CListLegend (this);
list->move(10,10);
list->addItems(QStringList()<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf"<<"sfdsdfsdf"<<"sdf");
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Май 16, 2011, 14:21 »

Поменяй
HoverEnter на Enter
HoverLeave на Leave.
Записан

Qt 5.11/4.8.7 (X11/Win)
daimon
Гость
« Ответ #6 : Май 16, 2011, 14:25 »

Поменяй
HoverEnter на Enter
HoverLeave на Leave.
чётко, спс
буду дальше думу делать
Записан
daimon
Гость
« Ответ #7 : Май 16, 2011, 14:58 »

так теперь не могу запретить выделение итемов

делаю так
Код
C++ (Qt)
CListLegend(QWidget *parent):QListWidget(parent)
{
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setSelectionMode(QAbstractItemView::SelectionMode::NoSelection);
blockSignals(true);
}
выделений уже нет, но всё равно остаётся рамка от выделенного итема.
как её убрать?
Записан
daimon
Гость
« Ответ #8 : Май 16, 2011, 15:09 »

есть метод какой-то setSelectionRectVisible(false), но как он работает не понятно
делал true во всех режимах выделения - толку нет
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Май 16, 2011, 15:19 »

Пора бы уже научиться работать с ассистентом Улыбающийся
Чтобы понять, что может делать определенный класс, идёшь по ссылке List of all members, including inherited members (почти в самом начале описания) и внимательно всё изучаешь.

Цитировать
так теперь не могу запретить выделение итемов
setSelectionMode( QAbstractItemView::NoSelection )
Записан

Qt 5.11/4.8.7 (X11/Win)
daimon
Гость
« Ответ #10 : Май 16, 2011, 15:21 »

Пора бы уже научиться работать с ассистентом Улыбающийся
Чтобы понять, что может делать определенный класс, идёшь по ссылке List of all members, including inherited members (почти в самом начале описания) и внимательно всё изучаешь.

Цитировать
так теперь не могу запретить выделение итемов
setSelectionMode( QAbstractItemView::NoSelection )
выделений нет - рамка есть, я не зря пишу про рамку
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #11 : Май 16, 2011, 15:24 »

setFocusPolicy( Qt::NoFocus );
Записан

Qt 5.11/4.8.7 (X11/Win)
daimon
Гость
« Ответ #12 : Май 16, 2011, 15:28 »

setFocusPolicy( Qt::NoFocus );

такую комбинацию я даже и придумать не мог
всё заработало, спс
« Последнее редактирование: Май 16, 2011, 15:39 от daimon » Записан
daimon
Гость
« Ответ #13 : Май 16, 2011, 15:53 »

Что посоветуете для такого варианта:
есть виджет графика - пеинтом рисую на пиксмепе всё для графика (renderPixmap(Settings2dGraph set), а потом этот пиксмеп рисую пеинт эвентом. При ресайзе идёт обновление пиксмепа с изменёнными настройками - размер пиксмепа под размер виджета. Для записи графика в файл я возвращаю пиксмеп с нужным размеров извне и его сохраняю.
Так вот проблема такая, если я добавляю виджет списка легенды то в итоге в рендере пиксмепа не будет этого списка.
Или грабить виджет списка как пиксмеп и рисовать на пиксмепе - тогда получится, что сам виджет будет висеть на своём графическом виде (картинке) - как-то тупо получается.

Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #14 : Май 16, 2011, 16:12 »

Цитировать
есть виджет графика - пеинтом рисую на пиксмепе всё для графика (renderPixmap(Settings2dGraph set), а потом этот пиксмеп рисую пеинт эвентом. При ресайзе идёт обновление пиксмепа с изменёнными настройками - размер пиксмепа под размер виджета.
И зачем такой изврат?

Цитировать
Или грабить виджет списка как пиксмеп и рисовать на пиксмепе - тогда получится, что сам виджет будет висеть на своём графическом виде (картинке) - как-то тупо получается.
Ничего не понял.
Записан

Qt 5.11/4.8.7 (X11/Win)
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.121 секунд. Запросов: 23.