【发布时间】:2019-05-06 17:34:35
【问题描述】:
我正在尝试使用 QTest 来测试与 QListWidget 的 UI 交互。 通过简单的单击进行的交互可以正常工作(QTest::mouseClick()),但通过双击进行的交互则不行(QTest::mouseDClick())。
这里是重现问题的简化代码示例:
Dialog.h
class UILIBSHARED_EXPORT Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
int doubleClickCount = 0;
QString lastItemClicked = "";
QListWidget* GetListW();
private slots:
void on_listWidget_doubleClicked(const QModelIndex &index);
public:
Ui::Dialog *ui;
};
Dialog.cpp
QListWidget*Dialog::GetListW()
{
return ui->listWidget;
}
void Dialog::on_listWidget_doubleClicked(const QModelIndex &index)
{
lastItemClicked = ui->listWidget->item(index.row())->text();
++doubleClickCount;
}
还有测试课:
class DoubleClickTest : public QObject
{
Q_OBJECT
public:
DoubleClickTest();
private Q_SLOTS:
void testDoubleClick();
};
void DoubleClickTest::testDoubleClick()
{
Dialog dialog;
dialog.show();
QListWidgetItem* item = dialog.GetListW()->item(1);
QRect rect = dialog.GetListW()->visualItemRect(item);
QTest::mouseDClick(dialog.GetListW()->viewport(), Qt::LeftButton, Qt::KeyboardModifiers(), rect.center());
QCOMPARE(dialog.doubleClickCount, 1);
}
我手动检查了对话框,并按预期调用了插槽。
【问题讨论】:
-
你是如何连接插槽“on_listWidget_doubleClicked”的?
-
katamarayudu: 使用 on_<..>_event 时会自动连接
-
katamarayudu:是的,它是自动连接的,正如 user3606329 解释的那样。但是手动连接结果是一样的。
-
事实上,代码甚至不适用于单击事件。我按照这里的解释修复了它:stackoverflow.com/questions/10728362/… 现在代码适用于单击,但仍然不适用于双击(这是关键问题)。
标签: qt qlistwidget qttest