C++Qt:将TextEdit与Label连接起来
C++ Qt: Connect a TextEdit with a Label
在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??!
}
一个实用提示:当您使用SIGNAL
和SLOT
宏时,请让Qt Creator自动完成它们。如果你手动键入它们,并拼写错误,你不会得到编译时错误,相反,会有一个关于没有匹配信号/插槽的运行时警告打印。
或者,假设您使用的是支持Qt5和C++11的编译器,您可以使用新的连接语法,如果您弄错了,它会给您带来编译器错误。首先将行CONFIG += C++11
添加到.pro
文件中,然后进行如下连接:
void MainWindow::initializeUpdatingLabel()
{
connect(ui->textEdit, &QTextEdit::textChanged,
this, &MainWindow::updatelabel);
}
现在,如果您实际上并没有updateLabel
方法,就会出现编译时错误,这比您可能根本没有注意到的运行时消息要好得多。您也可以用lambda替换整个updatelabel
方法,但这超出了这个问题/答案的范围。
您在该方法中连接到错误的textEdit
和label
变量:
- connect(textEdit, SIGNAL(textChanged()), label, SLOT(updateLabel()));
+ connect(ui->textEdit, SIGNAL(textChanged()), this, SLOT(updateLabel()));
QString
不是具有信号和插槽的小部件。您需要ui
、ui->textEdit
和this
中包含updateLabel()
的当前类的实际小部件。
编辑:修正我犯的错误,因为我在疲劳时回答。
相关文章:
- 当套接字连接断开时检测C/C++Unix
- 无法在windows上使用mingw将sqlite3与c连接
- 到连接组件算法的问题(递归)
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- 无法在C++中建立与MySQL数据库的连接
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 连接 dockerized 模型和 dockerized 数据库时出现"无法 SQLConnect"错误
- 使用 bfs 解决连接组件问题时得到错误的答案
- 在C++的两个字符串中连接以逗号分隔的唯一值
- 如何修复valgrind启动时的致命错误(与libc6-dbg和libc6-dbg:i386连接)
- C++应用程序 MySQL odbc 数据库连接错误:在引发"otl_tmpl_exception<>"实例后终止调用
- OSX蓝牙打开RFCOMMChannelAsync声称已连接,但未建立连接,并且从未调用过委托
- 在 libcurl 连接池中预创建连接
- 套接字连接"Operation not permitted"错误,甚至使用升压/平发器根.cpp
- libcurl 和 DNS ttl 中的内部连接管理
- 如何应用 libcurl 的持久连接选项
- 提升 ASIO - io_service 不要等待连接到线程
- WinSock2:connect() 提供"连接被拒绝"
- C++Qt:将TextEdit与Label连接起来