Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Август 08, 2015, 13:17



Название: [Решено] Не могу вставить наследника QTableView в QVBoxLayout через addWidget()
Отправлено: xintrea от Август 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


Название: Re: Не могу вставить наследника QTableView в QVBoxLayout через addWidget()
Отправлено: Alex Custov от Август 08, 2015, 13:23
Нужно включить AttachTableView.h в AttachTableScreen.cpp, т.к. AttachTableView объявлен через forward declaration.


Название: Re: Не могу вставить наследника QTableView в QVBoxLayout через addWidget()
Отправлено: xintrea от Август 08, 2015, 16:09
Нужно включить AttachTableView.h в AttachTableScreen.cpp, т.к. AttachTableView объявлен через forward declaration.

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

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