我正在学习Qt,试图制作一个简单的应用程序。我要实现的是一个简单的“欢迎”屏幕,带有两个按钮(“注册”和“登录”)。问题在于页面重定向到其他两个页面上。
另外,我已经使用QtCreator(.ui表单格式)设置了屏幕。
到目前为止,我能想到的唯一解决方案是基于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”确实一次渲染了“主页”和“注册”页面,使所有内容困惑。
因此,真正的问题是:
其次:
我正在使用带有QtCreator 3.2.1的Ubuntu 12.04。
提前致谢。
最佳答案
你做错了。您应该创建一个包含两个项目的“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,您可能看不到任何东西。
您可以使用
QWidget::hide()
方法。关于c++ - Qt-关于如何在UI窗体之间实现导航的任何指南?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26162336/