现在的位置: 首页 > 综合 > 正文

QT入门

2017年12月19日 ⁄ 综合 ⁄ 共 2752字 ⁄ 字号 评论关闭

QT += core gui widgets //引入需要用到的库

qDebug()<<"t="<<t<<QTime::currentTime();//在控制台输出当前时间

label->setStyleSheet("background:red; border-radius:25px");//设置样式表

label->setFont(QFont("宋体",20));//设置标签的字体及大小

ctrl + i 格式化代码

F4在cpp文件和h文件之间切换

signal函数和slot函数都是void类型的


wKioL1NoqHWBkTMiAABR_mkxCvc278.jpg

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include "QTimer"
#include "QLabel"
#include <QWidget>
class MainWindow : public QWidget
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
signals:
public slots:
    void slotTimeout();
private:
    QTimer timer;//定义全局变量
    QLabel *label;
    int t = 0;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "QString"
#include "QFont"
MainWindow::MainWindow(QWidget *parent) :
    QWidget(parent)
{
    this->setGeometry(200,200,600,400);
    label = new QLabel(this);//将标签添加到当前的mainwindow中
    label->setGeometry(10,10,230,20);//设置标签的位置及大小
    label->setFont(QFont("宋体",20));//设置标签的字体及大小
//    connect(&timer,SIGNAL(timeout()),this,SLOT(close()));
    connect(&timer,SIGNAL(timeout()),this,SLOT(slotTimeout()));
//信号...槽
//    t = 0;//这句注释掉,因为在mainwindow.h中已经初始化
    timer.start(10);//每10毫秒触发一次
}
void MainWindow::slotTimeout(){
    t++;
    label->setText(QString::number(t));
}

main.cpp

#include "QApplication"
//#include "QMainWindow"
#include "mainwindow.h"
int main(int argc, char *argv[]){
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

wKioL1NoqZ6iYgJnAABwFN78vQQ471.jpg

QFile::exists("/chord.wav") ? qDebug()<<"chemin ok" : qDebug()<<"chemin faux";
QString dir=QCoreApplication ::applicationDirPath();
QString filename(dir+"/chord.wav");
QSound::play ( filename );//播放声音

发出信号,现在头文件中定义

signals:
    void signalTimeToDoSth();//自定义信号在

在必要的时候发出信号

if(t == 100){
    emit signalTimeToDoSth();//发出信号
}

connect(this,SIGNAL(signalTimeToDoSth()),this,SLOT(slotTimeToDoSth()));

链接槽函数响应该信号。此处省略槽函数的具体写法。

QT用LCD方式显示时间

先在头文件定义

QLCDNumber *shizhong;
QVBoxLayout *layout;
QTimer timer1;//定义全局变量

shizhong = new QLCDNumber(this);
shizhong -> setFont(QFont("宋体",50));
shizhong-> move(420,30);
shizhong -> resize(90,40);
shizhong->setDigitCount(10);
shizhong->setMode(QLCDNumber::Dec);//十进制显示
shizhong->setSegmentStyle(QLCDNumber::Flat);//显示方式
layout = new QVBoxLayout();
layout->addWidget(shizhong);
timer1.start(1000) ;
QObject::connect(&timer1, SIGNAL(timeout()), this, SLOT(onTimerOut()));

槽函数

void MainWindow::onTimerOut()
{
    QTime time = QTime::currentTime();
    shizhong -> display(time.toString("hh:mm:ss"));
}

格式化显示时间

QString s;
QString r = s.sprintf("%02d:%02d:%02d",t/3600,t/60%60,t%60);
label->setText(r);

圆角矩形显示label

label->setStyleSheet("background:#f69; border-radius:25px");
label->setFixedSize(250, 50);

wKiom1NspQSTzvJsAAAh3XD9rL8157.jpg

小球碰撞边界检测算法

void MainWindow::slotMove()
{
    if(flagx == 0)
        x++;
    else
        x--;
    if(x + label->width() >= this->width())
    {
        flagx = 1;//It's time to move to the right derection
    }
    else if(x <= 0)
    {
        flagx = 0;//It's time to move to the left derection
    }
    if(flagy == 0)
        y++;
    else
        y--;
    if(y + label->height() >= this->height())
    {
        flagy = 1;//向上
    }
    else if(y <= 0)
    {
        flagy = 0;//向下
    }
    label->move(x,y);
}

本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1407300

【上篇】
【下篇】

抱歉!评论已关闭.