好。所以我有简单的Qt应用程序,它有lineEdit
和pushButton
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()));
答案 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
行。