感觉自己花了两天时间完成了一下午的工作量,基本上都是单纯地堆代码,没有什么技术性比较强的活。
目前正在一步一步朝着GMA的样式前进。
用户的存储是在全局的位置放了std::vector<User> g_Users,下面是遍历这个vector的一种比较优雅的做法:
std::vector<User>::iterator itUserTemp; for (itUserTemp = g_Users.begin(); itUserTemp != g_Users.end(); itUserTemp++) {
//itUserTemp->GetNickname().... }
1. Register
这里的样式结构非常简单,画面整体是竖向排列的,里面再套一个横向排列用来放提示和输入框。文字输入用的是QLineEdit,下拉列表选项用的是QComboBox。
按照我的写法,Register类中需要存储一下被输入的QLineEdit的指针,还有Register的父元素MainWindow的指针,响应的槽函数放在Register中,这样响应函数可以调用MainWindow的切换界面函数。
以下为隐藏内容
QWidget* Register::ShowInformation(bool Show) { QWidget* pwBox = new QWidget(); QVBoxLayout* pvLayout = new QVBoxLayout(pwBox); pvLayout->addWidget(CreateLineInput(STR_TIP_NICKNAME, m_pleNickname, Show)); m_pleNickname->setMaxLength(20); pvLayout->addWidget(CreateLineInput(STR_TIP_PASSWORD, m_plePassword, Show)); m_plePassword->setEchoMode(QLineEdit::Password); m_plePassword->setMaxLength(40); pvLayout->addWidget(CreateLineInput(STR_TIP_PASSWORDCON, m_plePasswordCon, Show)); m_plePasswordCon->setEchoMode(QLineEdit::Password); m_plePasswordCon->setMaxLength(40); pvLayout->addWidget(CreateLineInput(STR_TIP_AGE, m_pleAge, Show)); pvLayout->addWidget(CreateGenderInput(STR_TIP_AGE, m_pleGender, Show)); return pwBox; } void Register::Init() { QVBoxLayout *pvlLayout = new QVBoxLayout(this); QLabel* plMainTitle = new QLabel(this); plMainTitle->setText(STR_MAINTITLE_REGISTER); plMainTitle->setAlignment(Qt::AlignCenter); pvlLayout->addWidget(plMainTitle, INT_SIZERATE_MAINTITAL); pvlLayout->addWidget(ShowInformation(), INT_SIZERATE_INFORMATION); QWidget* pwButton = new QWidget(this); QHBoxLayout* phlButton = new QHBoxLayout(pwButton); QPushButton* ppbRegister = new QPushButton(pwButton); ppbRegister->setText(STR_BUTTON_REGISTER); phlButton->addWidget(ppbRegister, INT_SIZERATE_BUTTON_REGISTER); pvlLayout->addWidget(pwButton, INT_SIZERATE_BUTTON); connect(ppbRegister, SIGNAL(clicked(bool)), this, SLOT(RegisterRequest())); }
2. Login
和Register非常相似,用一个User* g_pCurrentUser来指向当前的已登录用户。
3. Database
我们需要在程序开启时从数据库加载表里的用户,程序关闭时把相关数据存入数据库。
我专门写了一个Database类,初始化时传入地址、账号、密码之类的初始信息,当然为了方便你也可以把数据库写成全局的函数,初始信息写死。
每次存数据先把数据库里的表清空:TRUNCATE Users,然后再逐个用户INSERT INTO Users。取数据直接SELETE即可。
4. Leaderboard
反正只是一个大作业而已,就不打算做什么翻页地功能了,直接一个滚动条滑到底好了。
首先是一个竖直的布局,有一个MainTitle(QLabel)和一个Leaderboard(QScrollArea)。QScrollArea里面先套了一个QWidget,在这个QWidget里面放竖直布局,竖直布局里面每行是一个水平布局,存放个人信息。值得注意的是QScrollArea需要执行一下setWidgetResizable(true),否则会有显示错误……