嗨,我是Qt的新手,开始学习插槽和信号。
这是我正在测试的一个小程序。 它包含两种形式(MainWindow)和(form1)。
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();
}
非常感谢
答案 0 :(得分:0)
您创建表单的绝对新实例,但您的连接仅适用于另一个实例(发件人),因此请使用发件人或与新实例建立新连接。例如,尝试下一步:
void MainWindow::on_pushButton_clicked()
{
sender->setModal(true);
sender->exec();//or show()
}
为了避免将来出现其他错误,我建议您在setupUi()