2013-02-24 3 views
3

Я думаю, что я имею довольно основную проблему Qt, но я не могу понять:QStackedWidget навигации от страницы к странице

У меня есть QMainWindow, который держит QStackedWidget. Все виджеты страниц содержат отдельные классы, полученные из QWidget.

Итак:

QMainWindow реализует QStacked окно в одном классе. Все остальные страницы внутри сложного виджета - это добавленные классы, и у всех есть свои собственные .ui, заполненные кнопками и списками через Designer.

Для навигации по разным страницам, внутри MainWindow у меня есть доступ к: ui.stackedWidget->setCurrentIndex(2);

Кажется, я не имею доступ к ui.stackedWidget на другой странице внутри сложенного виджета? У меня нет доступа к ui.stackedWidget, потому что Ui является частным членом класса mainwindow. (автоматически генерируется Qt - с использованием VS-аддона для добавления классов QT4)

Я хотел бы знать, как я могу перейти на другую страницу в сложном виджетах, нажав на кнопку, принадлежащую другой странице внутри этого виджета?

Примечание:

Все страницы добавляются в StackedWidget в конструкторе MainWindow в:

ui.stackedWidget->addWidget(page1Widget); 
ui.stackedWidget->addWidget(page2Widget); 
// etc.. 

пример щелчка кнопки сигнала интервала внутри page1Widget:

connect(ui.btnViewData, SIGNAL(clicked()), this, SLOT(viewData())); 

::viewData() 
{ 
    // navigate to another page here. 
    // note: ui.stackedWidget->setCurrentIndex(3); is not accessible here! 
} 

ответ

3

Я считаю, что ввод ваши функции connect() и viewData() в вашем объекте QMainWindow решают вашу проблему, поскольку главное окно может иметь доступ как к сигналам, излучаемым дочерние виджеты и элементы QStackedWidget.

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

connect(page1Widget->getUi().btnViewData, SIGNAL(clicked()), this, SLOT(viewData))); 

надеюсь, что это помогает, веселит

+0

это на самом деле помогает держать пользовательский интерфейс рядовым в дочерних страниц и возвращая их через публичный геттер. +1, но не решает мою проблему: это также означает, что мне придется обрабатывать весь код, связанный с определенным классом (page1Widget, page2Widget, ..) в mainWindow, и поэтому мне нужно будет получить доступ ко всем другим кнопкам и виджетам в другой класс также через getter .., что очевидно сделает мой mainWindow почти все обрабатывает все, включая все представления и т. д. Я бы хотел обработать логику pageWidged в своих файлах и использовать mainWindow для навигации – PathOfNeo

+0

Я почти уверен, что есть Qt способ сделать корыто излучающий сигнал ... но я не уверен, как .. и у меня нет времени читать книгу ... все обучение осуществляется через личный проект. thx alot – PathOfNeo

+0

Уверен, что это не будет отличным решением, если у вас есть множество кнопок в виджетах, которым необходимо иметь доступ к стеку, но вы все равно можете позволить виджетам обрабатывать все остальное самостоятельно! Другое решение, о котором я думаю, состоит в том, чтобы помещать на каждой странице переменную-член, которая указывает на QStackedWidget. Вам просто нужно инициализировать его в главном окне, а затем вы можете обрабатывать все из виджетов страницы – fenouil

Смежные вопросы