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


I’m new to coding with QTCreator, and Linux Graphical Development in general. What is the, probably trivial, thing I am doing wrong here?

I could write this code and make it work easily without using the form method, but I’d really prefer to use the graphical interface, as it should be faster (once I know what compiler wants me to do).

When I enter this code it tells me that btnStopGo isn’t defined in this context.
I used the forms interface to drop the button onto a form.

The code is in the file mainwindow.cpp

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

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)


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




#include <QMainWindow>

namespace Ui { class MainWindow; }

class MainWindow : public QMainWindow

    MainWindow(QWidget *parent = nullptr);

private slots:

    void on_btnSelect_clicked();

    void on_btnStopGo_clicked();

    Ui::MainWindow *ui;

#endif // MAINWINDOW_H

Other visible files in the project are : Hello2.pro, main.cpp, and mainwindow.ui. main.cpp declares mywindow as the variable to access the main window. I’ve tried using "ui.btnStopGo", mywindow.btnStopGo, ui->btnStopGo (blows up the compiler), and every other combo I can think of. None of them work so far.

I don’t know if this is relevant but I’m using:
Qt Creator 4.11.0
Based on Qt 5.12.8 (GCC 9.3.0, 64 bit)
on a Linux Mint 20 Cinnamon with KDE added manually.


If you put the button in the form designer, and called the button btnStopGo, then it ends up compiled into the ui_mainwindow.h and .cc files. Your MainWindow class, which you wrote yourself, doesn’t have a (member) variable called btnStopGo. It does have a variable ui, which points to the user interface which was generated from the form designer.

Use ui->btnStopGo->setText("stop") instead.

Answered By – Adriaan de Groot

Answer Checked By – Candace Johnson (BugsFixing Volunteer)

Leave a Reply

Your email address will not be published. Required fields are marked *