⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 11.16 实例:鼠标校准程序.txt

📁 qt的源代码
💻 TXT
字号:
 int main(int argc, char **argv)
 {
     QApplication app(argc, argv, QApplication::GuiServer);
     if (!QWSServer::mouseHandler())
         qFatal("No mouse handler installed");
     {
         QMessageBox message;
         message.setText("<p>Please press once at each of the marks "
                         "shown in the next screen.</p>"
                         "<p>This messagebox will timout after 10 seconds "
                         "if you are unable to close it.</p>");
         QTimer::singleShot(10 * 1000, &message, SLOT(accept()));
         message.exec();
 }
 Calibration cal;
     cal.exec();
 {
QMessageBox message;
         message.setText("<p>The next screen will let you test the calibration "
                         "by drawing into a widget.</p><p>This program will "
                         "automatically close after 20 seconds.<p>");
         QTimer::singleShot(10 * 1000, &message, SLOT(accept()));
         message.exec();
     }
     ScribbleWidget scribble;
     scribble.showMaximized();
     scribble.show();
     app.setActiveWindow(&scribble);
     QTimer::singleShot(20 * 1000, &app, SLOT(quit()));
     return app.exec();
 }
class Calibration : public QDialog
 {
 public:
     Calibration();
     ~Calibration();
     int exec();
 protected:
     void paintEvent(QPaintEvent*);
     void mouseReleaseEvent(QMouseEvent*);
     void accept();
 private:
     QWSPointerCalibrationData data;
     int pressCount;
 };
 Calibration::Calibration()
 {
     QRect desktop = QApplication::desktop()->geometry();
     desktop.moveTo(QPoint(0, 0));
     setGeometry(desktop);
     setFocusPolicy(Qt::StrongFocus);
     setFocus();
     setModal(true);
int width = qt_screen->deviceWidth();
     int height = qt_screen->deviceHeight();
     int dx = width / 10;
     int dy = height / 10;
     QPoint *points = data.screenPoints;
     points[QWSPointerCalibrationData::TopLeft] = QPoint(dx, dy);
     points[QWSPointerCalibrationData::BottomLeft] = QPoint(dx, height - dy);
     points[QWSPointerCalibrationData::BottomRight] = QPoint(width - dx, height - dy);
     points[QWSPointerCalibrationData::TopRight] = QPoint(width - dx, dy);
     points[QWSPointerCalibrationData::Center] = QPoint(width / 2, height / 2);
     pressCount = 0;
 }
 Calibration::~Calibration()
 {
 }
 int Calibration::exec()
 {
     QWSServer::mouseHandler()->clearCalibration();
     grabMouse();
     activateWindow();
     int ret = QDialog::exec();
     releaseMouse();
     return ret;
 }
void Calibration::paintEvent(QPaintEvent*)
 {
     QPainter p(this);
     p.fillRect(rect(), Qt::white);
     QPoint point = data.screenPoints[pressCount];
 QSize screenSize(qt_screen->deviceWidth(), qt_screen->deviceHeight());
     point = qt_screen->mapFromDevice(point, screenSize);
     p.fillRect(point.x() - 6, point.y() - 1, 13, 3, Qt::black);
     p.fillRect(point.x() - 1, point.y() - 6, 3, 13, Qt::black);
 }
 void Calibration::mouseReleaseEvent(QMouseEvent *event)
 {
 QSize screenSize(qt_screen->width(), qt_screen->height());
     QPoint p = qt_screen->mapToDevice(event->pos(), screenSize);
     data.devPoints[pressCount] = p;
     if (++pressCount < 5)
         repaint();
     else
         accept();
 }
 void Calibration::accept()
 {
     Q_ASSERT(pressCount == 5);
     QWSServer::mouseHandler()->calibrate(&data);
     QDialog::accept();
 }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -