我现在正在学习Qt,尝试制作一个简单的应用程序。我试图实施的是一个简单的欢迎'屏幕,有两个按钮('注册'和'登录')。问题是页面重定向到其他两个页面。
另外,我已经使用QtCreator(以.ui Forms格式)设置了屏幕。 到目前为止,我能想出的唯一解决方案是基于Qt本身的一个示例,该示例使用 QStackedWidget ,将 QWidget 添加为页面。问题是示例中的那些页面是以编程方式安装的(我想使用我拥有的表单)。
如果我试试这个:
MainWindow::MainWindow() :
ui_home(new Ui::HomeView),
ui_register(new Ui::RegisterView) {
ui_home->setupUi(this);
ui_register->setupUi(this);
pagesWidget = new QStackedWidget;
pagesWidget->addWidget(ui_home->centralWidget);
pagesWidget->addWidget(ui_register->centralWidget);
...
}
它的作品'但结果太可怕了。 ' centralWidget'从我的表单添加到' pagesWidget',但是' setupUi'在此之前真正呈现了家庭'和'注册'一下子就把所有页面弄乱了。
所以,真正的问题是:
是否有关于如何在UI表单之间实现导航的指南?
其次:
如何从我的UI窗体中检索QWidget并添加到QStackedWidget,而不进行渲染?
我正在使用Ubuntu 12.04,使用QtCreator 3.2.1。 提前谢谢。
答案 0 :(得分:2)
你做错了。您应该创建一个包含2个项目的“MainWidget”:a)QStackedWidget
,b)导航面板(您的按钮)。然后你应该将“MainWidget”设置为一个中心小部件。
之后,您可以将来自导航面板的信号(点击“注册”或“登录”按钮的信号)连接到相应的插槽,这将在QStackedWidget
上选择必要的小部件
因此,在您的情况下,您需要接下来的3个ui表单:
伪代码:
// RegisterWidget.cpp + you should have RegisterWidget.ui
RegisterWidget::RegisterWidget()
: public QWidget(NULL)
, ui( new Ui::RegisterWidget() )
{}
// LoginWidget.cpp + you should have LoginWidget.ui
LoginWidget::LoginWidget()
: public QWidget(NULL)
, ui( new Ui::LoginWidget() )
{}
// MainWindow.cpp + you should have MainWindow.ui
MainWindow::MainWindow()
: public QMainWindow()
, ui( new Ui::MainWindow() )
{
ui->setupUi(this);
// !!!!!!!!!!!!!!!!!!!
// Creating widgets here.
// Possible - setup communication between widgets with signals / slots
// !!!!!!!!!!!!!!!!!!!
m_loginForm = new LoginWidget();
m_regForm = new RegisterWidget();
ui->stackedWidget->addWidget( m_loginForm );
ui->stackedWidget->addWidget( m_regForm );
connect( ui->loginBtn, &QPushButton::clicked, this, &MainWindow::onLogin );
connect( ui->regBtn, &QPushButton::clicked, this, &MainWindow::onReg );
}
// private slots:
void MainWindow::onLogin()
{
ui->stackedWidget->setCurrentWidget( m_loginForm );
}
void MainWindow::onReg()
{
ui->stackedWidget->setCurrentWidget( m_regForm );
}
不要忘记布局。因为如果您的小部件的大小为1x1px,您可能看不到任何内容。
如何从我的UI窗体中检索QWidget并添加到QStackedWidget,而不进行渲染?
您可以使用QWidget::hide()
方法。