Павел_Но проблема в том, что виртуальные функции нельзя использовать в конструкторах.
Это почему?
попробуйте вызвать виртуальную ф-цию перегруженную в конструкторе предка, но выполняющуюся в конструкторе потомка.
C++ (Qt)
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0) : QMainWindow( parent)
{
myTest();
}
virtual void myTest()
{
qWarning("void MainWindow::myTest()");
}
};
class MainWindow2 : public MainWindow
{
Q_OBJECT
public:
void myTest()
{
qWarning("void MainWindow2::myTest()");
}
};
по вашей логике - раз они работаю то при создание экземпляра MainWindow2 должно вывестись "void MainWindow2::myTest()", но выведется
"void MainWindow::myTest()" т.к. виртуальные ф-ции можно использовать в к-рах,
но они не будут работать как виртуальные - это действительно ограничение C++;
aljeshisheдумаю есть решения вашей проблемы
1) использовать отдельные ui для разных окон - в которых все Action руками расставлены по элементам меню как надо (можно использовать UILoader а можно и старым принципом)
2) сделать ф-цию
init для базового окна и в ней а не в конструкторе вызывать setupUi -а уже в наследниках вызывать этот init тогда когда удобнее для создания элементов меню