C++备忘-QT(3)

猜数字游戏

本博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/

main.cpp

/*

*猜数字游戏

*author: http://blog.csdn.net/myhaspl

*date:2015.02.25

*/

#include<QApplication>

#include"guessdialog.h"

intmain(intargc,char*argv[])

{

QApplicationapp(argc,argv);

GuessDialog*myDialog=newGuessDialog;

myDialog->show();

returnapp.exec();

}

guessnumber.cpp

/*

*猜数字类

*author: http://blog.csdn.net/myhaspl

*date:2015.02.25

*/

#include<QTime>

#include"guessnumber.h"

GuessNumber::GuessNumber(){

Init();

}

voidGuessNumber::GenerateNumber(){

m_guessnumber=qrand()%500;//产生500以内的随机数

}

intGuessNumber::GuessCompare(intguessnumber){

//返回0表示正确,正数表示大了,负数表示小了

returnguessnumber-m_guessnumber;

}

voidGuessNumber::Init(){

QTimet;

t=QTime::currentTime();

qsrand(t.msec()+t.second()*1000);//每次启动程序产生不同的初始值

GenerateNumber();

}

guessnumber.h

/*

*猜数字类

*author:http://blog.csdn.net/myhaspl

*date:2015.02.25

*/

#ifndefGUESSNUMBER_H

#defineGUESSNUMBER_H

classGuessNumber{

private:

intm_guessnumber;//电脑实际数字

voidGenerateNumber();

public:

GuessNumber();

voidInit();

int  GuessCompare(intguessnumber);

};

#endif//GUESSNUMBER_H

guessdialog.h

/*

*猜数字对话框

*author:http://blog.csdn.net/myhaspl

*date:2015.02.25

*/

#ifndefGUESSDIALOG_H

#defineGUESSDIALOG_H

#include<QDialog>

#include<QLabel>

#include<QPushButton>

#include<QLineEdit>

#include<QVBoxLayout>

#include<QHBoxLayout>

classGuessNumber;

classGuessDialog:publicQDialog

{

Q_OBJECT

public:

GuessDialog(QWidget*parent=0);

signals:

voidTryGuess(intmyNumber);

private:

QLabel*resultLb;

QLabel*messageLb;

QLineEdit*numberLe;

QPushButton*guessBt;

QPushButton*quitBt;

GuessNumber*myGuessNumber;

voidGuessInit();

privateslots:

voidGuessMyNumber();//猜数字

voidGuessIsOk(constQString&myNumber);//输入数字,可以开始猜数

voidGuess(intguessResult);

};

#endif//GUESSDIALOG_H

本博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/

guessdialog.cpp

/*

*猜数字对话框

*author:http://blog.csdn.net/myhaspl

*date:2015.02.25

*/

#include"guessdialog.h"

#include"guessnumber.h"

GuessDialog::GuessDialog(QWidget*parent):QDialog(parent){

messageLb=newQLabel(tr("请输入一个1-500以内的数字\n系统将提示猜数结果"));

numberLe=newQLineEdit;

resultLb=newQLabel(tr("猜数结果\n"));

guessBt=newQPushButton(tr("猜一下&G"));

quitBt=newQPushButton(tr("退出游戏&Q"));

numberLe->setFocus();

guessBt->setEnabled(false);

QObject::connect(numberLe,SIGNAL(textChanged(constQString&)),this,SLOT(GuessIsOk(constQString&)));

QObject::connect(guessBt,SIGNAL(clicked()),this,SLOT(GuessMyNumber()));

QObject::connect(quitBt,SIGNAL(clicked()),this,SLOT(close()));

QObject::connect(this,SIGNAL(TryGuess(int)),this,SLOT(Guess(int)));

QVBoxLayout*leftLayout=newQVBoxLayout;

leftLayout->addWidget(messageLb);

leftLayout->addWidget(numberLe);

QVBoxLayout*rightLayout=newQVBoxLayout;

rightLayout->addWidget(resultLb);

QHBoxLayout*rightdownLayout=newQHBoxLayout;

rightdownLayout->addWidget(guessBt);

rightdownLayout->addWidget(quitBt);

rightLayout->addLayout(rightdownLayout);

QHBoxLayout*mainLayout=newQHBoxLayout;

mainLayout->addLayout(leftLayout);

mainLayout->addLayout(rightLayout);

setLayout(mainLayout);

setWindowTitle(tr("猜数字"));

setFixedHeight(sizeHint().height());

myGuessNumber=newGuessNumber();//生成随机猜数类实例,构造函数中已经对随机数进行生成和种子重新赋值操作。

}

voidGuessDialog::GuessInit(){

myGuessNumber->Init();;

}

//槽函数

voidGuessDialog::GuessIsOk(constQString&myNumber){

boolisOk;

myNumber.toInt(&isOk,10);

if(!myNumber.isEmpty()&&isOk){

guessBt->setEnabled(true);

}

else{

guessBt->setEnabled(false);

}

}

