[英]Connecting a button in Qt
好的。 因此,我有一個簡單的Qt應用程序,它具有lineEdit
和pushButton
。 按下按鈕應將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.