Здравствуйте! Пытаюсь реализовать меню в отдельном классе MenuWidget::MenuWidget, не получается сделать connect.. Пожалуйста, подскажите почему при компиляции вылезает ошибка и как это исправить: QObject::connect: No such slot QMainWindow::CopyFile() in ..\untitled6\menuwidget.cpp:23
mainwindow.h
| Код | QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE
class MainWindow : public QMainWindow { Q_OBJECT
public: MainWindow(QWidget *parent = nullptr); ~MainWindow();
private: Ui::MainWindow *ui;
QPushButton* pushButton;
QString PathCopyFile;
private slots: void CopyFile(); };
|
menuwidget.h
| Код | class MenuWidget:public QMainWindow { //Q_OBJECT public: MenuWidget(QWidget *parent = 0);
void MenuFile();
private: QMenu *file; QAction *openfile; QAction *copyfile;
|
mainwindow.cpp
| Код | MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); }
MainWindow::~MainWindow() { delete ui; }
void MainWindow::CopyFile() { bool result; QStringList files = QFileDialog::getOpenFileNames(this, tr("Open file"), "C://"); QString filePathCopy = QFileDialog::getExistingDirectory(this, tr("Copy file"), "C://t");
QStringList list = files; QStringList::iterator it = list.begin(); while (it != list.end()) { QFile file (*it); QFileInfo info (file); QString fileName = info.fileName();
if (QFile::exists(filePathCopy+"/"+fileName)) { QFile::remove(filePathCopy+"/"+fileName); }
result = QFile ::copy(*it, filePathCopy+"/"+fileName); it++; } qDebug() << result; }
|
menuwidget.cpp
| Код | MenuWidget::MenuWidget(QWidget *parent) : QMainWindow(parent) { MenuFile(); }
void MenuWidget::MenuFile() { openfile = new QAction("&Open file..", this); copyfile = new QAction("&Copy file", this); file = new QMenu(); file = menuBar() -> addMenu("&File"); file -> addAction(copyfile); file ->addAction(openfile); connect(copyfile, SIGNAL(triggered()), this, SLOT(CopyFile())); }
|
main.cpp
| Код | int main(int argc, char *argv[]) { QApplication a(argc, argv); //MainWindow w; // w.show(); MenuWidget window;
window.resize(800, 550); window.setWindowTitle("Simple menu"); window.show(); return a.exec(); }
|
|