【问题标题】:Connecting a button in Qt在 Qt 中连接一个按钮
【发布时间】:2016-05-25 20:32:00
【问题描述】:

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

主窗口.h

private slots:
    static void on_some_pushButton_clicked(QString s);

主窗口.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 当我说它可以在没有参数的情况下工作时,我的意思是:

主窗口.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()));

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    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 的内容。

    【讨论】:

    • 好的,谢谢。帮助很大!实际上并没有。一切运行顺利,没有来自任何编译器的消息,也没有其他任何消息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多