0

我在 Qt Designer 中有两个窗口,我想用文本打开一个 .txt 文件。此代码属于第二个窗口(pacientes.ui)

pacientes.ui

我想在第一个窗口(ventana.ui)中显示三个 LineEdit 中的三行文本(文件 .txt 它有三行文本)。

主窗口

pacientes::pacientes(QWidget *parent)
: QDialog(parent),
ui(new Ui::pacientes)
{
ui->setupUi(this);
QDir path("C:/Users/Jaime/Desktop/interfaz/pacientes");
QStringList files = path.entryList(QDir::Files);

QComboBox comb;
qDebug()<<files;

ui->pacienteLista->addItems(files);
connect(this, SIGNAL( customSignalSetText(QString)), /*How I can put the variable?*/, SLOT(      customSlotSetText(QString)) ); 
}


pacientes::~pacientes()
{
   delete ui;
}

Venatana1 和 Pacientes 在 QtDesigner 中定义

我该如何解决这个错误?

4

1 回答 1

0

你应该打电话

ui->nameEdit->setText(texto); //here it is the problem
ui->diagEdit->setText(names);
ui->dateEdit->setDate(fechas);

在第一个窗口(ventana)中,但现在您在 pacientes 内调用它。因此,您必须将文件的路径从 pacientes 发送到 ventana 并在 ventana 中设置文本。

在 pacientes 你应该有这样的东西:

void pacientes::on_pacienteAceptar_clicked()
{
    QString pathToDirectory = "C://Users//Jaime//Desktop//interfaz//pacientes";
    QString currentFileName = ui->pacienteLista->currentText();
    QString pathToFile = QString("%1//%2").arg(pathToDirectory, currentFileName);
    emit customSignalSetText( pathToFile );
}

在ventana 中,您创建了一个可以完成所有工作的自定义插槽:

void ventana::customSlotSetText( QString const & text )
{
    if(!text.isEmpty())
    {
        QFile file(text);
        ...
    }
}

在您拥有 pacientes 和 ventana 的应用程序中,您可以将来自 pacientes 的自定义信号连接到 ventana 中的自定义插槽。

编辑:此信号槽连接必须发生在您可以访问 pacientes 实例和 ventana 实例的地方。

EDIT2:connect也必须发生在QObject.

int main(...)
{
    ...
    ventana1 w;
    w.show();
    pacientes pacientesObj(w);
    ...
}

在的构造函数中pacientes

pacientes::pacientes( ventana1 receiver, QWidget* parent )
{
    ...
    connect( this, SIGNAL( customSignalSetText( QString ) ), &receiver, SLOT( customSlotSetText( QString ) ) );
}

请注意,您不能在类之间连接信号和插槽,只能在这些类的实例之间连接。

至于发出信号,看这里。它可能是以下情况之一:(1)您没有使用Q_OBJECT宏或(2)您没有正确声明信号(使用signals:)。如果是第一次,您将不得不qmake再次运行。

于 2013-02-05T11:01:02.300 回答