首先说明一下,我是通过在一个窗口中添加一个按钮,然后通过点击按钮显示出来,所以安装向导对话框并不是主窗口。先看看头文件里的东西吧。
#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)个人心得
前段时间刚知道头文件不能互相包含之后,每次写代码我都会告诉自己,在哪用到的东西就在哪里添加,比如我在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;//选择激活方式
这些都是在这过程中用到的东西,因为要在不同函数中用到这些按钮或者文本框,所以放在头文件中,没用的都作为局部变量了,写在这里纯粹占着茅坑不拉屎,都有注释,凑合着看,当然对应的头文件都要加上。
对于某些变量该放在哪里的问题,我们应该清楚,就是用到的就放在合适的地方,用不到的就做局部变量,因为用到的可能在很多函数里用到,所以得先想好哪些有用,哪些没有用。
布局是按水平实现排列(就像你看到的这行字一行)。
使用方法:
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按钮占一份。
和水平布局是同样的操作,不多说了,就是方向不同而已。如:
一个在上一个在下,设比例的方式也是一样的。
个人觉得这比较好用啊,具体的东西呢可以看看帮助文档。
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。