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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Не могу вставить наследника QTableView в QVBoxLayout через addWidget()  (Прочитано 21961 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Август 08, 2015, 13:17 »

Что-то начал тупить, господа.

Есть у меня класс AttachTableView, являющийся наследником QTableView, а следовательно и QWidget:

Код:
class AttachTableView : public QTableView
{
  Q_OBJECT

public:
  AttachTableView(QWidget *parent=0);
  virtual ~AttachTableView();

Ссылку на экземпляр этого класса вставляю в QVBoxLayout:

Код:
  screenLayout=new QVBoxLayout();

  screenLayout->addWidget(toolsLine);
  screenLayout->addWidget( attachTableController->getView() ); // <-- Здесь ошибка

  setLayout(screenLayout);

Где метод получения ссылки на экземпляр выглядит так:

Код:
AttachTableView *AttachTableController::getView(void)
{
 return view; // Это ссылка на экземпляр вида
}


Ошибка выглядит так:

Код:
AttachTableScreen.cpp
../mytetra_develop/src/views/attachTable/AttachTableScreen.cpp: In member function 'void AttachTableScreen::assembly()':
../mytetra_develop/src/views/attachTable/AttachTableScreen.cpp:73:59: error: no matching function for call to 'QVBoxLayout::addWidget(AttachTableView*)'
   screenLayout->addWidget(attachTableController->getView());
                                                           ^
../mytetra_develop/src/views/attachTable/AttachTableScreen.cpp:73:59: note: candidate is:
In file included from C:/tools/qt/qt5.4.2/5.4/mingw491_32/include/QtWidgets/QVBoxLayout:1:0,
                 from ../mytetra_develop/src/main.h:16,
                 from ../mytetra_develop/src/views/attachTable/AttachTableScreen.cpp:1:
C:/tools/qt/qt5.4.2/5.4/mingw491_32/include/QtWidgets/qboxlayout.h:67:10: note: void QBoxLayout::addWidget(QWidget*, int, Qt::Alignment)
     void addWidget(QWidget *, int stretch = 0, Qt::Alignment alignment = 0);
          ^
C:/tools/qt/qt5.4.2/5.4/mingw491_32/include/QtWidgets/qboxlayout.h:67:10: note:   no known conversion for argument 1 from 'AttachTableView*' to 'QWidget*'

Кратко:

Код:
no known conversion for argument 1 from 'AttachTableView*' to 'QWidget*'

Раньше я такое много раз делал и прокатывало, теперь почему-то не может автоматически преобразовать тип.

Код проекта (Qt only): https://github.com/xintrea/mytetra_dev/tree/attachFiles

Коммит с проблемой: https://github.com/xintrea/mytetra_dev/commit/4b956480d13bf01845d48033a9af860ed4dc692d
« Последнее редактирование: Август 08, 2015, 16:09 от xintrea » Записан

Собираю информацию по крупицам
http://webhamster.ru
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


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

Нужно включить AttachTableView.h в AttachTableScreen.cpp, т.к. AttachTableView объявлен через forward declaration.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Август 08, 2015, 16:09 »

Нужно включить AttachTableView.h в AttachTableScreen.cpp, т.к. AttachTableView объявлен через forward declaration.

Да, в этом была проблема. Компиляция заработала, отмечаю тему как решенную.

Теперь проблема в линковке: http://www.prog.org.ru/topic_29165_0.html
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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