【问题标题】:Change label text from another class using Qt signals and slots使用 Qt 信号和槽从另一个类更改标签文本
【发布时间】:2013-07-25 16:08:09
【问题描述】:

我正在尝试从另一个类更改类标签的文本。我有类 MainWindow,其中包含标签。

我还有一个 Bot 类,我想从中更改标签的值。

我正在尝试创建信号和插槽,但我不知道从哪里开始。

我像这样创建了信号和插槽:

//in mainwindow.h
signals:
void changeTextSignal();

private slots:
void changeText();

//in mainwindow.cpp
void MainWindow::changeText(){
this->label->setText("FooBar");
}

但我不知道如何连接一个信号以便能够从另一个类更改 Label 的文本。

【问题讨论】:

  • 你应该阅读更多关于 signal-slot-mechanism 的内容 - 在 MainWindow 的 ctor 中添加 QObject::connect(this, &MainWindow::changeTextSignal, this, &MainWindow::changeText);

标签: c++ qt4 qt-creator qt5 signals-slots


【解决方案1】:

阅读 Qt signal-slot mechanism。如果我理解正确,您正试图从 Bot 向 MainWindow 发出 Label 文本需要更改的信号。这是你的做法......

//bot.h
class Bot
{
    Q_OBJECT;
    //other stuff here
signals:
    void textChanged(QString);
public:
    void someFunctionThatChangesText(const QString& newtext)
    {
        emit textChanged(newtext);
    }
}

//mainwindow.cpp
MainWindow::MainWindow
{
    //do other stuff
    this->label = new QLabel("Original Text");
    mybot = new Bot;   //mybot is a Bot* member of MainWindow in this example
    connect(mybot, SIGNAL(textChanged(QString)), this->label, SLOT(setText(QString)));
}

void MainWindow::hello()
{
    mybot->someFunctionThatChangesText("Hello World!");
}

【讨论】:

    猜你喜欢
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多