voidGuessDialog::GuessMyNumber(){

QStringmyGuess=numberLe->text();

boolok;

intgsNumber=myGuess.toInt(&ok,10);

intguessResult=myGuessNumber->GuessCompare(gsNumber);

emitTryGuess(guessResult);

}

voidGuessDialog::Guess(intguessResult){

if  (guessResult==0){

resultLb->setText(tr("猜数结果:\n猜对了!游戏重新开始~"));

GuessInit();

}

elseif(guessResult>0){

resultLb->setText(tr("猜数结果:\n猜大了!"));

}

else{

resultLb->setText(tr("猜数结果:\n猜小了!"));

}

}

1、signals前面不可加public、private和protected进行修饰;slots前面可以加,因为Qt说槽函数可以当普通函数使用。

2、signals区域的函数必须是void类型,而且这些信号函数没有函数体,也就是说不可以自己定义这些信号函数,你只要声明它就够了,其它不用管,Qt内部自己弄。

3、宏定义和函数指针不能用于信号和槽的参数,信号和槽也不能有缺省参数。

时间: 2024-12-20 18:27:55

C++备忘-QT(3)的相关文章

C++备忘-QT(1)

#include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); QLabel *label=new QLabel("您好"); label->show(); return a.exec(); } main.cpp如上: 本博客所有内容是原创,如果转载请注明来源 http://blog.csdn.net/myhas

qt移植备忘

备忘qt4.8.5移植不成功,校正屏幕程序运行不正常,可能是编译qt库的工具版本过高吧,因此尝试使用相同版本的编译工具编译busybox,但是在linux2.22.6内核环境下,不能初始化控制台,因此下一步应该尝试使用版本较高的内核,但是由于内核的配置过于复杂.现在对整个系统工作的流程还不熟,先使用板子自带的验证过的版本,熟悉各个环节,以后再换用高版本的linux内核进行qt移植.

Linux XAMPP FAQ 留在这里做备忘

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;}

RxJava & RxAndroid备忘

"你问我要去向何方,我指着大海的方向" 今天在刷G+的时候看到Dave Smith推荐了一个视频 <Learning RxJava (for Android) by example> 点进去看了一下,原来是位熟悉的"阿三哥",视频封面如下:(没有歧视的意思,不要喷我啊~,为什么感到熟悉?接着往下看) 几乎同时也看到了JetBrains在G+也推荐了篇在Medium上的博文 <RxAndroid And Kotlin (Part 1)> ,然后

工作备忘:cacti&nagios登录密码修改方法

[[email protected]]# mysql -u root -p mysql> use cacti; mysql> select * from user_auth; mysql> update user_auth set password=md5("cactipasswd") where id='1'; 现在cacti登录的新密码就是cactipasswd [[email protected]]# /usr/bin/htpasswd /usr/local/n

备忘-linux文件系统结构

用apache的时候总是要进入/var/www, 用久了开始好奇这些个目录都是派什么用处的,简单整理了一下 /bin 存放二进制命令文件,这个目录下面不允许存在子目录/boot bootloader的静态文件,当然OS的文件也必须在这里/dev 设备文件,MAKEDEV命令可以创建设备/etc 特定主机的配置文件,必须是静态文件,非可执行文件: opt, X11, sgml, xml/home 用户目录 /lib 存放主要的共享库和核心模块/media 可移除媒体的挂载点: floppy, cd

[转]Windows环境下尝试安装并配置PHP PEAR备忘

转自:http://wangye.org/blog/archives/266/ 什么是PEAR 来自百度百科:PEAR 是PHP扩展与应用库(the PHP Extension and Application Repository)的缩写.它是一个PHP扩展及应用的一个代码仓库,简单地说,PEAR之于PHP就像是CPAN(Comprehensive Perl Archive Network)之于Perl. 由此可见PEAR是PHP代码的仓库,在这里可以找到很多有用的代码,避免我们重复写一些功能,

Table view 备忘

Table view 备忘 本篇会以备忘为主,主要是一些基础的代理方法和数据源方法具体的优化好点子会后续跟上. Table view的数据源方法 必须实现的数据源方法 // 返回每一行的cell,可以做缓存处理,同样也可能会造成复用问题. func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // tableview 和 cell 都是在s

oracle下 启动subversion命令 及 oracle相关服务启动备忘

linux shell下  svnserve - d -r + 目录   例如:svnserve -d -r /svn 启动 svn服务. 访问svn://192.168.0.120/kjcg 测试. 启动oracle: 一.如何启动数据库实例 1.进入到sqlplus启动实例 [[email protected] ~]$ su - oracle --“切换到oracle用户” 2. Password: [[email protected] ~]$ lsnrctl start  --“打开监听”