我正在尝试从另一个类更改类Label的文本。我有类MainWindow,它包含Label。
我还有一个Bot类,我想从中改变标签的值。
我正在尝试创建信号和插槽,但我不知道从哪里开始。
我创建了信号和插槽,如下所示:
//in mainwindow.h
signals:
void changeTextSignal();
private slots:
void changeText();
//in mainwindow.cpp
void MainWindow::changeText(){
this->label->setText("FooBar");
}
但我不知道如何连接信号以便能够将Label的文本从另一个类中更改。
答案 0 :(得分:5)
阅读Qt signal-slot mechanism。如果我理解正确,您正试图从Bot发信号通知MainWindow标签文本需要更改。这是你如何做到的......
//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!");
}