ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

第9篇 Qt实现安装向导对话框之代码布局篇(二)

2021-07-19 22:57:52  阅读:380  来源: 互联网

标签:头文件 Qt 对话框 int void 布局 向导 按钮 include


第9篇 Qt实现安装向导对话框之代码布局篇(二)

1.头文件

首先说明一下,我是通过在一个窗口中添加一个按钮,然后通过点击按钮显示出来,所以安装向导对话框并不是主窗口。先看看头文件里的东西吧。

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QWizard>
#include <QCheckBox>
#include <QLineEdit>
#include <QProgressBar>
#include <QTextEdit>
#include <QComboBox>
#include <QListWidget>
#include <QStackedWidget>

QT_BEGIN_NAMESPACE
namespace Ui {
    class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

public slots:
    void setupWizard_show();//显示安装向导界面
    void changeNextbutton();//改变下一步按钮牛的点击性
    void chooseLocation();//选择安装路径
    void changeActivation(int index);//改变激活方式
    void changePage(int id);//页面更换
private:
    Ui::Widget *ui;
    QPushButton* beginbutton;//点击显示安装向导界面
    QWizard* setupWizard;//安装向导界面
    QWizardPage* page_one;//第一页
    QWizardPage* page_two;//第二页
    QWizardPage* page_three;//第三页
    QWizardPage* page_four;//第四页

    QCheckBox *agree;//勾选则下一步可点击,否则下一步不可点击
    QLineEdit* location;//安装路径显示
    QProgressBar* progress;//安装进度条
    QTextEdit* filelist;//安装文件列表
    QComboBox* activation_mode;//选择激活方式

    QStackedWidget* activate_widget;//激活界面
    QListWidget* enter_widget;//登录界面
    QListWidget* serialnumber_widget;//序列号界面

    int progress_value = 0;

public:
    void createPage_one();
    void createPage_two();
    void createPage_three();
    void createPage_four();
    void findFile(QString filepath);
};
#endif // WIDGET_H

1.1.加入头文件说明

(1)个人心得
前段时间刚知道头文件不能互相包含之后,每次写代码我都会告诉自己,在哪用到的东西就在哪里添加,比如我在cpp文件里才会用到的东西,我不会在.h文件里加,我觉得这挺好的,比如我们写了两个类A和B,A的cpp文件中需要用到B的东西,那么我以前会把B的.h文件加到A中,这时如果B也需要A的,那就不能按照同样方法添加了,系统会报错的。所以在那用到在哪加头文件。
(2)变量说明
槽函数和相关的创建或者其他函数不用说,看名字就知道干嘛了,重点说明一下变量。

QPushButton* beginbutton;//点击显示安装向导界面
    QWizard* setupWizard;//安装向导界面
    QWizardPage* page_one;//第一页
    QWizardPage* page_two;//第二页
    QWizardPage* page_three;//第三页
    QWizardPage* page_four;//第四页

第一个就是主窗口的一个按钮,点击就进入安装向导对话框创建函数,并显示出来。
第二个就是主角,如果不给它添加任何页面的话,它本身就有一个页面的,可以测试测试。但添加页面之后,添加的第一个页面就是它刚显示出来的第一个页面,本来存在的那个页面就没有了。
剩下的很明了,就是要加到向导对话框的页面。

QCheckBox *agree;//勾选则下一步可点击,否则下一步不可点击
    QLineEdit* location;//安装路径显示
    QProgressBar* progress;//安装进度条
    QTextEdit* filelist;//安装文件列表
    QComboBox* activation_mode;//选择激活方式

这些都是在这过程中用到的东西,因为要在不同函数中用到这些按钮或者文本框,所以放在头文件中,没用的都作为局部变量了,写在这里纯粹占着茅坑不拉屎,都有注释,凑合着看,当然对应的头文件都要加上。
对于某些变量该放在哪里的问题,我们应该清楚,就是用到的就放在合适的地方,用不到的就做局部变量,因为用到的可能在很多函数里用到,所以得先想好哪些有用,哪些没有用。

2.简单的布局方式简说

2.1.水平布局QHBoxLayout

布局是按水平实现排列(就像你看到的这行字一行)。
使用方法:

QGroupBox* user = new QGroupBox("用户");
    QHBoxLayout* hlayout = new QHBoxLayout;
    QRadioButton* active_user = new QRadioButton("当前用户");
    QRadioButton* all_users = new QRadioButton("所有用户");
    hlayout->addWidget(active_user);
    hlayout->addWidget(all_users);
    user->setLayout(hlayout);

用户user是一个盒子,可以往里面加东西,当然也是一个小页面,我们可以为它添加布局方式。
布局时可以设置按钮所占位置的比例,以上添加后两个按钮占比是1:1的。在这里插入图片描述

    hlayout->addWidget(active_user,1);
    hlayout->addWidget(all_users,2);

如果我们这样添加,那么就是1:2,all_users按钮占两份,active_user按钮占一份。

2.2.垂直布局QVBoxLayout

和水平布局是同样的操作,不多说了,就是方向不同而已。如:
在这里插入图片描述
一个在上一个在下,设比例的方式也是一样的。

2.3.网格布局(栅格布局)QGridLayout

个人觉得这比较好用啊,具体的东西呢可以看看帮助文档。

void 
addWidget(QWidget *widget, int row, int column, Qt::Alignment alignment = Qt::Alignment())
void 
addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

一般就用到这两个函数,而且不需要填那么多参数,比如第一个就这样用:

void addWidget(QWidget *widget, int row, int column)

第一个参数是你要加入的按钮,第二个是在哪行,第三个是在哪列。

void addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan,)

这个后两个参数是用来设置比例的,比如跨多少行,多少列,都可以设置。
具体的实战一下就明白了。
OK。

标签:头文件,Qt,对话框,int,void,布局,向导,按钮,include
来源: https://blog.csdn.net/weixin_49188222/article/details/118915456

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有