我在Qt Designer中有两个窗口,我想用文本打开一个文件.txt。此代码属于第二个窗口(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中定义
我该如何解决这个错误?
答案 0 :(得分: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 ) ) );
}
请注意,您无法在类之间连接信号和插槽,只能在这些类的实例之间连接。
关于发出信号,请查看here。它可能是以下之一:(1)您没有使用Q_OBJECT
宏或(2)您未正确声明信号(使用signals:
)。如果是第一个,那么您必须再次运行qmake
。