Russian Qt Forum

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



Название: Специалистам QTable вопрос...
Отправлено: Const от Апрель 15, 2005, 15:34
Доброго времени суток!
Пусть у меня имеется объкет QTable с некоторым количеством строк и столбцов.
1. Как сделать подстветку QtableItem над которым в данный момент находится указатель мыши?
2. Как нарисовать прямоугольник поверх нескольких QTableItem? Скажем, если, например, я хочу выделить несколько айтемов с помощью резинового контура?
Спасибо за советы!


Название: Re: Специалистам QTable вопрос...
Отправлено: Hellenna от Апрель 15, 2005, 16:12
Цитата: "Const"

1. Как сделать подстветку QtableItem над которым в данный момент находится указатель мыши?

отлавливать событие mouseMoveEvent:
Код:
void myTable::mouseMoveEvent(QMouseEvent *e)
{
    QPainer *painter=new QPainter(this);
    //устанваливаешь параметры painter
    painter.setColor(Qt::red);
    ...
    int row=rowAt(e->y());
    int col=columnAt(e->x());
    paintCell(painter, row, col, cellGeometry(row, col));
}

Цитата: "Const"
2. Как нарисовать прямоугольник поверх нескольких QTableItem? Скажем, если, например, я хочу выделить несколько айтемов с помощью резинового контура?

аналогично, исппользуя paintCell.
можешь посмотреть пример из qt: statistic


Название: Специалистам QTable вопрос...
Отправлено: Const от Апрель 15, 2005, 16:59
mouseMove ивент не приходит! Сколько не вошкайся мышкой по таблице...  :evil:
Кстати, где можно найти пример statistic? Я у себя в Qt 3.3.. не нашел..  :shock:


Название: Специалистам QTable вопрос...
Отправлено: Racheengel от Апрель 15, 2005, 17:00
попробуй включить qApp->setGlobalMouseTraching(true);


Название: Специалистам QTable вопрос...
Отправлено: Sergeich от Апрель 15, 2005, 17:39
Лучше написать уоurQTableInstance->setMouseTracking( true ), чтоб не генерить лишних событий.
Пример находится в $(QTDIR)/examples/table/statistics


Название: Специалистам QTable вопрос...
Отправлено: Hellenna от Апрель 15, 2005, 18:39
Цитата: "Const"
mouseMove ивент не приходит! Сколько не вошкайся мышкой по таблице...  :evil:

если mouseTracking=false, mouseMoveEvent возникает только при движении с нажатой кнопкой мыши (какой неважно).

Еще есть enterEvent(QEvent *e) и leaveEvent(QEvent *e) они возникают когда курсор мышы попадает на виджет и покидает его соответственно (при ненажатой кнопке).
Может они тебе больше подойдут.


Название: Специалистам QTable вопрос...
Отправлено: Const от Апрель 18, 2005, 12:37
Спасибо всем за советы и участие!
Исследование показало, что ивенты типа MouseMove, MouseButtonClick до производного от QTable класса не доходят  :shock: Впрочем, до виджета, на территории которого располагается таблица - тоже. Как только мышь покидает территорию таблицы, так сразу все начинает работать. И mousemove и нажате и кнопок...
В общем, решить задачу с отслеживанием движения мыши по таблице мне так и не удалось... Хорошо хоть, что click работает...


Название: Специалистам QTable вопрос...
Отправлено: Const от Апрель 18, 2005, 15:29
Нашел способ как отслеживать движение мышкой. Нужно приделать функцию
    void contentsMouseMoveEvent( QMouseEvent *e );
и будет щастье...  :roll: