簡體   English   中英

在Qt中連接按鈕

[英]Connecting a button in Qt

好的。 因此,我有一個簡單的Qt應用程序,它具有lineEditpushButton 按下按鈕應將lineEdit的文本打印到.txt文件中。 簡單。 當函數不帶任何參數(只向文件中寫入一些文本)時,我就運行了這段代碼。 現在看起來像這樣:

主窗口

private slots:
    static void on_some_pushButton_clicked(QString s);

主窗口

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();
}

而且,它什么也沒做。 我沒有看到正在創建的文件或類似的文件。 我究竟做錯了什么?

PS:當我說它不帶參數時,我的意思是:

主窗口

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()));

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方向說些什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM