Qt ошибка в moc файле

Zorroh772

0 / 0 / 1

Регистрация: 23.02.2017

Сообщений: 11

1

15.09.2019, 12:38. Показов 6403. Ответов 6

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Пытаюсь соединить сигнал со слотом. В основном выводе пишет QObject::connect: No such signal Form::sendData() in ..untitled2mainwindow.cpp:21. Через брейк поинт попал в файл новой формы moc_form.cpp и обнаружил следующие ошибки:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void Form::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
    moc_form.cpp:79:72: warning: redundant parentheses surrounding declarator
    moc_form.cpp:80:67: error: no member named 'move' in namespace 'std'
 
void *Form::qt_metacast(const char *_clname)
    moc_form.cpp:116:21: error: cannot initialize object parameter of type 'QWidget' with an expression of type 'Form'
 
int Form::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
    moc_form.cpp:121:20: error: cannot initialize object parameter of type 'QWidget' with an expression of type 'Form'
    moc_form.cpp:126:32: error: cannot initialize a parameter of type 'QObject *' with an rvalue of type 'Form *'
    moc_form.cpp:73:40: note: passing argument to parameter '_o' here
 
QString Form::sendData(QString _t1)
    moc_form.cpp:140:73: error: no member named 'addressof' in namespace 'std'
    moc_form.cpp:141:5: error: no matching function for call to 'activate'
    qobjectdefs.h:401:17: note: candidate function not viable: no known conversion from 'Form *' to 'QObject *' for 1st argument
    qobjectdefs.h:402:17: note: candidate function not viable: no known conversion from 'Form *' to 'QObject *' for 1st argument
    qobjectdefs.h:400:17: note: candidate function not viable: requires 3 arguments, but 4 were provided

Файлы главной формы (на форме listWidget и кнопка)

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include "form.h"
 
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
 
private slots:
    void recieveData(QString);
 
    void on_pushButton_clicked();
 
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}
 
MainWindow::~MainWindow()
{
    delete ui;
}
 
 
void MainWindow::on_pushButton_clicked()
{
    Form *add1 = new Form;
    add1->show();
    QObject::connect(add1, SIGNAL(sendData()), this, SLOT(recieveData(QString str)));
}
 
void MainWindow :: recieveData(QString str){
    QString lst = str;
 
    ui->listWidget->addItem(lst);
}

Файлы второй формы (на форме lineEdit и кнопка)

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// h
#ifndef FORM_H
#define FORM_H
 
#include <QWidget>
 
namespace Ui {
class Form;
}
 
class Form : public QWidget
{
    Q_OBJECT
 
public:
    explicit Form(QWidget *parent = nullptr);
    ~Form();
 
private slots:
    void on_pushButton_clicked();
 
 
signals:
    QString sendData(QString);
 
private:
    Ui::Form *ui;
};
 
#endif // FORM_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//cpp
#include "form.h"
#include "ui_form.h"
 
Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);
}
 
Form::~Form()
{
    delete ui;
}
 
void Form::on_pushButton_clicked()
{
    emit sendData(ui->lineEdit->text()); // вызываем сигнал, в котором передаём введённые данные
    close();
}

Вложения

Тип файла: 7z build-untitled2-Desktop_x86_windows_msvc2019_pe_32bit-Debug.7z (735.6 Кб, 0 просмотров)
Тип файла: 7z untitled2.7z (4.2 Кб, 0 просмотров)



0



Эксперт .NET

5490 / 4260 / 1211

Регистрация: 12.10.2013

Сообщений: 12,262

Записей в блоге: 2

15.09.2019, 13:27

2

Цитата
Сообщение от Zorroh772
Посмотреть сообщение

обнаружил следующие ошибки:

Самая главная ошибка в вашем коде — несовпадение сигнатур методов сигнала и слота. У вас метод сигнала без параметра, а метод слота с параметром. Так делать нельзя, можно наоборот — метод сигнала с параметром, а слота без параметров.

Добавлено через 10 минут
Добавлю: сам метод сигнала определен верно, а вот соединение сигнала и слота с ошибкой.



