好的。所以我有简单的 Qt 应用程序,其中有lineEditQObjects pushButton。lineEdit按下按钮应打印文件中的文本.txt。简单的。当函数不带任何参数(只是将一些文本写入文件)时,我运行了这段代码。现在看起来像这样:
主窗口.h
private slots:
static void on_some_pushButton_clicked(QString s);
Run Code Online (Sandbox Code Playgroud)
主窗口.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);
}
Run Code Online (Sandbox Code Playgroud)
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();
}
Run Code Online (Sandbox Code Playgroud)
而且,好吧,它没有任何作用。我没有看到正在创建的文件或类似的内容。我究竟做错了什么?
PS 当我说它无需参数即可工作时,我的意思是:
主窗口.cpp
void MainWindow::button_clicked()
{
FILE *file;
file=fopen("data2.txt", "wt");
fprintf(file, "Works with no args");
fclose(file);
}
Run Code Online (Sandbox Code Playgroud)
和:
connect(ui->pushButton_2,SIGNAL(clicked()),this,SLOT(button_clicked()));
Run Code Online (Sandbox Code Playgroud)
这种connect格式:
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_some_pushButton_clicked(s)));
Run Code Online (Sandbox Code Playgroud)
是错的。SIGNAL()在and中SLOT(),您应该提供函数声明,也就是说,它应该包含types,而不是变量。所以这应该看起来像:
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_some_pushButton_clicked(QString)));
Run Code Online (Sandbox Code Playgroud)
s您正在尝试绑定要传递的变量 ( )。为了做你想做的事情,你需要有一个实例变量(或者有一个闭包,或者将信号链接在一起......但实例变量方式更容易解释)。
class MainWindow
: public QMainWindow
{
// Stuff as before
private:
QString s;
};
Run Code Online (Sandbox Code Playgroud)
然后,在你的构造函数中:
s = ui->lineEdit->text();
Run Code Online (Sandbox Code Playgroud)
当然,QString现在这根本就不是通过 a (它只是读取一个成员变量),函数不需要它作为参数;应该connect回到看起来像:
connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_some_pushButton_clicked()));
Run Code Online (Sandbox Code Playgroud)
您可能还应该发布应用程序的输出,因为 Qt 可能会No such slot在您单击按钮时说出一些内容。
| 归档时间: |
|
| 查看次数: |
13841 次 |
| 最近记录: |