没有这样的插槽QLineEdit :: setText

时间:2016-05-15 18:10:19

标签: c++ qt

我正在尝试将按钮连接到lineEdit。单击按钮,将lineEdit的文本设置为“Hello”。 但我的信号和插槽有问题!

This is my form

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')

2 个答案:

答案 0 :(得分:2)

如果SIGNAL具有相同的签名,则只能将其连接到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"));

答案 1 :(得分:1)

由于您使用的是Qt5,因此可以使用lambda表达式。 首先,通过在c++11文件中添加CONFIG += c++11来确保启用.pro

#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"