【问题标题】:C2065: "ui" : undeclared identifierC2065:“ui”:未声明的标识符
【发布时间】:2015-07-07 15:51:54
【问题描述】:

我正在 Qt Designer 中编写我的第一个程序,但我无法将 QLineEdit 文本更改为空。我想为这个操作使用分离线程,这样我就可以继续在程序的另一部分工作,而无需等待Sleep(5000) 函数的结束。但是当我想编译这段代码时,我得到了 3 个错误:

C2065:“ui”:未声明的标识符

C2227: left "->AutoWyl_textPotwierdzenie" 必须指向类型 class/struct/union/generic

C2227: left "->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
    }

【问题讨论】:

  • 我一般不使用QtDesigner,这里不多说。但是你为什么不使用QTimer 而不是线程呢?为什么不使用QThread 而不是std::thread
  • @Miki,我使用 std::thread 是因为我从控制台编程中知道它,但谢谢我会努力学习它。我是 QT 的初学者,所以我没有听说过 QTimer。 - 但现在我会检查一下。您的链接 [我认为] 会有所帮助。感谢您的帮助:) 我会写,如果我的问题解决了。
  • 我不知道如何修改这段代码。一切都不起作用。你能帮我解决这个问题吗?
  • 我现在不能,也许明天:D。我的建议是从一个非常简单的项目开始,例如只显示一个 QLabel。然后添加一个 QPushButton 以在单击时更改标签文本。那么你应该在路上做你想做的事......

标签: c++ qt


【解决方案1】:

似乎您忘记将您的方法范围限定为 ui 所属的类。

这样的事情应该可以工作:

void MainWindow::autowyl_potwierdzenie_reset()
{
    Sleep(5000);
    ui->Autowyl_textPotwierdzenie->setText("");
}

其中MainWindow 是包含ui 的类。

一个更完整的编译示例将帮助您更快地获得答案。

这可能很有趣:Why does C++ need the scope resolution operator?

【讨论】:

    【解决方案2】:

    我认为您正在从包含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();
    

    【讨论】:

    • 你好,这是一个1.5年的问题,我早就解决了,但是谢谢你,我接受这个答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2011-04-16
    • 2011-04-16
    • 2010-12-24
    • 2023-03-04
    • 2011-03-02
    • 2011-12-22
    相关资源
    最近更新 更多