gpt4 book ai didi

c++ - Qt - 关于如何在 UI 窗体之间实现导航的任何指南?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:42:43 26 4
gpt4 key购买 nike

我现在正在学习 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”确实同时呈现了“主页”和“注册”页面,把一切都搞砸了。

所以,真正的问题是:

Is there any guideline on how to implement navigation between UI Forms?

其次:

How can I retrieve the QWidget from my UI Form and add to a QStackedWidget, without rendering it?

我正在使用带有 QtCreator 3.2.1 的 Ubuntu 12.04。提前致谢。

最佳答案

你做错了。您应该创建一个包含 2 个项目的“MainWidget”:a) QStackedWidget,b) 导航面板(您的按钮)。那么你应该将“MainWidget”设置为中央小部件。

之后,您可以将来自导航面板的信号(“已注册”或“登录”按钮的点击信号)连接到相应的插槽,这将在 QStackedWidget 上选择必要的小部件

因此,在您的情况下,您需要接下来的 3 个 ui 表单:

  1. 主窗口(QStackWidget + 2 个按钮)
  2. 登录小部件
  3. 注册微件

伪代码:

// 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,您可能什么也看不到。

How can I retrieve the QWidget from my UI Form and add to a QStackedWidget, without rendering it?

你可以使用QWidget::hide()方法。

关于c++ - Qt - 关于如何在 UI 窗体之间实现导航的任何指南?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26162336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com