У меня есть два окна в 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
Как я могу исправить ошибку?
Вам следует позвонить
ui->nameEdit->setText(texto); //here it is the problem
ui->diagEdit->setText(names);
ui->dateEdit->setDate(fechas);
в первом окне (Вентана), но теперь вы называете это внутри 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 );
}
В Вентане вы делаете специальный слот, который выполняет всю работу:
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
снова.
Других решений пока нет …