Делаю текстовый редактор. Дошел до кнопки «Сохранить»
Есть фрагмент кода
В заголовочном файле
// ...
QPushButton *SaveButton;
private slots:
void slotSaveClicked();
В реализации (конструктор)
//...
SaveButton = new QPushButton("Сохранить");
connect(SaveButton, SIGNAL (clicked()), this, SLOT(slotSaveClicked()));
За классом. Описание слота
void MainClass::slotSaveClicked() {
QTextDocumentWriter writer;
writer.setFormat("odf");
writer.setFileName("output.odf");
writer.write(MainTextEdit->document());
}
Нужно сделать так, чтобы при нажатии на кнопку, содержимое текстового поля записывалось в файл output.odf, который создается программно.
QtGui, QTextDocumentWriter и другие заголовочные файлы поддключены. Кнопка «Сохранить» не работает. Ничего при ее нажатии не происходит.
При этом ошибок компилятор не выдает. Что добавить в код?
Проверяю так:
void MainClass::slotSaveClicked(bool slot){
slot = false;
if (slot == false) {
std::cout << "Слот вызван";
}
else {
std::cout << "Ошибка вызова слота";
}
}
Проблема очевидна:
SaveButton = new QPushButton("Сохранить");
connect(SaveButton, SIGNAL (clicked()), this, SLOT(slotSaveClicked()));
Вы указываете, что хотите соединить кнопку с слотом slotSaveClicked()
без аргументов.
Но тут же показываете свой слот, у которого сигнатура:
void MainClass::slotSaveClicked(bool slot)
Нестыкововка. Поменяйте сигнатуру своего слота на:
void MainClass::slotSaveClicked()
По поводу того что компилятор ничего не выдает: Вы использует старую систему соединения сигналов-слотов, т.е. подключение проверяется аж во время выполнения программы и скорее всего Вам в консоль выводится предупреждение, что сигнатуры не подходят. Лучше использовать более современный способ подключения, который проверяется на этапе компиляции.
connect(SaveButton, &QPushButton::clicked, this, &MainWindow::slotSaveClicked);
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Screencap на Android умеет отдавать RAW картинку, как я понимаю, это framebuffer с заголовкомКак правильно привести данные RAW к формату Bmp?
Одна программа, включающая хэдер с классами и его cpp с методами, генерирует данныеНеобходимо эти данные сохранять в БД
Не могу найти однозначного ответа на следующий вопрос