尝试在运行时更改 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")
。
我刚开始使用 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")
。