我使用唯一名称"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
。