没有这样的插槽QLineEdit :: setText
我试图将一个按钮连接到lineEdit.when单击按钮,将lineEdit的文本设置为“你好”。 但我有信号和插槽的问题!没有这样的插槽QLineEdit :: setText
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton,SIGNAL(clicked()),ui->lineEdit,SLOT(setText("Hello")));
}
MainWindow::~MainWindow()
{
delete ui;
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLineEdit>
#include <QPushButton>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
应用输出
Starting C:\Qt\Qt5.3.0\Tools\QtCreator\bin\build-E01S01-Desktop_Qt_5_3_0_MSVC2013_OpenGL_64bit-Debug\debug\E01S01.exe...
QObject::connect: No such slot QLineEdit::setText("Hello") in ..\E01S01\mainwindow.cpp:9
QObject::connect: (sender name: 'pushButton')
QObject::connect: (receiver name: 'lineEdit')
只能连接一个如果它们具有相同的签名,则为到SLOT
。 您可以使用QSignalMapper
来完成你想要的东西:
QSignalMapper * mapper = new QSignalMapper(this);
QObject::connect(mapper, SIGNAL(mapped(const QString&)), ui->lineEdit, SLOT(setText(const QString&)));
QObject::connect(ui->pushButton, SIGNAL(clicked()), mapper, SLOT(map()));
mapper->setMapping(ui->pushButton, tr("Hello"));
由于您使用QT5,你可以使用lambda表达式。 首先确保c++11
已启用,方法是在您的.pro
文件中添加CONFIG += c++11
。
#include <QApplication>
#include <QWidget>
#include <QLayout>
#include <QLineEdit>
#include <QPushButton>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0) : QWidget(parent)
{
setLayout(new QVBoxLayout);
QLineEdit *lineEdit = new QLineEdit("TEXT");
QPushButton *button = new QPushButton("BUTTON");
connect(button, &QPushButton::clicked, this, [=]{lineEdit->setText("PRESSED");});
layout()->addWidget(lineEdit);
layout()->addWidget(button);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
#include "main.moc"
感谢您发布这个答案..我不认为这样的解决方案,因为我坚持(依赖库兼容性问题)必须支持Qt4在我的应用程序的大约一半工作,所以现在即使我在Qt5开发我使用旧的连接语法。 – drescherjm
@drescherjm我自己也处于类似的情况。我所做的是使用最新的Qt版本制作一些业余爱好/测试项目,只是为了检查新功能并适应它们。 – thuga
您不能在连接中添加参数。用QSignalMapper解决这个问题。 – drescherjm
[请阅读有关信号和插槽的文档](http://doc.qt.io/qt-5/signalsandslots.html)了解为什么这不起作用。 –