Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Подключение к слоту из другого класса


Автор: Vish7 22.9.2020, 22:19
Здравствуйте! 
Пытаюсь реализовать меню в отдельном классе 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();
}


Автор: baldman88 30.9.2020, 16:32
Что-то мне кажется, что CopyFile должен быть public slot, а не private slot.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)