QT QTest :: keyclick или mouseMove, кажется, не работают с QMenu в моем случае

У меня простой поток

  1. Нажмите на QPushButton
  2. QMenu с парой действий появился
  3. Перемещайтесь по QMenu с помощью нажатий клавиш или перемещения мыши.
    (Запуск действий из кода — это не выход, это должен быть простой тест GUI).

QTest::keyClick(m_menu, Qt::Key::Key_Down); — кажется, не работает для меня.

простой пример

#include "mainwindow.h"#include <QTest>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{

m_button = new QPushButton("My Button", this);
m_button->setFixedSize(100,50);m_menu = new QMenu("&Menu");
m_menu->addAction("&test1");
m_menu->addAction("&test2");
m_menu->addAction("&test3");
m_menu->addAction("&test4");
m_menu->addAction("&test5");
m_menu->addAction("&test6");connect(m_button, SIGNAL (released()), this, SLOT (handleButton()));

}

void MainWindow::handleButton()
{
m_menu->exec(m_button->mapToGlobal(QPoint(20,20)));
QTest::qWait(2000);

for(int i = 0 ;i<=5;i++){
QTest::keyClick(m_menu, Qt::Key::Key_Down);
QTest::qWait(1000);
QTest::mouseMove(m_menu, QPoint(0,20));
QTest::qWait(1000);

}}

MainWindow::~MainWindow()
{

}

0

Решение

Благодаря vahancho Я нашел работу вокруг.
QMenu.exec () выполняется синхронно. Таким образом, чтобы иметь возможность вводить некоторые данные при открытии меню, мы должны использовать следующий шаблон:

QTimer::singleShot(0, [menu]()
{
//code that should be executed
});

menu->exec();
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]