尝试在运行时更改 QPushButton 文本我做错了什么?

What am I doing wrong trying to change QPushButton text at runtime?

我刚开始使用 QTCreator 进行编码,Linux 总体来说是图形开发。我在这里做错了什么,可能是微不足道的事情?

我可以编写此代码并使其在不使用表单方法的情况下轻松工作,但我真的更喜欢使用图形界面,因为它应该更快(一旦我知道编译器要我做什么)。

当我输入此代码时,它告诉我 btnStopGo 未在此上下文中定义。 我使用表单界面将按钮拖放到表单上。

代码在文件中mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

...

void MainWindow::on_btnStopGo_clicked()
{
    if (bDoStream){
        if (bStreaming){
            //TODO: Send stop stream signal, save stream to file, dispose stream
            bStreaming = false;
            btnStopGo->setText("Go");
        }
        else{
            btnStopGo->setText("Stop");
            bStreaming = true;
            // TODO: request a stream of quotes
        }
    }
    else {
        // TODO: Get a single quote tick
    }

}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT;

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    ...

private slots:
    ...

    void on_btnSelect_clicked();

    void on_btnStopGo_clicked();

private:
    Ui::MainWindow *ui;

};
#endif // MAINWINDOW_H

项目中的其他可见文件是:Hello2.pro、main.cpp 和 mainwindow.ui。 main.cpp 将 mywindow 声明为访问主 window 的变量。我试过使用“ui.btnStopGo”、mywindow.btnStopGo、ui->btnStopGo(炸毁编译器)以及我能想到的所有其他组合。 None 到目前为止他们工作。

我不知道这是否相关,但我正在使用: Qt 创作者 4.11.0 基于 Qt 5.12.8(GCC 9.3.0,64 位) 在手动添加 KDE 的 Linux Mint 20 Cinnamon 上。

如果您将按钮放在表单设计器中,并调用按钮 btnStopGo,那么它最终会编译到 ui_mainwindow.h.cc 文件中。您自己编写的 MainWindow class 没有名为 btnStopGo 的(成员)变量。它确实有一个变量ui,它指向从表单设计器生成的用户界面。

改用ui->btnStopGo->setText("stop")