0



Zorroh772

0 / 0 / 1

Регистрация: 23.02.2017

Сообщений: 11

15.09.2019, 14:07

 [ТС]

3

Таким образом?

C++ (Qt)
1
QObject::connect(&add1, SIGNAL(sendData(QString str)), this, SLOT(recieveData()));



0



insite2012

Эксперт .NET

5490 / 4260 / 1211

Регистрация: 12.10.2013

Сообщений: 12,262

Записей в блоге: 2

15.09.2019, 14:14

4

Цитата
Сообщение от Zorroh772
Посмотреть сообщение

Таким образом?

C++ (Qt)
1
QObject::connect(&add1, SIGNAL(sendData(QString str)), this, SLOT(recieveData(QString str)));

У вас что, в IDE подсказки не работают? Обычно после написания макроса SIGNAL/SLOT IDE сама выводит список имеющихся, вам достаточно выбрать нужный.



0



Zorroh772

0 / 0 / 1

Регистрация: 23.02.2017

Сообщений: 11

15.09.2019, 16:41

 [ТС]

5

Слот сразу выводит, а сигнал не выводит

Добавлено через 2 часа 5 минут
все ошибки решились заменой сборщика. Был msvc, стал MinGW, но по прежнему не видит сигнал

C++ (Qt)
1
2
3
QObject::connect: No such signal Form::sendData(QString str) in 
QObject::connect:  (sender name:   'Form')
QObject::connect:  (receiver name: 'MainWindow')



0



_SayHello

874 / 535 / 175

Регистрация: 30.07.2015

Сообщений: 1,739

15.09.2019, 19:09

6

Zorroh772, Замени:

C++
1
2
 signals:
    QString sendData(QString);

На

C++
1
2
 signals:
    void sendData(QString);



0



Анна по жизни

284 / 173 / 62

Регистрация: 13.03.2019

Сообщений: 419

19.09.2019, 17:05

7

C++ (Qt)
1
QObject::connect(&add1, SIGNAL(sendData(QString str)), this, SLOT(recieveData(QString str)));

Убираем оба str и будет вам счастье:

C++ (Qt)
1
QObject::connect(&add1, SIGNAL(sendData(QString)), this, SLOT(recieveData(QString )));

Вообще-то, об этом в документации написано.



