Я делаю приложение, которое сможет запрограммировать мою доску. Я хотел бы выбрать файл через диалог файла и загрузить доску с выбранным файлом кнопкой загрузки. У меня есть два класса: MyFileDialog и CommandProcess. Я подключил сигнал с нажатой кнопкой загрузки к сигнальному картографу, и я сопоставил его с слотом CommandProcess :: startProcess, который выполняет процесс с путём выбранного файла, но путь неправильный, если я не укажу его при запуске программы. Как обновить параметр сопоставления после выбора файла?QSignalMapper не обновляет параметр после выбора файла
Часть main.cpp кода:
QObject *uploadButton = mainForm->findChild<QObject*>("uploadButton");
QSignalMapper mapper;
ConsoleProcess proc;
MyFileDialog mfd;
QObject::connect(fileButton, SIGNAL(clicked()), &mfd, SLOT(openMyFileDialog()));
QObject::connect(uploadButton, SIGNAL(clicked()), &mapper, SLOT(map()));
mapper.setMapping(uploadButton, mfd.getFilename());
QObject::connect(&mapper, SIGNAL(mapped(const QString &)),&proc, SLOT(startProcess(const QString &)));
класс MyFileDialog:
public:
MyFileDialog();
QString getFilename();
private:
QFileDialog fd;
public slots:
void openMyFileDialog();
QString MyFileDialog::getFilename() {
return fd.getOpenFileName();
}
ConsoleProcess класс:
private:
QProcess p;
public:
ConsoleProcess();
public slots:
void startProcess(const QString &);
void ConsoleProcess::startProcess(const QString & path) {
p.setWorkingDirectory("C:/avrdude");
p.start("cmd.exe /C start avrdude.exe -c breakout -P ft0 -p m2560 -U flash:w:\"" + path + "\":a");
}
Вы уверены, что вам нужно это 'QSignalMapper'? Вы можете открыть fileDialog, chech, если файл существует, и вызвать 'Proc :: startProcess()' с аргументом пути к файлу –
Или другим способом - сохранить путь к закрытому файлу в членском классе 'MyFileDialog' –
Может быть полезно, должен ли я хранить путь после нажатия кнопки нажмите кнопку? – sochinho