Есть QTabWidget tabs. В нем лежат виджеты вкладок, в каждой вкладке есть layout, в этом layout'e QScrollArea со своим layout'om.
И при получении конкретной вкладки в любой другой функции я пишу QWidget* tab = new tabs->widget(0). И мне нужно поместить на эту вкладку в layout QScrollArea виджеты и чтобы не писать
tab->layout()->widget->layout()->addWidget(someWidget)
я хочу перегрузить функцию layout(), чтобы для вызова
tab->layout() возвращался сразу layout внутри QScrollArea, но в QWidget функция layout() не виртуальная, поэтому при
tab->layout()
все равно возвращается первый layout в виджете вкладки.
Можно это как-нибудь обойти без
dynamic_cast<Tab*>(tab)->layout()
Если функция не виртуальная, то обычными способами ее перегрузить не получиться, но можно попробовать перекрыть ее. Унаследовать класс и в дочерний класс добавить метод с той же семантикой, он и перекроет ее. Вот пример:
#include <string>
#include <iostream>
class A
{
public:
std::string get()
{
return "A::get";
}
};
class B : public A
{
public:
std::string get()
{
return "B::get";
}
};
int main()
{
std::cout << B().get() << '\n';
}
Результат http://ideone.com/sFtqKH Но если обьект по полиморфизму станет родительским, то вызовется метод класса А
Продвижение своими сайтами как стратегия роста и независимости