Здраствуйте, у меня почему то пишет, что "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"
строка #include "main.moc"
нужна в том случае, если внутри cpp файла создаем Qt класс, и что бы moc не забыл о нем и правильно его отпроцессил.
Что делать? Самое простое - это проверить, что приведенный выше файл называется именно main.cpp. Если это не так, то переименовать текущий либо в строке #include "main.moc"
, что бы совпадало.
Второй, более правильный способ.
Создать два файла, cpp и h, и вынести в них класс ColorizeProxyModel
. Естественно, в этом случае уже не нужно добавлять #include "main.moc"
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Я ламер в программированииРешил написать программу которая будет работать с определенной программой установленной у пользователя на ПК
У меня есть обычная функция check_t_value(int T_VALUE) и слот slot_conside()
есть строка "ACGT" как сделать размещения с повторениями, чтобы получилось что-то подобное