154 case Qt::Key_Right:
155 zoomStack[сurZoom].scrol1(+1, 0);
156 refreshPixmap();
157 break;
158 case Qt::Key_Down:
159 zoomStack[curZoom].scroll(0, -1);
160 refreshPixmap();
161 break;
162 case Qt::Key_Up:
163 zoomStack[curZoom].scroll(0, +1);
164 refreshPixmap();
165 break;
166 default:
167 QWidget::keyPressEvent(event);
168 }
169 }
Когда пользователь нажимает на клавиатуре какую-нибудь клавишу и фокус имеет построитель графиков
170 void Plotter::wheelEvent(QWheelEvent *event)
171 {
172 int numDegrees= event->delta() / 8;
173 int numTicks = numDegrees / 15;
174 if (event->orientation() == Qt::Horizontal) {
175 zoomStack[curZoom].scroll(numTicks, 0);
176 } else {
177 zoomStack[curZoom].scroll(0, numTicks);
178 }
179 refreshPixmap();
180 }
События колесика мышки возникают при повороте колесика мышки. В большинстве мышек предусматривается колесико для перемещения по вертикали, но некоторые мышки имеют также колесико для перемещения по горизонтали. Qt поддерживает оба вида колесиков. События колесика мышки передаются виджету, на котором находится фокус. Функция
Наиболее распространенное применение колесико мышки получило для продвижения по полосе прокрутки. При использовании нами
Этим завершается реализация обработчиков событий. Теперь давайте рассмотрим закрытые функции.
181 void Plotter::updateRubberBandRegion()
182 {
183 QRect rect = rubberBandRect.normalized();
184 update(rect.left(), rect.top(), rect.width(), 1);
185 update(rect.left(), rect.top(), 1, rect.height());
186 update(rect.left(), rect.bottom(), rect.width(), 1);
187 update(rect.right(), rect.top(), 1, rect.height());
188 }
Функция
189 void Plotter::refreshPixmap()
190 {
191 pixmap = QPixmap(size());
192 pixmap.fill(this, 0, 0);
193 QPainter painter(&pixmap);
194 painter.initFrom(this);
195 drawGrid(&painter);
196 drawCurves(&painter);
197 update();
198 }