只需在Qt中更新标签即可



我使用唯一名称"statusLabel"创建了一个带有Qt Creator的标签。

然后我做了一个函数来更新这个状态标签,如下所示:

//Function to set the text in the status bar.
void AutoFish::updatelabel(QString str)
{
    ui->statusLabel->setText(str);
}

这不起作用,并给出以下错误:

C:QtToolsQtCreatorbinAutoFishautofish.cpp:24: error: C2227: left of '->statusLabel' must point to class/struct/union/generic type

不确定我做错了什么,我只是尝试使用该功能更新标签文本。我应该使用标签以外的其他东西吗?我一直在研究老虎机来创建事件以更新标签,但我发现的大多数老虎机示例都涉及 pushButton 作为事件启动,这不是我所需要的。

谢谢。

编辑:根据要求,这是我所有的源代码(不是很大):http://pastebin.com/CfQXdzBK

因为你的方法被声明为 static ,所以你不能直接访问非静态成员ui

改变

static void AutoFish::updatelabel(QString str);

void updatelabel(QString str);

在您的头文件中。

不需要static关键字,因为您要为窗口的特定实例设置标签。此外,不需要AutoFish::,因为您在类声明中声明了一个方法(但是,您在 cpp 文件中确实需要它)。

根据第二个错误 - 在getWindow函数中,您需要有一个AutoFish对象的实例才能调用updateLabel。因此,请将getWindow定义更改为:

HWND getWindow(AutoFish *af, LPCSTR processName)
{
   HWND hwnd = FindWindowA(0, processName);
    if(!hwnd) {
        std::cout << "Error: Cannot find window!" << std::endl;
        af->updatelabel("Error: Cannot find window.");
    }
    else {
        std::cout << "Seccess! Window found!" << std::endl;
        af->updatelabel("Seccess! Window Found!");
    }
    return hwnd;
}

并像这样称呼它:

HWND window = getWindow(this, "FFXIVLauncher");

或使getWindow成为AutoFish类的成员:

class AutoFish : public QMainWindow
{
   // ...
   HWND getWindow(LPCSTR processName);
   // ...
};
HWND AutoFish::getWindow(LPCSTR processName) {
    HWND hwnd = FindWindowA(0, processName);
    if(!hwnd) {
        std::cout << "Error: Cannot find window!" << std::endl;
        updatelabel("Error: Cannot find window.");
    }
    else {
        std::cout << "Seccess! Window found!" << std::endl;
        updatelabel("Seccess! Window Found!");
    }
    return hwnd;
}

并且this指针将被隐式传递给getWindow

相关内容

  • 没有找到相关文章

最新更新