连接Qt中的按钮

时间:2016-02-15 02:50:04

标签: c++ qt

好。所以我有简单的Qt应用程序,它有lineEditpushButton QObjects。按下按钮应将lineEdit中的文本打印到.txt文件。简单。我运行这段代码,当函数没有采取任何参数时(只是将一些文本写入文件)。现在它看起来像这样:

mainwindow.h

private slots:
    static void on_some_pushButton_clicked(QString s);

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent),
    ui (new Ui::MainWindowClass)
{
    ui->setupUi(this);
    ui->pushButton->setText("GO");
    //Connecting a GO pushButton to a func which saves your name into a .txt file
    auto s = ui->lineEdit->text();
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_some_pushButton_clicked(s)));
}

void MainWindow::on_some_pushButton_clicked(QString s)
{
    FILE *file;
    file=fopen("data.txt", "wt");
    fprintf(file, "XD\n");
    auto z=(s.toStdString()).c_str();
    fprintf(file, "%s", z);
    fclose(file);
}

main.cpp(以防万一)

#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.setWindowTitle("Qt App");
    w.show();
    return a.exec();
}

而且,它没有做任何事情。我没有看到正在创建的文件,或类似的东西。我做错了什么?

P.S当我说它没有参数时,我的意思是:

mainwindow.cpp

void MainWindow::button_clicked()
{
    FILE *file;
    file=fopen("data2.txt", "wt");
    fprintf(file, "Works with no args");
    fclose(file);
}

connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(button_clicked()));

1 个答案:

答案 0 :(得分:2)

connect格式:

connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_some_pushButton_clicked(s)));

错了。在SIGNAL()SLOT()内,您应该提供函数声明,也就是说,它应该包含类型,而不是变量。所以这应该是:

connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_some_pushButton_clicked(QString)));

您正在尝试绑定要传递的变量(s)。要做你想做的事情,你需要有一个实例变量(或者有一个闭包或链信号......但实例变量方式更容易解释)。

class MainWindow
    : public QMainWindow
{
    // Stuff as before

private:
    QString s;
};

然后,在你的构造函数中:

s = ui->lineEdit->text();

当然,现在根本没有通过QString(它只是读取一个成员变量),该函数不需要它作为参数; connect应该回到:

connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_some_pushButton_clicked()));

你也应该发布你的应用程序的输出,因为当你点击你的按钮时,Qt可能会说No such slot行。