'main.moc' file not found Qt

174
14 мая 2019, 02:20

Здраствуйте, у меня почему то пишет, что "main.moc" не найдено, а если убираю её, то пишет Symbol(s) not found for architecture x86_64. У меня ещё вариант, что "main.moc" вообще не нужен, а проблема с архитектурами не из за него. Помогите пожалуйста! Qt 5.10 mac os x clang desktop

#include <stdlib.h>
#include <QtWidgets>
#include <QtSql>
class ColorizeProxyModel: public QIdentityProxyModel {
    Q_OBJECT
public:
    explicit ColorizeProxyModel (QObject *parent = 0)
        : QIdentityProxyModel (parent), m_colorColumn (0) {}
    virtual ~ColorizeProxyModel () {}
    void setColorColum (int col) { m_colorColumn = col; }
    int colorColumn () { return m_colorColumn; }
    virtual QVariant data (const QModelIndex &id, int role = Qt::DisplayRole) const {
      if (role == Qt::BackgroundRole) {
        QModelIndex sourceIndex = mapToSource (id);
        QModelIndex colorStrIndex = sourceIndex.sibling (sourceIndex.row (), m_colorColumn);
        QString colorName = colorStrIndex.model ()->data (colorStrIndex).toString ();
        return QBrush (QColor (colorName));
      } else {
        return QIdentityProxyModel::data(id, role);
      }
    }
private:
    int m_colorColumn;
};
void queryOrDie (QString qStr, QSqlDatabase db) {
    QSqlQuery q = db.exec (qStr);
    if (q.lastError ().isValid ()) {
        qDebug () << "Query failed: " << qStr;
        qDebug () << "With error:   " << q.lastError ();
        abort();
    }
}
int main(int argc, char *argv[]) {
    QApplication a (argc, argv);
    QSqlDatabase db = QSqlDatabase::addDatabase ("QMYSQL");
    db.setDatabaseName ("test");
    bool ok = db.open ();
    if(!ok){
        qDebug() << "Connection failed!";
    }
    queryOrDie ("DROP TABLE IF EXISTS data", db);
    queryOrDie ("DROP TABLE IF EXISTS color", db);
    queryOrDie ("CREATE TABLE color ("
                "  id INT PRIMARY KEY,"
                "  name VARCHAR(64)"
                ")", db);
    queryOrDie ("CREATE TABLE data ("
                 "  id INT PRIMARY KEY AUTO_INCREMENT,"
                 "  data VARCHAR(64),"
                 "  color_id INT,"
                 "  FOREIGN KEY (color_id) REFERENCES color(id)"
                 ")", db);
    queryOrDie ("INSERT INTO color (id, name) VALUES"
                "  (0, 'cyan'), (1, 'coral'), (2, '#f12443')", db);
    queryOrDie ("INSERT INTO data (data, color_id) VALUES"
                "  ('hello world', 0), ('goodbye world', 1), ('some mash', 2)", db);
    QSqlRelationalTableModel model (0, db);
    model.setTable ("data");
    int colorCol = model.record ().indexOf ("color_id");
    model.setHeaderData (model.record ().indexOf ("id"),   Qt::Horizontal, QObject::tr ("Number"));
    model.setHeaderData (model.record ().indexOf ("data"), Qt::Horizontal, QObject::tr ("Data"));
    model.setRelation (colorCol, QSqlRelation ("color", "id", "name"));
    model.setHeaderData (colorCol, Qt::Horizontal, QObject::tr ("Color"));
    model.setEditStrategy (QSqlTableModel::OnRowChange);
    model.select ();
    ColorizeProxyModel colorModel;
    colorModel.setSourceModel (&model);
    colorModel.setColorColum (colorCol);
    QTableView *tbl = new QTableView ();
    tbl->setModel (&colorModel);
    tbl->setWindowTitle (QObject::tr ("A colorful table"));
    tbl->hideColumn (colorCol);
    tbl->show ();
    model.select ();
    return a.exec ();
}
#include "main.moc"
Answer 1

строка #include "main.moc" нужна в том случае, если внутри cpp файла создаем Qt класс, и что бы moc не забыл о нем и правильно его отпроцессил.

Что делать? Самое простое - это проверить, что приведенный выше файл называется именно main.cpp. Если это не так, то переименовать текущий либо в строке #include "main.moc", что бы совпадало.

Второй, более правильный способ.

Создать два файла, cpp и h, и вынести в них класс ColorizeProxyModel. Естественно, в этом случае уже не нужно добавлять #include "main.moc".

READ ALSO
Неопределенный путь к файлу

Неопределенный путь к файлу

Я ламер в программированииРешил написать программу которая будет работать с определенной программой установленной у пользователя на ПК

136
Проблема в слоте: ошибка: undefined reference to `check_t_value(int)&#39;

Проблема в слоте: ошибка: undefined reference to `check_t_value(int)'

У меня есть обычная функция check_t_value(int T_VALUE) и слот slot_conside()

141
размещения с повторениями для букв [закрыт]

размещения с повторениями для букв [закрыт]

есть строка "ACGT" как сделать размещения с повторениями, чтобы получилось что-то подобное

154