QListWidget 无法识别来自 QTest::mouseDClick 的信号



我正在尝试使用QTest来测试与QListWidget的UI交互。通过简单单击进行的交互工作正常(QTest::mouseClick()),但双击的交互则不然(QTest::mouseDClick())。

以下是重现该问题的简化代码示例:

对话.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;
};

对话框.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);
}

我手动检查了对话框,并按预期调用了插槽。

我知道这是一个

古老的话题,但我在 QTreeView 上遇到了相同的行为,并且已经花费了一些时间来找到解决方法,所以我认为它对其他人很有用。

使用 QTest,由于 Qt 源代码中的部分代码我不理解(qtreeview.cpp,第 1934 行与 Qt 5.12.1,或者对于其他代码,在 qabstractitemview 中.cpp第 1952 行),信号doubleClicked永远不会发出。我不知道这是否是一个错误。

为了避免这种奇怪的代码,我只是在调用具有相同参数的 QTest::mouseDClick 之前添加了对 QTest::mouseClick 的调用。它对我有用,因为我的 QTreeView 在简单的点击上没有任何特别的作用,但它会在另一种情况下扭曲测试。

如果有人有更好的解决方案,我接受!

相关内容

  • 没有找到相关文章

最新更新