我将使用
为此,我创建了以下测试框架: main.cpp
所以用户使用左键单击小部件中的位置(5,5),然后按住鼠标拖动到位置(20,20),在那里释放按钮并松开鼠标。有趣的是,移动事件从未发生在小部件内,我真的不知道为什么。
看起来,我没有完全理解QTest :: mouseMove的意图,但Qt文档在如何使用它方面也相当缄默。
我该如何模拟所需的行为?
QTest
测试简单的小部件,并且一切都按预期进行。但现在我有一个更复杂的测试情景,基本上是用户按下鼠标按钮,然后移动一些内容,最后释放鼠标按钮。为此,我创建了以下测试框架: main.cpp
#include <QtTest/QTest>
#include "TestObject.h"
int main(int argc, char** args) {
TestObject o;
QTest::qExec(&o);
}
WidgetToTest.h
#pragma once
#include <QWidget>
class WidgetToTest : public QWidget
{
Q_OBJECT
public:
WidgetToTest(QWidget* parent = nullptr);
protected:
void mousePressEvent(QMouseEvent* event) override;
void mouseMoveEvent(QMouseEvent* event) override;
void mouseReleaseEvent(QMouseEvent* event) override;
};
WidgetToTest.cpp
#include "WidgetToTest.h"
#include <QDebug>
#include <QMouseEvent>
#include <QHBoxLayout>
WidgetToTest::WidgetToTest(QWidget* parent): QWidget(parent)
{
setFixedSize(200, 200);
setLayout(new QHBoxLayout);
}
void WidgetToTest::mousePressEvent(QMouseEvent* event)
{
qDebug() << "Mouse press: " << event;
}
void WidgetToTest::mouseMoveEvent(QMouseEvent* event)
{
qDebug() << "Mouse move: "<< event; // Nothing happens here???
}
void WidgetToTest::mouseReleaseEvent(QMouseEvent* event)
{
qDebug() << "Mouse release: " << event;
}
TestObject.h
#pragma once
#include <QObject>
class TestObject : public QObject
{
Q_OBJECT
private slots:
void testCode();
};
TestObject.cpp
#include "TestObject.h"
#include "WidgetToTest.h"
#include <QTest>
#include <QApplication>
void TestObject::testCode()
{
int argc{0};
QApplication app(argc,{});
Qt::KeyboardModifiers mod;
auto w = new WidgetToTest;
w->show();
QTest::mousePress(w, Qt::MouseButton::LeftButton,mod,QPoint(5,5));
QTest::mouseMove(w, QPoint(20,20),20);
QTest::mouseRelease(w, Qt::MouseButton::LeftButton,mod, QPoint(20,20));
}
所以用户使用左键单击小部件中的位置(5,5),然后按住鼠标拖动到位置(20,20),在那里释放按钮并松开鼠标。有趣的是,移动事件从未发生在小部件内,我真的不知道为什么。
看起来,我没有完全理解QTest :: mouseMove的意图,但Qt文档在如何使用它方面也相当缄默。
我该如何模拟所需的行为?
QTest::mouseMove
吗? - Silvano Cerza