gpt4 book ai didi

c++ - Qt 信号槽不工作

转载 作者:行者123 更新时间:2023-11-30 01:56:49 26 4
gpt4 key购买 nike

我想从第二个窗口更新第一个窗口中标签中的文本,其中是行编辑以写入一些文本。此文本应显示在第一个窗口中。我花了一个星期的时间。著名的连接不起作用。有人纠正了下面的代码并解释了连接应该如何工作吗?我使用 5.1.1

版本的 Qt

第一个窗口.h

#ifndef FIRSTWINDOW_H
#define FIRSTWINDOW_H

#include <QMainWindow>
#include "secondwindow.h"

namespace Ui {
class Firstwindow;
}

class Firstwindow : public QMainWindow
{
Q_OBJECT

public:
explicit Firstwindow(QWidget *parent = 0);
~Firstwindow();
public slots:
void addEntry();
private slots:
void on_pushButton_clicked();

private:
Ui::Firstwindow *ui;
Secondwindow *asecondwindow;
Secondwindow *absecondwindow;
Secondwindow *abcsecondwindow;
};

#endif // FIRSTWINDOW_H

secondwindow.h

#ifndef SECONDWINDOW_H
#define SECONDWINDOW_H

#include <QDialog>
#include <QtWidgets>

namespace Ui {
class Secondwindow;
}

class Secondwindow : public QDialog
{
Q_OBJECT

public:
explicit Secondwindow(QWidget *parent = 0);
~Secondwindow();
QLineEdit *lineEdit;

private slots:
void on_pushButton_clicked();

private:
Ui::Secondwindow *ui;
QPushButton *pushButton;
};

#endif // SECONDWINDOW_H

主要.cpp

#include "firstwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Firstwindow w;
w.show();

return a.exec();
}

第一个窗口.cpp

#include "firstwindow.h"
#include "ui_firstwindow.h"
#include <QtCore>
#include <QtGui>
#include <QtWidgets>

Firstwindow::Firstwindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Firstwindow)
{
ui->setupUi(this);
asecondwindow = new Secondwindow();
QObject::connect(asecondwindow->lineEdit,SIGNAL(textChanged()),this, SLOT(addEntry()));
}

Firstwindow::~Firstwindow()
{
delete ui;
delete asecondwindow;
delete absecondwindow;
delete abcsecondwindow;
}

void Firstwindow::on_pushButton_clicked()
{
absecondwindow = new Secondwindow;
absecondwindow->exec();

}

void Firstwindow::addEntry()
{
abcsecondwindow = new Secondwindow;

if (abcsecondwindow->exec()) {
QString name = abcsecondwindow->lineEdit->text();
ui->label->setText(name);

}
}

第二个窗口.cpp

#include "secondwindow.h"
#include "ui_secondwindow.h"
#include <QDialog>

Secondwindow::Secondwindow(QWidget *parent) :
QDialog(parent),
ui(new Ui::Secondwindow)
{
ui->setupUi(this);
}

Secondwindow::~Secondwindow()
{
delete ui;
}
void Secondwindow::on_pushButton_clicked()
{
// emit ui->lineEdit->textChanged();
QDialog::accept();
}

最佳答案

我看到以下问题:

  • QLineEdit 没有信号 textChanged()。应该改为 textChanged(const QString &)。所以你必须像这样安装你的连接:

    QObject::connect(asecondwindow->lineEdit, SIGNAL(textChanged(const QString &)), this, SLOT(addEntry(const QString &)));

    请注意,我将 Firstwindow::addEntry() 插槽更改为 Firstwindow::addEntry(const QString &) 以匹配信号的签名。

  • 我找不到您的 Secondwindow 类的 QLineEdit 成员变量的创建时间和位置。

关于c++ - Qt 信号槽不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19408062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com