0
嗨,我是Qt的新手,並開始瞭解插槽和信號。使用插槽和信號連接Qt中的兩個窗體
這是我正在測試的一個小程序。它包含兩種形式(MainWindow)和(form1)。
主窗口有一個按鈕和一個標籤:
- 如果按鈕被點擊它顯示Form1中,其中有一個按鈕和一個行編輯。
- 如果點擊此按鈕(form1),它應該採用lineEdit的字符串並將mainwindow的標籤更改爲該字符串。
測試時按預想它不工作,但我不知道爲什麼
MainwWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "form1.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
form1 *sender;
~MainWindow();
private slots:
void on_pushButton_clicked();
void changelabel(QString);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "form1.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
sender = new form1;
connect(sender,SIGNAL(entered(QString)),this,SLOT(changelabel(QString)));
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
form1 formno1;
formno1.setModal(true);
formno1.exec();
}
void MainWindow::changelabel(QString x)
{
ui->label->setText(x);
}
Form1上。 h
#ifndef FORM1_H
#define FORM1_H
#include <QDialog>
namespace Ui {
class form1;
}
class form1 : public QDialog
{
Q_OBJECT
public:
explicit form1(QWidget *parent = 0);
~form1();
private slots:
void on_pushButton_clicked();
signals:
void entered(QString);
private:
Ui::form1 *ui;
};
#endif // FORM1_H
個
form1.cpp
#include "form1.h"
#include "ui_form1.h"
form1::form1(QWidget *parent) :
QDialog(parent),
ui(new Ui::form1)
{
ui->setupUi(this);
}
form1::~form1()
{
delete ui;
}
void form1::on_pushButton_clicked()
{
QString name = ui->lineEdit->text();
emit entered(name);
this->hide();
}
非常感謝
非常感謝後寫在構造函數代碼。我現在明白了 – Ahmed 2014-11-02 13:00:56