Russian Qt Forum
Ноябрь 25, 2024, 18:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Invalid use of incomplete type.  (Прочитано 3836 раз)
von_Manstein
Гость
« : Август 05, 2011, 23:34 »

Доброго вечера всем.

Столкнулся с проблемой. Не могу собрать интерфейс. Ошибка простая, по-видимому, но никак найти не могу. Буду благодарен, если растолкуете. Сорцы выкладываю и скрины.

main.cpp
Код:
#include <QtGui>
#include "myinterfacemaker.h"

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    MyInterfaceMaker theInterface;
    theInterface.showFullScreen();

    return app.exec();
}

myinterfacemaker.h
Код:
#ifndef MYINTERFACEMAKER_H
#define MYINTERFACEMAKER_H

#include <QWidget>

class QLineEdit;
class QListWidget;
class QPushButton;
class QVBoxLayout;
class QGridLayout;

class MyInterfaceMaker : public QWidget
{
    Q_OBJECT

private:

QLineEdit*   pSearch;
QListWidget* pList;
QPushButton* pNew;
QPushButton* pNull1;
QPushButton* pNull2;
QPushButton* pExit;
QVBoxLayout* pMainLayer;
QGridLayout* pButtonGrid;

public:

    MyInterfaceMaker(QWidget* pwgt = 0 );

signals:

public slots:

};

myinterfacemaker.cpp
Код:
#include "myinterfacemaker.h"

MyInterfaceMaker::MyInterfaceMaker(QWidget* pwgt/*=0*/) : QWidget(pwgt)
{
    // Инициализация указателей
    pSearch = new QLineEdit;
    pList = new QListWidget;
    pNew = new QPushButton("New note");
    pNull1 = new QPushButton("*****");
    pNull2 = new QPushButton("*****");
    pExit = new QPushButton("Exit");
    pMainLayer = new QVBoxLayout;
    pButtonGrid = new QGridLayout;

    // Заполнение слоёв
    pButtonGrid->addWidget(pNew, 0, 0);
    pButtonGrid->addWidget(pNull1, 0, 1);
    pButtonGrid->addWidget(pNull2, 1, 0);
    pButtonGrid->addWidget(pExit, 1, 1);

    pMainLayer->addWidget(pSearch);
    pMainLayer->addWidget(pList);
    pMainLayer->addLayout(pButtonGrid);

    setLayout(pMainLayer);
};

И скрин с ошибкой
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Август 05, 2011, 23:44 »

#include <QtGui> не подключает автоматически QLineEdit и т.д.
Записан
von_Manstein
Гость
« Ответ #2 : Август 05, 2011, 23:45 »

Было такое предположение, тогда все заголовки подключать в хедере отдельно?
Записан
von_Manstein
Гость
« Ответ #3 : Август 05, 2011, 23:49 »

Убрал

class QLineEdit;
class QListWidget;
class QPushButton;
class QVBoxLayout;
class QGridLayout;

Написал

#include <QWidget>
#include <QLineEdit>
#include <QListWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QGridLayout>

Заработало! Может, есть более простой путь?

Спасибо!
Записан
Vass
Гость
« Ответ #4 : Август 06, 2011, 00:30 »

В хедере заголовки не надо, оставьте просто декларацию, заголовки нужны в cpp,
заголовки в хедере, увеличивают время сборки/пересборки, если в кратце
Записан
von_Manstein
Гость
« Ответ #5 : Август 06, 2011, 00:35 »

class QLineEdit;
class QListWidget;
class QPushButton;
class QVBoxLayout;
class QGridLayout; - так не работает. На скрине ошибки.

Вы предлагаете это:
#include <QWidget>
#include <QLineEdit>
#include <QListWidget>
#include <QPushButton>
#include <QVBoxLayout>
#include <QGridLayout> - переместить в cpp-файл.

В итоге получается, что я в хедере оставляю просто декларацию, а в cpp-файле подключаю недостающие заголовки и так будет правильнее, так я понял?
Записан
developer
Гость
« Ответ #6 : Август 06, 2011, 07:20 »

Да
Записан
von_Manstein
Гость
« Ответ #7 : Август 06, 2011, 07:35 »

Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.12 секунд. Запросов: 22.