C++ 在Qt中连接按钮

C++ 在Qt中连接按钮,c++,qt,C++,Qt,好的。所以我有了一个简单的Qt应用程序,它有lineEdit和按钮QObjects。按下按钮应将lineEdit中的文本打印到.txt文件中。简单。我已经运行了这段代码,当时函数并没有接受任何参数(只是向文件中写入了一些文本)。现在看起来是这样的: 主窗口 private slots: static void on_some_pushButton_clicked(QString s); mainwindow.cpp MainWindow::MainWindow(QWidget *par

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

主窗口

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);
}
void MainWindow::button_clicked()
{
    FILE *file;
    file=fopen("data2.txt", "wt");
    fprintf(file, "Works with no args");
    fclose(file);
}
main.cpp(以防万一)

而且,好吧,它没有任何作用。我没有看到正在创建的文件,或者类似的东西。我做错了什么

当我说它在没有参数的情况下工作时,我的意思是:

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);
}
void MainWindow::button_clicked()
{
    FILE *file;
    file=fopen("data2.txt", "wt");
    fprintf(file, "Works with no args");
    fclose(file);
}
以及:


连接
格式:

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
)。要做你看起来想做的事情,你需要有一个实例变量(或者有一个闭包,或者把信号链在一起…但是实例变量的方式更容易解释)

然后,在构造函数中:

s = ui->lineEdit->text();
当然,现在这根本不是通过
QString
传递(它只是读取一个成员变量),函数不需要它作为参数;
connect
应返回如下状态:

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

您可能也应该发布应用程序的输出,因为当您单击按钮时,Qt可能会说一些类似于
没有这样的槽的话。

连接
格式:

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
)。要做你看起来想做的事情,你需要有一个实例变量(或者有一个闭包,或者把信号链在一起…但是实例变量的方式更容易解释)

然后,在构造函数中:

s = ui->lineEdit->text();
当然,现在这根本不是通过
QString
传递(它只是读取一个成员变量),函数不需要它作为参数;
connect
应返回如下状态:

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

您可能也应该发布应用程序的输出,因为当您单击按钮时,Qt可能会说一些类似于
无此类槽的话。

好的,谢谢。帮了很多忙!事实上没有。一切都运行顺利,没有来自编译器的消息,也没有其他消息。谢谢。帮了很多忙!事实上没有。一切都运行顺利,没有来自编译器或其他任何东西的消息