Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: PavelVX от Ноябрь 26, 2010, 09:22



Название: Не собирается простенький проект
Отправлено: PavelVX от Ноябрь 26, 2010, 09:22
Даже и не знаю, вопрос по Qt или C.
Win7, Qt4.7, QtCreator.
1. Создаю новый проект(D:\qt4_test\test_delegate2).
2. В папке с новым проектом создаю D:\qt4_test\test_delegate2\delegate.h

#ifndef DELEGATE_H
#define DELEGATE_H
class SpinBoxDelegate : public QItemDelegate
 {
     Q_OBJECT
 public:
     SpinBoxDelegate(QObject *parent = 0);
};

#endif // DELEGATE_H
3. В mainwindow.cpp
#include "mainwindow.h"
#include "delegate.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

4. Собираю приложение и оно не собирается, ошибка:
In file included from mainwindow.cpp:2:
delegate.h:5: error: expected class-name before '{' token
Уже и в инете порылся, не могу понять, в чем подвох. %(


Название: Re: Не собирается простенький проект
Отправлено: UVV от Ноябрь 26, 2010, 09:24
Вероятно в том, что компилятор не знает, что такое QItemDelegate


Название: Re: Не собирается простенький проект
Отправлено: BRE от Ноябрь 26, 2010, 09:24
Код
C++ (Qt)
#ifndef DELEGATE_H
#define DELEGATE_H
 
#include <QItemDelegate>
 
class SpinBoxDelegate : public QItemDelegate
{
    Q_OBJECT
public:
    SpinBoxDelegate(QObject *parent = 0);
};
 
#endif // DELEGATE_H
 


Название: Re: Не собирается простенький проект
Отправлено: crossly от Ноябрь 26, 2010, 10:57
тут не в нете рыться надо ... а учебнике по с++


Название: Re: Не собирается простенький проект
Отправлено: PavelVX от Ноябрь 26, 2010, 11:49
Спасибо!!! Так и было. Вот только непонятно, почему оно именно так ругалось??? (понять откуда ноги растут было сложно. ну или отсутствие опыта сказывается :( )
Дальше наворачиваю этот проект:
delegate.h
#ifndef DELEGATE_H
#define DELEGATE_H
#include <QItemDelegate>
#include <QSpinBox>

class SpinBoxDelegate : public QItemDelegate
 {
     Q_OBJECT

 public:
     SpinBoxDelegate(QObject *parent = 0);

     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                           const QModelIndex &index) const;

     void setEditorData(QWidget *editor, const QModelIndex &index) const;
     void setModelData(QWidget *editor, QAbstractItemModel *model,
                       const QModelIndex &index) const;

     void updateEditorGeometry(QWidget *editor,
         const QStyleOptionViewItem &option, const QModelIndex &index) const;
 };

#endif // DELEGATE_H

mainwindow.cpp
#include "mainwindow.h"
#include "delegate.h"
#include "ui_mainwindow.h"
#include <QtDebug>
#include <QtGui>
#include <QtSql/QSqlDatabase>
#include <QSqlQueryModel>
#include <QSqlError>
#include <QTableView>
#include <QSqlRelation>
#include <QSqlRelationalDelegate>
#include <QMessageBox>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
/*установка codecs*/
/*тут идет блок коннекта*/

    QSqlRelationalTableModel * albumsRelation = new QSqlRelationalTableModel(0);
    albumsRelation->setTable("public.albums");
    albumsRelation->setRelation(1, QSqlRelation("public.vw_polu1", "KODPL", "naim"));
    albumsRelation->select();
    albumsRelation->setEditStrategy(QSqlTableModel::OnRowChange);

    QTableView * view = new QTableView(0);
    view->setModel(albumsRelation);
    view->setColumnHidden(0, true);
    view->setWindowTitle(QObject::trUtf8("¦Р¦¬TМ¦-¦-¦-TЛ"));
    SpinBoxDelegate * delegate = new SpinBoxDelegate(this);
    view->setItemDelegate(delegate);
    view->show();
}
выпадает с ошибкой:
D:\qt4_test\test_delegate2/mainwindow.cpp:46: undefined reference to `SpinBoxDelegate::SpinBoxDelegate(QObject*)'
Хотя вроде как делаю как в примере.
И такой вопрос: а как прога определяет к какому столбцу прикручивать этого делегата? У меня же там может быть несколько связей.