C++ 在Qt中连接按钮
好的。所以我有了一个简单的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
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可能会说一些类似于无此类槽的话。好的,谢谢。帮了很多忙!事实上没有。一切都运行顺利,没有来自编译器的消息,也没有其他消息。谢谢。帮了很多忙!事实上没有。一切都运行顺利,没有来自编译器或其他任何东西的消息