zoukankan      html  css  js  c++  java
  • [QT]QStackedWidget学习使用 可用于多界面

    2017-04-11 01:52:01

    根据大牛一去、二三里的教程提示,成功将多个对话框进行切换。

    学习教程地址:http://blog.csdn.net/liang19890820/article/details/51614346

    结果展示:

    1.新建一个带ui界面的QWidgetApplication。

    2.创建三个dialog;dialog1,dialog2,dialog3,(添加新文件之后选择QT中的界面类)

    分别在对应对话框的qtDesigner中的样式表进行color设置背景色设置:

    dialog1:background-color: rgb(85, 170, 255);

    dialog2:background-color: rgb(85, 85, 255);

    dialog3:background-color: rgb(85, 85, 127);

    3.撸代码开始:

    ① main.cpp 不需要修改。

    ② mainwindow.h 中添加

     

    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    
    #include <QMainWindow>
    
    class QStackedWidget;
    
    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
        Q_OBJECT
    
    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        void switchPage();
    private:
        Ui::MainWindow *ui;
        QStackedWidget *m_pStackedWidget;
    
    };
    
    #endif // MAINWINDOW_H
    mainwindow.h

    ③ mainwindow.cpp中添加

     

    #include <QtWidgets>
    
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    
    #include "dialog1.h"
    #include "dialog2.h"
    #include "dialog3.h"
    
    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
    //    QPushButton *pButton = new QPushButton(this);
    //    QLabel *pFirstPage= new QLabel(this);
    //    QLabel *pSecondPage = new QLabel(this);
    //    QLabel *pThirdPage = new QLabel(this);
    //    m_pStackedWidget = new QStackedWidget(this);
    
    //    pButton->setText(QStringLiteral("点击切换"));
    //    pFirstPage->setText(QStringLiteral("一去丶二三里"));
    //    pSecondPage->setText(QStringLiteral("青春不老,奋斗不止!"));
    //    pThirdPage->setText(QStringLiteral("纯正开源之美,有趣、好玩、靠谱。。。"));
    
    //    pFirstPage->move(10,100);
    //    pSecondPage->move(10,100);
    //    pThirdPage->move(10,100);
    //    pButton->move(10,100);
    //    // 添加页面(用于切换)
    //    m_pStackedWidget->addWidget(pFirstPage);
    //    m_pStackedWidget->addWidget(pSecondPage);
    //    m_pStackedWidget->addWidget(pThirdPage);
    
    //    m_pStackedWidget->move(10,200);
    
    ////    QVBoxLayout *pLayout = new QVBoxLayout();
    ////    pLayout->addWidget(pButton, 1, Qt::AlignRight | Qt::AlignVCenter);
    ////    pLayout->addWidget(m_pStackedWidget);
    ////    pLayout->setSpacing(10);
    ////    pLayout->setContentsMargins(10, 10, 10, 10);
    ////    setLayout(pLayout);
    
    //    // 连接切换按钮信号与槽
    //    connect(pButton, &QPushButton::clicked, this, &MainWindow::switchPage);
    
        QPushButton *pButton = new QPushButton(this);
        m_pStackedWidget = new QStackedWidget(this);
    
        pButton->setText(QStringLiteral("点击切换"));
        Dialog1 *dlg1 = new Dialog1(this);
        Dialog2 *dlg2 = new Dialog2(this);
        Dialog3 *dlg3 = new Dialog3(this);
        // 添加页面(用于切换)
        m_pStackedWidget->addWidget(dlg1);
        m_pStackedWidget->addWidget(dlg2);
        m_pStackedWidget->addWidget(dlg3);
        m_pStackedWidget->move(10,50);
        m_pStackedWidget->resize(200,200);
    
        connect(pButton,&QPushButton::clicked,this,&MainWindow::switchPage);
    
    }
    
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    void MainWindow::switchPage()
    {
        int count = m_pStackedWidget->count();
        int index = m_pStackedWidget->currentIndex();
        ++index;
        if(index >= count)
        {
            index = 0;
        }
        m_pStackedWidget->setCurrentIndex(index);
    }
    mainwindow.cpp

     其中代码注释的部分是教程中的代码。

    总结:

    1.QStackedWidget需要设置大小和位置,初始的大小比较小,猜想可以使用布局设计器设置大小,这个需要以后验证,有人验证的话麻烦请留言告知谢谢。

    2.用QStackedWidget进行界面设计感觉比较适合目前雨大的情况,还有其他方式实现多界面切换,请见:http://bbs.csdn.net/topics/350099102;

    如果问题解决起来不妥或者有更好的解决办法,麻烦请告知,帮助曾经和你一样的入门者,谢谢。
  • 相关阅读:
    ES6变量的解构赋值、字符串的新增方法
    JavaScript的基础语法及DOM元素和事件
    ES 新特性、异步、TypeScript
    JS实现PC端URL跳转到对应移动端URL
    jquery版本过低安全漏洞问题
    重磅!华为云社区·CSDN【寻找黑马程序员】有奖征文活动奖项公布!!
    车标知识学习网页开发,与Flask通过base64展示二进制图片 #华为云·寻找黑马程序员#
    大型情感剧集Selenium:3_元素定位 #华为云·寻找黑马程序员#
    大型情感剧集Selenium:2_options设置 #华为云·寻找黑马程序员#
    【nodejs原理&源码赏析(9)】用node-ssh实现轻量级自动化部署
  • 原文地址:https://www.cnblogs.com/ourran/p/6691769.html
Copyright © 2011-2022 走看看