相关疑难解决方法(0)

std :: bind和完美转发

以下代码无法编译:

#include <functional>

template<class ...Args>
void invoke(Args&&... args)
{
}

template<class ...Args>
void bind_and_forward(Args&&... args)
{
    auto binder = std::bind(&invoke<Args...>, std::forward<Args>(args)...);
    binder();
}

int main()
{
    int a = 1;
    bind_and_forward(a, 2);
}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确的,原因如下:std::bind会将它的参数,当binderoperator()叫,它通过了所有绑定的参数作为左值 -即使是那些进入者bind右值.但是invoke为原始参数进行了实例化,它无法接受binder传递它的尝试.

这个问题有什么解决方案吗?

c++ stdbind perfect-forwarding c++11

5
推荐指数
1
解决办法
1617
查看次数

如何通过QTest访问QMessageBox

我正在使用QTest在应用程序中创建一些自动化的GUI测试

我可以使用以下命令从应用程序中访问小部件:

savePushButton = mainWindow->findChild<QPushButton *>("savePushButton");
Run Code Online (Sandbox Code Playgroud)

它工作正常,但是现在我必须单击QMessageBox的“确定”按钮。

我在应用程序中创建了QMessageBox,如下所示:

if( something_wrong )
{
    QMessageBox::warning(new Widget(), "Title", "Something wrong!");
}
Run Code Online (Sandbox Code Playgroud)

我如何访问此QMessageBox及其按钮?

qt qwidget qtestlib qmessagebox

3
推荐指数
1
解决办法
934
查看次数

Qt Auto-UI 测试因消息框而停止。如何模拟在消息框上输入?

我的任务是为正在开发的软件编写自动化的 UI 测试。碰巧的是,有单选按钮触发了一个消息框,这会停止我的自动化测试,直到我手动确认它(按 ENTER)。问题是我不知道如何调用新调用的消息框,然后确认它QTest::keyClick(<object>, QtKey::Key_Enter);并让我的自动化测试继续运行。

我正在使用 QWidgets、QApplication、Q_OBJECT 和 QtTest。我将提供一个类似于我正在使用的代码:

void testui1(){
Form1* myform = new Form1();
myform->show();
QTest::mouseClick(myform->radioButton01, Qt::LeftButton, Qt::NoModifier, QPoint(), 100);
// Message box pops up and stops the operation until confirmed
QTest::mouseClick(myform->radioButton02, Qt::LeftButton, Qt::NoModifier, QPoint(), 100);
// again
...
}
Run Code Online (Sandbox Code Playgroud)

我究竟如何编写脚本来自动确认消息框?消息框只是一个 [OK] 类型,所以我不需要它来返回我是否按下了 Yes 或 No。一个QTest::keyClick(<target object>, Qt::Key_Enter)方法需要知道它应该按回车键到哪个对象。我尝试包含myform到对象中,但没有奏效。谷歌搜索我没有找到答案。我发现以下结果无法满足我的要求

QWidgetList allToplevelWidgets = QApplication::topLevelWidgets();
foreach (QWidget *w, allToplevelWidgets) {
    if (w->inherits("QMessageBox")) {
        QMessageBox *mb = qobject_cast<QMessageBox *>(w);
        QTest::keyClick(mb, Qt::Key_Enter);
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ testing user-interface qt automated-tests

2
推荐指数
1
解决办法
788
查看次数