0



    msm.ru

    Нравится ресурс?

    Помоги проекту!

    >
    Qt (проблемы с MOC)

    • Подписаться на тему
    • Сообщить другу
    • Скачать/распечатать тему



    Сообщ.
    #1

    ,
    13.09.06, 12:57

      Member

      **

      Рейтинг (т): 0

      Привет. Есть такая программа, состоящая из трех чатей:
      1-я (main)

      ExpandedWrap disabled

        #include <qapplication.h>

        #include «Calculator.h»

        int main( int argc, char ** argv )

        {

            QApplication app( argc, argv );

            Calculator calculator;

            app.setMainWidget(&calculator);

            calculator.setCaption(«Calculator»);

            calculator.resize(230,200);

            calculator.show();

            return app.exec();

        }

      2-я (Calculator.h)

      ExpandedWrap disabled

        #ifndef _Calculator_h_

        #define _Calculator_h_

        #include <qwidget.h>

        #include <qlayout.h>

        #include <qlcdnumber.h>

        #include <qpushbutton.h>

        class Calculator : public QWidget {

            Q_OBJECT

        private:

            QLCDNumber* m_plcd;

        public:

            Calculator(QWidget* pwgt = 0, const char* pszName = 0);

            QPushButton*    createButton(const QString& str);

        //public slots:

            //void slotButtonClicked();

        };

        #endif

      3-я (Calculator.cpp)

      ExpandedWrap disabled

        #include «Calculator.h»

        Calculator::Calculator(QWidget* pwgt, const char* pszName) : QWidget(pwgt, pszName)

        {

            QGridLayout*    ptopLayout = new QGridLayout(this, 5, 4, 5, 5);

            m_plcd = new QLCDNumber(12, this);

            m_plcd->setPaletteBackgroundColor(QColor(0x6F, 0x7F, 0));

            m_plcd->setSegmentStyle(QLCDNumber::Flat);

            m_plcd->setMinimumSize(150,50);

            ptopLayout->addMultiCellWidget(m_plcd, 0, 0, 0, 3);

            ptopLayout->addWidget(createButton(«CE»), 1, 3);

            QChar   aButtons[4][4] = {  {‘7’, ‘8’, ‘9’,’/’},

                                        {‘4’, ‘5’, ‘6’, ‘*’},

                                        {‘1’, ‘2’, ‘3’, ‘-‘},

                                        {‘0’, ‘.’, ‘=’, ‘+’}

            };

            for (int i =0; i < 4; ++i) {

                for (int j = 0; j < 4; ++j) {

                    ptopLayout->addWidget(createButton(aButtons[i][j]), i + 2, j);

                }

            }

        }

        QPushButton*    Calculator::createButton(const QString& str)

        {

            QPushButton*    pcmd = new QPushButton(str, this);

            pcmd->setMinimumSize (40, 40);

            //connect(pcmd, SIGNAL(clicked()), SLOT(slotButtonClicked()));

            return pcmd;

        }

        void Calculator::slotButtonClicked()

        {

        }

      Возникает ошибка на этапе линковки в Visual Studio.NET 2003. Возникает она, когда пишешь макрос Q_OBJECT в классе в котором будут реализованы слоты.
      В чем может быть дело?


      gryz



      Сообщ.
      #2

      ,
      13.09.06, 13:18

        Member

        **

        Рейтинг (т): 14

        ЧТо за ошибка?


        sploid



        Сообщ.
        #3

        ,
        13.09.06, 13:31

          надо изменить файл *.pro что бы утилита moc заново проверила все классы и сгенерировала код, где есть макрос Q_OBJECT


          Druid



          Сообщ.
          #4

          ,
          14.09.06, 09:40

            Member

            **

            Рейтинг (т): 0

            Цитата sploid @ 13.09.06, 13:31

            надо изменить файл *.pro что бы утилита moc заново проверила все классы и сгенерировала код, где есть макрос Q_OBJECT

            А как это можно сделать?
            версия qt 3.3.6


            gryz



            Сообщ.
            #5

            ,
            14.09.06, 09:57

              Member

              **

              Рейтинг (т): 14

              Если ты работаешь Qt 3 только в 2003 студии , то нет необходимости использовать pro-файл.
              Ошибка линковки скорее всего возникает из-за того, что для твоего класса не был создан moc-файл вида moc_Calculator.cpp или он не был добавлен в проект и следовательно не компилируется.

              Как это исправить?

              Если у тебя Qt установлена «как надо», то в студии должна быть панель Qt с несколькими кнопочками. Установить ее можно используя QMsNetSetup.msi в папке Qt. Сделай в студии текущим редактируемым документом Calculator.h и нажми на кнопку со словом ‘MOC’.

              Если не поможет, сообщи, что собственно пишется в ошибке


              Druid



              Сообщ.
              #6

              ,
              14.09.06, 11:15

                Member

                **

                Рейтинг (т): 0

                Все заработало, спасибо. Интересно, а почему он сам не подхватил, что у него там слоты есть, ведь MOC должен это сам все находить?
                И еще вопрос немного не по теме, что за класс QRegExp ?


                gryz



                Сообщ.
                #7

                ,
                14.09.06, 11:26

                  Member

                  **

                  Рейтинг (т): 14

                  вообще он «подхватывает». надо только в первый раз при создании класса (после добавления макроса Q_OBJECT) нажать «MOC». (Если не глючит ничего.)
                  QRegExp — класс для работы с регулярными выражениями. Позволяет описать множество строк. Например, множество строк, заканчивающееся на «.txt».
                  У него много возможностей. см. assistant )


                  Druid



                  Сообщ.
                  #8

                  ,
                  14.09.06, 11:52

                    Member

                    **

                    Рейтинг (т): 0

                    Цитата gryz @ 14.09.06, 11:26

                    вообще он «подхватывает». надо только в первый раз при создании класса (после добавления макроса Q_OBJECT) нажать «MOC». (Если не глючит ничего.)
                    QRegExp — класс для работы с регулярными выражениями. Позволяет описать множество строк. Например, множество строк, заканчивающееся на «.txt».
                    У него много возможностей. см. assistant )

                    А в Linux Qt можно также куда-то встроить, как в Windows в Visual Studio? И там есть какая-либо альтернатива кнопки MOC, как в Visual Studio, просто у нас на работе Qt это первый шаг в сторону перехода на Linux, так что скоро возможно придется там писать )

                    А что значит последняя строка в следующем отрывке

                    ExpandedWrap disabled

                      QString str = ((QPushButton*)sender())->text();//взять текст надписи с нажатой кнопки

                      if (str.contains(QRegExp(«[0-9]»))) {}

                    ?
                    И почему на нее выскакивает ошибка «error C2440: ‘type cast’ : cannot convert from ‘const char [6]’ to ‘QRegExp'» ?
                    Я тут пытаюсь реализовать пример с книжки и он не заводится никак, уже половину всего переправил, ту половину в которой разобрался )

                    Сообщение отредактировано: Druid — 14.09.06, 11:53


                    gryz



                    Сообщ.
                    #9

                    ,
                    14.09.06, 12:26

                      Member

                      **

                      Рейтинг (т): 14

                      http://www.linuxcenter.ru/lib/books/qt3/qt3_5.phtml#HELLOQT
                      — написано как собирать проект. Сборку можно реализовать в виде batch файла, что довольно удобно. В линуксе с Qt работал мало, поэтому не занимался поиском «подходящей» среды разработки. Вроде в KDevelop что-то было из поддержки Qt.
                      Если только начинаете с Qt работать, то лучше начинать сразу с Qt 4
                      У меня приведенный тобой кусок кода компилится. Правда в 4.1.3.
                      Попробуй str.contains(QRegExp(QString(«[0-9]»)))


                      Druid



                      Сообщ.
                      #10

                      ,
                      14.09.06, 12:35

                        Member

                        **

                        Рейтинг (т): 0

                        Цитата gryz @ 14.09.06, 12:26

                        Попробуй str.contains(QRegExp(QString(«[0-9]»)))

                        error C2440: ‘type cast’ : cannot convert from ‘QString’ to ‘QRegExp’.
                        Как я понимаю, у него такого конструктора предобразования типа нет?


                        gryz



                        Сообщ.
                        #11

                        ,
                        14.09.06, 12:42

                          Member

                          **

                          Рейтинг (т): 14

                          а #include <qregexp.h> в cpp-шник добавил?


                          Druid



                          Сообщ.
                          #12

                          ,
                          14.09.06, 12:53

                            Member

                            **

                            Рейтинг (т): 0

                            Цитата gryz @ 14.09.06, 12:42

                            а #include <qregexp.h> в cpp-шник добавил?

                            Упс… )
                            в книжке не написали, а я не подумал.
                            Добавил и все заработало. Огромное спасибо

                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)

                            0 пользователей:

                            • Предыдущая тема
                            • C/C++: Общие вопросы
                            • Следующая тема

                            Рейтинг@Mail.ru

                            [ Script execution time: 0,0715 ]   [ 16 queries used ]   [ Generated: 9.06.23, 02:07 GMT ]  

                            This topic has been deleted. Only users with topic management privileges can see it.

                          • This a bit baffling to a new comer such as myself.

                            We have this fairly large application that relies on Qt for interfacing. The idea is to convert it to static for distribution (it seems some dll’s conflic with those of other tools for a shared distribution).
                            Compiling Qt (version 4.5.2 used) as static went OK, but now, when trying to build the complete tool itself (using MS Visual Studio 2005, on Windows XT) we have one of the file, internally captioned as having been generated by the User Interface Compiler (the header of the file in question PrintersDialog.cpp reads:

                            @/****************************************************************************
                            ** Form implementation generated from reading ui file ‘printersdialog.ui’
                            **
                            ** Created: Tue Mar 4 14:37:34 2008
                            ** by: The User Interface Compiler ($Id: qt/main.cpp 3.3.0b1 edited Nov 24 13:47 $)
                            **
                            ** WARNING! All changes made in this file will be lost!
                            ****************************************************************************/@

                            as can be seen, this file is already 4 year old, and there is little hope I can locate the person who triggered its generation)

                            failing to generate, the seemingly required moc_PrintersDialog.cpp is missing.

                            If one starts by building a shared version of the program, a rather tedious process since then a shared version of Qt needs to be brought on line, the moc file is created along with the other 12 that pop up; and if that moc file is then added to the source code for the static build — which does generate those other 12 moc files — then comppilation proceeds properly and we do get our executable.

                            So, the question is:

                            • what is preventing the moc_PrintersDialog.cpp file form being created, and what can we do to make sure it is generated when needed in a static build?

                            Best regards

                            CBVG

                          • That file is generated by moc, the meta object compiler, a tool bundled with Qt.

                            You can call it on the command line manually:

                            @
                            moc -o moc_file.cpp file.h
                            @

                            Or put that somewhere into your VS project.

                          • I will sure give this a try, as soon as I figure where to add the instruction, so thanks.

                            Still, that is a work around, and I wonder why «moc» does it for the other files and not that one when in static. Does this mean there must be some of those «moc» commands that are part of the VS project, one of which is controlled and inhibited by a variable that is related to the build being static?

                            Regards

                            CBVG

                          • Does the PrintersDialog.h header file have a Q_OBJECT macro in it?

                          • That is the whole file here:

                            @#ifndef PRINTERSDIALOG_H
                            #define PRINTERSDIALOG_H

                            #include <QObject>
                            #include <qdialog.h>

                            class Q3VBoxLayout;
                            class Q3HBoxLayout;
                            class QGridLayout;
                            class QSpacerItem;
                            class QPushButton;
                            class Q3ListBox;
                            class Q3ListBoxItem;
                            class QPrinter;
                            class QLineEdit;

                            class CPrintersDialog : public QDialog
                            {
                            Q_OBJECT

                            public:
                            CPrintersDialog( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, Qt::WFlags fl = 0 );
                            ~CPrintersDialog();
                            void print();

                            public slots:
                            bool getSelectedPrinterName(QString& name) {name = selectedPrinter; return printerSelected;}

                            protected:
                            Q3HBoxLayout* layout5;
                            QSpacerItem* spacer5;
                            QPushButton* okButton;
                            QPushButton* cancelButton;
                            Q3ListBox* lstPrinters;
                            QString selectedPrinter;
                            bool printerSelected;

                            protected slots:
                            virtual void languageChange();
                            virtual void printerClicked(Q3ListBoxItem* item);
                            };

                            #endif // PRINTERSDIALOG_H@

                            CBVG

                          • If you want visual studio to handle it, right click on the header file in solution explorer and select properties. In the properties dialog select under Item Type, custom build tool. Then fill in the fields as required. In the command line part, you want something like what volker suggested.

                            @»$(QTDIR)binmoc.exe» «%(FullPath)» -o «.GeneratedFiles$(ConfigurationName)moc_%(Filename).cpp «-I$(QTDIR)includeQtGui»» @

                            Or something like that but specific to your project.

                          • Ah ha!

                            Thanks to you people clues and pointers, I was able to track down something that was different in the way the build step was defined for the PrintersDialog.h file. Instead of having

                            $(InputDir)moc_$(InputName).cpp

                            for output as all the other header files associated with ‘moc’, it was missing the «$(InputDir) part when compiling a shared solution.
                            Moreover, when attempting to compile a static one, it was entirely missing its custom build step. Filling those fields allowed for the generation of the required moc file. To coin a really bad pun, making it part of the solution made it no longer part of the problem.

                            I only hope one day to be as knoweldgable as you folks so that I could eventually pay it forward. In the mean time, the fine people on this forum have my gratitude.

                            Problem solved.

                          • Glad you got your problem taken care of! Please be sure and edit the first post and change the thread title to add [Solved]. Thanks!

                          • Я кодирую проект. Я начал получать ошибки после того, как попытался сделать статическую сборку. Я внес некоторые изменения, о которых я не помню. Но, я уверен, что если этот заглушка может быть очищен, тогда основной проект также может быть очищен.

                            Это файл заголовка.

                            #ifndef MYLABEL_H
                            #define MYLABEL_H
                            
                            #include <QFileDialog>
                            #include <QLabel>
                            #include <QMouseEvent>
                            #include <QObject>
                            #include <QPaintEvent>
                            
                            class MyLabel:public QWidget
                            {
                            private:
                                QPixmap default_Pixmap;
                                QPixmap pixmap;
                                QFileDialog * fileDialog;
                                Q_OBJECT
                            public:
                                MyLabel();
                                void setPixmap(QPixmap pixmap);
                                void setDefault();
                            protected:
                                void mousePressEvent(QMouseEvent *event);
                                void paintEvent(QPaintEvent * event);
                            signals:
                                void file_Selected(QString fileName);
                            private slots:
                                void file_Got_Selected(QString fileName);
                            
                            };
                            
                            #endif // MYLABEL_H
                            

                            Вот исходный файл

                            #include "MyLabel.h"
                            #include "MyMessageBox.h"
                            #include <QFileDialog>
                            #include <QPainter>
                            
                            MyLabel::MyLabel():QWidget()
                            {
                                default_Pixmap = QPixmap("select.gif").scaled(250,100);
                                this->fileDialog=new QFileDialog(this);
                                fileDialog->setNameFilter("Image Files (*.BMP *.GIF *.JPG *.JPEG *.PNG *.PBM *.PGM *.PPM *.XBM *.XPM)");
                                connect(fileDialog,SIGNAL(fileSelected(QString)),this,SIGNAL(file_Selected(QString)));
                                connect(fileDialog,SIGNAL(fileSelected(QString)),this,SLOT(file_Got_Selected(QString)));
                            }
                            
                            void MyLabel::setPixmap(QPixmap pixmap)
                            {
                                this->pixmap = pixmap;
                            }
                            
                            void MyLabel::setDefault()
                            {
                                this->pixmap = default_Pixmap;
                            }
                            
                            void MyLabel::mousePressEvent(QMouseEvent *event)
                            {
                                fileDialog->show();
                                //QString file_Name = file_Dialog.getOpenFileName();
                            }
                            
                            void MyLabel::paintEvent(QPaintEvent * event)
                            {
                                QPainter painter(this);
                                painter.drawPixmap(0,0,width(),height(),pixmap.scaled(QSize(width(),height())));
                            }
                            
                            void MyLabel::file_Got_Selected(QString fileName)
                            {
                                this->pixmap = QPixmap(fileName);
                            }
                            
                            #include "myLabel.moc"
                            

                            И это основной файл

                            #include <QLabel>
                            #include <QPixmap>
                            #include <QtGui/QApplication>
                            #include "myLabel.h"
                            
                            int main(int argc, char *argv[])
                            {
                                QApplication a(argc, argv);
                            
                                MyLabel mm;
                                //mm.setPixmap(QPixmap("dummy.jpg"));
                                //mm.setPixmap(QPixmap());
                                mm.setDefault();
                                mm.show();
                            
                                return a.exec();
                            }
                            

                            Я создал файл moc с помощью командной строки qt и команды

                            moc myLabel.h -o myLabel.moc
                            

                            После этого я попытался скомпилировать проект через Qt-Editor. Но я получил множественную ошибку определения следующим образом:

                            debug/moc_myLabel.o:d:/TempInstallationFolder/Qt/Dynamic/qt/include/QtCore/../../src/corelib/global/qglobal.h:1381: multiple definition of `MyLabel::metaObject() const'
                            

                            debug/myLabel.o: C:Documents and SettingsprabhakaranDesktopCalendarNew-build-desktop/../CalendarNew//myLabel.moc: 57: сначала определено здесь

                            debug/moc_myLabel.o: C:Documents and Settings

                            debug/myLabel.o: C:Documents and SettingsprabhakaranDesktopCalendarNew-build-desktop/../CalendarNew//myLabel.moc: 62: сначала определено здесь

                            debug/moc_myLabel.o: C:Documents and Settings<имя_файланедействительный **)

                            debug/myLabel.o: C:Documents and SettingsprabhakaranDesktopCalendarNew-build-desktop/../CalendarNew//myLabel.moc: 70: сначала определено здесь

                            debug/moc_myLabel.o: C:Documents and Settings

                            debug/myLabel.o: C:Documents and SettingsprabhakaranDesktopCalendarNew-build-desktop/../CalendarNew//myLabel.moc: 87: сначала определено здесь

                            debug/moc_myLabel.o: moc_myLabel.cpp:(. данные + 0x0): множественное определение `MyLabel:: staticMetaObject ‘

                            debug/myLabel.o: myLabel.cpp:(. данные + 0x0): сначала определено здесь

                            collect2: ld возвращен 1 статус выхода

                            mingw32-make [1]: * [debugCalendarNew.exe] Ошибка 1

                            mingw32-make: * [debug] Ошибка 2

                            Процесс «D:/TempInstallationFolder/Qt/Dynamic/mingw/bin/mingw32-make.exe» вышел с кодом% 2.
                            Ошибка при создании проекта CalendarNew (цель: рабочий стол)
                            При выполнении шага сборки «Сделать»

                            Кто-нибудь, пожалуйста, избавь меня от этой проблемы.

                            При теневой сборке debug shared Qt 4.8.1 из исходников src получаем ошибки с отсутствием MOC файлов.

                            Примечание: возможно, что при статической теневой сборки ошибок не получаем.

                            Для debug shared сборки на самом деле ошибки ушли, когда заменили ключ компиляции -MTd на -MDd

                            MT MTd MD MDd ключи компиляции.

                            moc файлы (точнее их наименование) бывает двух видов. И может генерироваться также до двух таких файлов одновременно.

                            moc_foo.cpp из foo.h, если и только если foo.h содержит Q_OBJECT макрос.

                            foo.moc из foo.cpp, если и только если foo.cpp содержит #include «foo.moc».

                            Небольшое замечание — например при сборке статически можем получить два сообщения об ошибках, но сборка нормально продолжается и завершается. 

                            И как ни странно вроде все далее при использовании этих библиотек работает нормально.

                            tmpmocrelease_sharedmoc_qnetworkaccessmanager.cpp:93: error: C2491: ‘QNetworkAccessManager::staticMetaObjectExtraData’ : definition of dllimport static data member not allowed

                            tmpmocrelease_sharedmoc_qnetworkaccessmanager.cpp:97: error: C2491: ‘QNetworkAccessManager::staticMetaObject’ : definition of dllimport static data member not allowed

                            Не найден qftp.moc

                            Пример решения проблемы связанной с файлом qftp.moc (точнее с его отсутствием). Запускаем qmake.exe на исходниках Qt вариант release static в теневой каталог и не можем понять, почему не создается qftp.moc файл. 

                            moc файлы создает qmake.exe . Возможно помогло удаление всех tmp каталогов и Makefile.* и каталога src исходников. Возможно помолго отключение -dont-process в конфигурировании. Но факт есть факт ошибка ушла.

                            Возможно, вам также будет интересно:

                          • Qttabbar ошибка пакета установщика windows 10
                          • Qt platform plugin could be initialized ошибка как исправить
                          • Qt designer ошибка генерации кода
                          • Qt creator ошибки на русском
                          • Qt creator ошибка при сборке

                          • Понравилась статья? Поделить с друзьями:
                            0 0 голоса
                            Рейтинг статьи
                            Подписаться
                            Уведомить о
                            guest

                            0 комментариев
                            Старые
                            Новые Популярные
                            Межтекстовые Отзывы
                            Посмотреть все комментарии