qtCode–> C++–> 可执行程序*.out。
qmake 中间件,调用g++。 打包成可执行文件。
Edit TabOrder: 按Tab键切换: 修改输入框聚焦顺序。
输入框密码模式:EchoMode~Password
objectName 相当于改控件的id。objectName=line_name
先改变名称,再转到槽,关联回调函数。
qDebug: 输出日志到console窗口。
setGeometry(x,y, w,h); //设置控件的偏移位置。
手动编译:qmake
生成解决方案文件.pro: qmake -project 会先生成*.pro文件。
QT += widgets
生成MakeFile文件: qmake 生成MakeFile文件。
生成最终可执行程序:make
按键事件:右键-转到槽-clicked: 生成方法
void MyText::on_btn_quit_clicked() {
this->close();
}
void MyText::on_btn_login_clicked() {
QString name = ui->line_name->text();
QString pwd = ui->line_pwd->text();
if(name == pwd){
qDebug() << “登录成功” << endl;
} else {
qDebug() << “登录失败” << endl;
}
}
呈现窗体,setUi();
QString 常用操作。
- QString构造函数[*], 把数据转换为QString;
- append 字符串拼接
- arg 字符串格式化拼接,类似printf。
- chop 字符串倒位剔除,相当于删除键。
- contains 包含某个字符串
- count 字符串统计
- replacle 查找替换。
- split 分割字符串。
- toxxx(), 转换为xxx类型。
- number() number类型转QString类型。
- insert() 插入到字符串指定位置,eg:正数变负数。
0号位置插入-号,正数变成负数。
QStringList 字符数组。
加法计算器实现。
// 初始化
QString a; // 输入存储临时数据,存str格式。
QStringList b;
a.clear(); b.clear(); //清空ab
void Widget::on_pushButton1_clicked() {
a += "1"; // a+="2" a+="3" a+="4"...
ui->lineEdit->setText(a); //输入数据回显
}
void Widget::on_pushButtonAdd_clicked(){ //+按钮
b.insert(0, a); //被加数,存入到数组中。
a.clear();
b.insert(1, "+"); // 符号添加
ui->lineEdit->setText(a); // 清空输入框
}
void Widget::on_pushButtonEqual_clicked(){
if(b.count() == 2) {
b.insert(2, a); //加数添加。
if(b.at(1) == "+"){
// 获取数组中的值
int sum = QString(b.at(0)).toInt() +QString(b.at(2)).toInt();
ui->lineEdit->setText(QString::number(sum));
} //...
} else {
a.clear();
b.clear();
ui->lineEdit->setText(a);
}
}
QTimer *myTimer;
void doProcessTimeOut();
num =0; //int
myTimer = new QTimer(this);
connect(myTimer,timeout, this, doProcessTimeOut());
// 启动定时器
myTimer->start(1000);
//暂停
myTimer->stop();
void Widget::doProcessTimeOut() {
num++;
ui->progressBar->setValue(num);
}
QTextEdit 控件。
ui->textEdit->setText(“abc”);
QString msg = ui->textEdit->toPlainText();
按钮的复选框功能, setCheckable(true)
点击后,输出的值true、false交替。 否则一直输出是false值。
eg: 播放器播放暂停和播放。
toolButton, 可以设置menu. 弹出多个菜单列表。
QMenu *menu = new QMenu();
QAction *a1 =menu->addAction(QIcon(“../Image/voice.png”), “声音”,this,doProcess());
a1->setObjectName(“菜单1”); //…add More Action。
ui->toolButton->setMenu(menu);
void Widget::doProcess(){
QAction *action = (QAction *)this->sender();
qDebug() << action->objectName() <<endl;
qDebug() << action->text() <<endl;
}
多个cbox,共同触发一个事件。QCheckBox + QRadioButton
多个cbox,手动关联槽函数doProcessCheckBox()。
void Widget::doProcessCheckBox(){
QCheckBox *cbox = (QCheckBox *)this->sender();
if(cbox->isChecked() ) {
qDebug() << cbox->text() <<endl;
}
}
void Widget::doProcessRadioButton(){
QRadioButton *rbtn = (QRadioButton *)this->sender();
if(rbtn->isChecked()) {
qDebug() << rbtn->text() <<endl;
}
}
随机数函数。
猜数字游戏,太大或太小都提示。直到猜中数字了。重新开始游戏。
int num;
QString currentNum; //currentNum.clear() //清空
#include <QTime>
void Widget::Init() {
// 1.产生种子
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
// 2.产生随机数。btn1-btn9.
qdebug() << qrand() % 100 << endl;
connect(ui->btn0, SIGNAL(clicked(bool)),this,SLOT(doProcessClickNum()));
}
void Widget::doProcessClickNum() {
QPushButton* btn = (QPushButton*)this->sender();
if(btn == NULL) return;
QString text = btn->text();
QString msg;
if(currentNum.length() <1) {
currentNum.append(text); // 继续追加
}
else if(currentNum.length() ==1) {//比较
int v1 = currentNum.toInt();
if(v1 < num) {
msg.append("输入的值太小");
} else if(v1 == num) {
msg.append("猜中了");
num = qrand() % 100; //重新生成随机数,继续游戏
qDebug() <<
} else {
msg.append("输入的值太大");
}
ui->textEdit->append(msg);
currentNum.clear();
}
else {
currentNum.clear();
}
ui->textEdit->setText(currentNum);
}
实现多个窗体的切换。信号与槽。
a. 分别有1,2,3号窗口。
b. 1号窗口中,加上2号头文件,并且实例化2号的空间。
c. 在1号窗体中,绑定2号窗体发送过来的信号,并用槽取处理(显示1窗体)
d. 在1号窗体按钮上,show2窗体。
接收第二个页面的显示请求。
// oneform.h cpp
void oneform::init (){
QMovie* movie = new QMovie("/home/work/gif/a.gif");
movie->start();
ui->label->setMovie(movie);
ui->label->setScaledContents(true);
// 页面2的按钮点击事件。
click(ui->pushButton,SIGNAL(clicked(bool)),this,
SLOT(doProcessClickGoto2Form(bool)));
p_t2 = new twoform(); // 页面2:信号发送方,
// 绑定页面2的回传消息SignalShowOneForm。
connect(p_t2, SIGNAL(SignalShowOneForm(QString)),
this, SLOT(doProcessTwoFormRequest(QString)));
}
// 页面2关闭了,页面1继续显示。
void oneform::doProcessTwoFormRequest(QString str) {
this->show(); //当前页面继续显示
}
// 按钮点击事件。槽函数。
private slots:
void doProcessClickGoto2Form(bool);
private :
towform t1; // 全局变量,只有1个。
void oneform::doProcessClickGoto2Form(bool) {
// 跳转第二个页面,点击多次就有多个tf页面。
// 加上this参数,子窗体会在父窗体里面直接显示。
// towform *tf1 = new towform();
t1.show(); // 显示页面2
this->hide(); //页面1隐藏
}
// twoform.h cpp
private slots:
void doProcessBack2OneForm(bool);
signals:
void SignalShowOneForm(QString); //发送给页面1的信号。
private:
int clickCount =0; // 页面跳转计数器
void init(); // 初始化
// 根据页面2按钮发送的信号,页面1收到信号,让页面1显示。
connect(ui->pushBtn, SIGNAL(clicked(bool)),this,
SLOT(doProcessBack2OneForm(bool)));
void twoform::doProcessBack2OneForm(bool){
clickCount++;
// 发送通知信号。
emit SignalShowOneForm(QString::number(clickCount));
this->hide(); // 隐藏自己
}




