我在Qt Designer中编写了我的第一个程序,而且我将QLineEdit
文本更改为空的问题。我想用这个操作分离线程,所以我可以继续在程序的另一部分工作,而无需等待Sleep(5000)
函数的结束。但是当我想编译这段代码时,我得到了3个错误:
C2065:" ui" :未声明的标识符
C2227:left" - > AutoWyl_textPotwierdzenie"必须指向类型class / struct / union / generic
C2227:左" - > setText"必须指向类型class / struct / union / generic
你能帮我解决这些错误吗?提前谢谢。
这是代码中有问题的部分:
{...
void autowyl_potwierdzenie_reset();
std::thread reset(autowyl_potwierdzenie_reset);
reset.detach();
}
void autowyl_potwierdzenie_reset()
{
Sleep(5000);
ui->Autowyl_textPotwierdzenie->setText(""); //3 errors
}
答案 0 :(得分:3)
好像你忘了将你的方法范围扩展到类ui
是其成员。
这样的事情应该有效:
void MainWindow::autowyl_potwierdzenie_reset()
{
Sleep(5000);
ui->Autowyl_textPotwierdzenie->setText("");
}
MainWindow
是包含ui
的类。
一个更完整的例子,编译,可以帮助你更快地得到答案。
答案 1 :(得分:1)
我认为你是从包含ui
的类的方法创建线程的(这可能是指向Ui::TheWidgetYouDesignedInQtDesigner
的指针)。另一方面,线程运行的函数不在类中,因此无法到达ui
。
我建议将ui
作为参数传递,或者更好的是,只传递QLineEdit
:
// ...
std::thread reset(autowyl_potwierdzenie_reset, ui-> Autowyl_textPotwierdzenie);
// ...
void autowyl_potwierdzenie_reset(QLineEdit* lineEdit)
{
Sleep(5000);
lineEdit->setText("");
}
如果再次使用autowyl_potwierdzenie_reset
,则可以使用lambda函数(增加代码的可读性):
std::thread reset([ui]() {
Sleep(5000);
ui->Autowyl_textPotwierdzenie->setText("");
});
reset.detach();