3

一意の名前「statusLabel」を使用して、Qt Creator でラベルを作成しました。

次に、このステータス ラベルを次のように更新する関数を作成しました。

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

これは機能せず、次のエラーが発生します。

C:\Qt\Tools\QtCreator\bin\AutoFish\autofish.cpp:24: error: C2227: left of '->statusLabel' must point to class/struct/union/generic type

何が間違っているのかわかりません。その関数を使用してラベル テキストを更新しようとしているだけです。ラベル以外のものを使用する必要がありますか? ラベルを更新するイベントを作成するためにスロットを調べてきましたが、私が見つけたほとんどのスロットの例には、イベントの開始として pushButton が含まれており、それは私が必要としているものではありません。

ありがとうございました。

編集: リクエストに応じて、ここにすべてのソース コードがあります (それほど大きくはありません): http://pastebin.com/CfQXdzBK

4

1 に答える 1

3

メソッドが として宣言されているため、static非静的メンバーuiに直接アクセスすることはできません。

変化する

static void AutoFish::updatelabel(QString str);

void updatelabel(QString str);

ヘッダーファイルで。

staticウィンドウの特定のインスタンスにラベルを設定したいので、キーワードは必要ありません。また、AutoFish::クラス宣言内でメソッドを宣言する必要はありません (ただし、cppファイルでは必要です)。

2 番目のエラーによると、関数内で を呼び出すには、オブジェクトgetWindowのインスタンスが必要です。したがって、定義を次のように変更します。AutoFishupdateLabelgetWindow

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

于 2013-09-06T13:25:29.847 に答える