У меня простой поток
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()
{
}
Благодаря vahancho Я нашел работу вокруг.
QMenu.exec () выполняется синхронно. Таким образом, чтобы иметь возможность вводить некоторые данные при открытии меню, мы должны использовать следующий шаблон:
QTimer::singleShot(0, [menu]()
{
//code that should be executed
});
menu->exec();
Других решений пока нет …