gpt4 book ai didi

C++ Qt : Connect a TextEdit with a Label

转载 作者:行者123 更新时间:2023-11-30 01:46:11 26 4
gpt4 key购买 nike

在 Qt GUI 中,我尝试将 TextEdit 与标签连接起来,这样当用户键入内容时,标签会更新它的文本。这是我尝试过的:

void MainWindow ::updatelabel()
{
ui->label->setText("Hello");
}

void MainWindow::changeTextColor()
{
QString textEdit = ui->textEdit->toPlainText();
QString label = ui->label->text();
connect(textEdit, SIGNAL(textChanged()), label, SLOT(updateLabel()));
}

虽然这给了我一个错误:

error: no matching function for call to 'MainWindow::connect(QString&, const char*, QString&, const char*)'
connect(textEdit, SIGNAL(textChanged()), label, SLOT(updateLabel()));
^

我做错了什么,我该如何解决?谢谢!

最佳答案

您的代码中存在一些问题。这是更改后的代码,注释对其进行了解释:

// make sure updateLabel is declared under slots: tag in .h file
void MainWindow ::updatelabel()
{
// set label text to be the text in the text edit when this slot is called
ui->label->setText(ui->textEdit->toPlainText());
}

// this is a very suspicious method. Where do you call it from?
// I changed its name to better indicate what it does.
void MainWindow::initializeUpdatingLabel()
{
//QString textEdit = ui->textEdit->toPlainText(); // not used
//QString label = ui->label->text(); // not used

// when ever textChanged is emitted, call our updatelabel slot
connect(ui->textEdit, SIGNAL(textChanged()),
this, SLOT(updatelabel())); // updateLabel or updatelabel??!
}

一个实用的提示:当您使用SIGNALSLOT 宏时,让Qt Creator 自动完成它们。如果您手动输入它们并输入错误,您不会收到编译时错误,而是会打印一条关于没有匹配信号/槽的运行时警告。

或者,假设您使用的是支持 Qt5 和 C++11 的编译器,您可以使用新的连接语法,如果你弄错了,它会给你编译器错误。首先将 CONFIG += C++11 行添加到 .pro 文件,然后像这样进行连接:

void MainWindow::initializeUpdatingLabel()
{
connect(ui->textEdit, &QTextEdit::textChanged,
this, &MainWindow::updatelabel);
}

现在,如果您实际上没有 updateLabel 方法,则会出现编译时错误,这比您甚至可能不会注意到的运行时消息要好得多。您也可以用 lambda 替换整个 updatelabel 方法,但这超出了这个问题/答案的范围。

关于C++ Qt : Connect a TextEdit with a Label,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33590178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com