관리 메뉴

Value Creator의 IT(프로그래밍 / 전자제품)

#2 QT Creator 예제 및 유용한 사이트 모음 본문

1. 프로그래밍/3) QT

#2 QT Creator 예제 및 유용한 사이트 모음

valuecreatort 2019. 4. 8. 19:13
반응형

아몰랑 유튜브에서 보고싶다

->https://www.youtube.com/watch?v=tHzPBCUi0G8&list=PLumkkj1MBmYs-WArrEkw2R6wO9Agj3FoX

 

 

 

외국 형들의 숨결을 느끼고 싶다

https://wiki.qt.io/Qt_for_Beginners

 

Qt for Beginners - Qt Wiki

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh Warning : Be sure to have some knowledge of C++ before starting! Remark : This tutorial series target mainly Qt4. Even if most of these tutorials are also valid for Qt5, the case of

wiki.qt.io

한국의 매운맛을 보고 싶다

https://wiki.ubuntu-kr.org/index.php/GUI(QT)_Programming

 

GUI(QT) Programming - 깊이있는 삽질 Ubuntu Korea Community Wiki

깊이있는 삽질 Ubuntu Korea Community Wiki QT란 무엇인가?[편집] 리눅스나 유닉스에서 X-Window용 프로그램을 개발하려면 많은 지식이 필요하다. 다음과 같은 특징이 있다. C++ 기반 - 고급 언어들에 비해 어느정도 속도도 나오고, C에 비하면 좀더 모듈화가 되어 있어 확장이 용이 객체지향 - 라이브러리들이 모듈화가 잘 되어 있음 멀티플랫폼 - 다양한 플랫폼을 지원하고, 플랫폼이 바뀐다고 해서 전체를 싹 갈아엎지 않아도 된다.

wiki.ubuntu-kr.org

 

 

 

아래는 QT 프로그래밍 간단한 예제이다.

사진 그대로 따라하면 된다.

 

1) New Project를 누른다.

 

 

2) 위젯 선택 후 넥스트를 누른다.

 

 

3 ) 넥스트 누른다.

 

4) "베이스 클래스" 를 "큐 다이얼로그"로 바꾼다.

 

5) 넥스트 누른다.

 

 

6) "폼스"의 "다이얼로그.유아이"를 누른다.

 

7) "인풋 위젯"의 "라인 에디트"를 넣는다. "버튼스"의 "푸시버튼"도 넣어줄수있다.

 

 

 

 

8) 우측 하단에 텍스트 이름 바꾸기가 있다.

푸시 버튼 우클릭 후에 "고 투 슬롯"을 선택하면 아래와 같이 클릭 후 이벤트 같은 것을 설정할 수 있다.

 

 

 

9) 세이 헬로우 버튼에서 고 투 슬롯 후 클릭드 버튼을 눌렀을 때 아래와 같이 소스코드로 넘어온다.

ui->lineEdit->setText("Hello World");를 넣어준다.

그리고 Ctrl+R을 누르든지 "Build" 매뉴에 "Run"을 실행해보자.

실행된 ui 에서 SayHello 버튼을 눌러보자.

그러면 ui의 라인 에디트 화면에 Hello World가 나타날 것이다.

 

10) 실행 결과

Delete 버튼의 코드

ui->lineEdit->setText("");

 

EndGame 버튼의 코드

this.close();

 

11) 최종 소스코드 및 실행 결과

*추가된 부분만 노란색으로 표시함.

 

*Headers -> dialog.h의 소스코드

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include <QDebug>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

private:
    Ui::Dialog *ui;
    int data;

    int dataint;
    double datadou;
    bool databoo;
    QString datastr;
};

#endif // DIALOG_H

 

 

*Sources -> dialog.cpp의 소스코드

 

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
    data = 100;
    qDebug() << data;
    data = 200;
    qDebug() << data;

 

    dataint = 32767;
    qDebug() << dataint;

    datadou = 32.767;
    qDebug() << datadou;

    databoo = true;
    qDebug() << databoo;

    datastr = "OK!";
    qDebug() << datastr;
}
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_pushButton_clicked()
{
    ui->lineEdit->setText("Hello World");
}

void Dialog::on_pushButton_2_clicked()
{
    ui->lineEdit->setText("");
}

void Dialog::on_pushButton_3_clicked()
{
    this->close();
}

 

void Dialog::on_pushButton_4_clicked()
{
    //int data; ->dialog.h에 선언되어 있음 -> 모듈변수로 선언되었다.
    data = 100;
    qDebug() << data;
}

 

가능한 타입

정수, 실수, 논리형, 문자열

 

  1. 프로시져 변수 - 프로시져(중괄호{}) 내부에 선언된 변수. 프로시져 안에서만 쓸 수 있다. 보통 지역변수라고들 많이 이야기한다.
  2. 모듈 변수 - 모듈(파일) 내부에 선언된 변수. 그 파일 안에서만 쓸 수 있다.
  3. 전역 변수 - 헤더파일에 Public으로 선언한 변수. 다른 모듈에서도 갖다 쓸 수 있다.
  4. 정적 변수 - 프로시져 내부에 Static으로 선언하는 변수. 프로시져가 종료되어도 값을 유지한다.

 

연산자
다음과 같이 연산자를 사용할 수 있다.
int data1;
int data2;
 
data1 = 10;
data2 = 3;
 
// 산술 연산
qDebug() << "data1 + data2 = " << data1 + data2;
qDebug() << "data1 - data2 = " << data1 - data2;
qDebug() << "data1 * data2 = " << data1 * data2;
qDebug() << "data1 / data2 = " << data1 / data2;
qDebug() << "data1 % data2 = " << data1 % data2;
 
// 논리 연산
qDebug() << QString("(data1 < 11) && (data2 > 2) = %1").arg((data1 < 11) && (data2 > 2));
qDebug() << QString("(data1 < 11) || (data2 < 2) = %1").arg((data1 < 11) || (data2 < 2));
qDebug() << QString("!(data1 < 11) = %1").arg(!(data1 < 11));
조건문
Youtube : https://www.youtube.com/watch?v=b-mylI0gTY8
if는 다음과 같이 사용할 수 있습니다.
if(조건식) { 명령문; }
1개의 조건문 예시
int jumsu;
 
jumsu = 50;
 
if(jumsu < 60)
{
qDebug() << "낙제입니다";
qDebug() << "재수강 신청하세요";
qDebug() << "마감일은 12월 20일입니다";
}
else
{
qDebug() << "낙제가 아닙니다";
qDebug() << "재수강 신청하지 마세요";
qDebug() << "마감일 신경쓰지 마세요";
}
qDebug() << "점수는 " << jumsu << "점 입니다.";
elseif 예시
int jumsu;
 
jumsu = 50;
 
if(jumsu >= 90)
{
qDebug() << "A 학점입니다.";
}
else if(jumsu >= 80)
{
qDebug() << "B 학점입니다.";
}
else if(jumsu >= 70)
{
qDebug() << "C 학점입니다.";
}
else if(jumsu >= 60)
{
qDebug() << "D 학점입니다.";
}
else // elseif가 아님
{
qDebug() << "F 학점입니다.";
}
switch 문은 일반적으로 enum과 함께 쓰입니다.
enum weekday {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
};
 
int today, yesterday;
 
today = Saturday;
 
yesterday = today -1;
 
switch(yesterday) {
case Friday:
case Saturday: qDebug() << "Burning"; break;
case Monday: qDebug() << "What the Hell"; break;
default:
qDebug("Groomy Working Day");
}
enum은 위와 같이 사용합니다. 자세한 사용법은 구글님께.
반복문
for는 다음과 같이 사용합니다.
for(변수 = 초기값; 최종값에 대한 식; 변수를 어떻게 증감할건지)
{
명령문들;
}
예제를 하나 보도록 하죠.
for(int i = 0; i < 10; i++)
{
res += i;
qDebug() << i << "까지의 합은 " << res << "입니다.";
}
do~while문은 다음과 같이 사용합니다.
do
{
명령문들;
} while (최종값에 대한 식);
이것도 역시 예제를 위의 for와 같은걸 해보도록 하죠.
int i = 0; // 이처럼 변수 선언을 하면서 초기값을 설정할 수 있습니다.
do
{
i++;
res += i;
qDebug() << i << "까지의 합은 " << res << "입니다.";
} while (i < 3);
자, for문과 do~while문의 차이점은 뭘까요?
for는 괄호 안에 모든 내용을 다 집어넣었지요? 사람들은 반복문을 사용할 때 for를 더 많이 사용하는 이유가 있지요.
for는 루프 내에서만 사용되는 변수를 지정할 수 있습니다. while은 미리 변수를 선언해야 하고요.
while은 또 한가지 유의할 점이 있습니다. *무조건* 한번은 프로시져가 실행된다는 점이죠.
배열
프로그램에서 데이터를 임시로 저장하기 위해서 변수를 사용한다는건 아실겁니다.
그런데 변수중에 '배열'이라는걸 들어보셨을거에요.그걸 왜 쓰는지 궁금하실겁니다.
일단 '배열'이라는건 같은 데이터 타입을 가지는 변수의 '집단'이라고 할 수 있습니다.
예를 들어 10개의 과목에 대한 점수를 기억하려면 다음과 같이 10개의 정수형 변수가 필요할 것입니다.
int score1;
int score2;
int score3;
int score4;
int score5;
int score6;
int score7;
int score8;
int score9;
int score10;
보세요. 보기만 해도 선언도 귀찮고 기억하기도 힘들겠죠?
근데, 이걸 100명분을 작성한다고 칩시다.
이럴땐 다음과 같이 배열로 하면 좀더 쉽게 작성할 수 있습니다.
타입 변수명[갯수];
예제를 하나 보죠.
int score[100];
이런식으로 사용합니다. 다음은 1부터 10까지 돌면서 해당 값에 2를 곱해서 저장하는 프로그램입니다.
int score[10];
for(int i = 0; i < 10; i++)
{
score[i] = i * 2;
qDebug() << "i = " << score[i];
}
실행 결과는 다음과 같을 것입니다.
 
이걸 보고 이상하다는 생각이 들지 않나요?
컴퓨터한테는 첫번째 숫자가 1이 아니라 0입니다.
이걸 1부터 시작해서 10으로 끝나게 만들려면 어떻게 해야 할까요? 한번 고민해보고 만들어보시기 바랍니다. :)
동적 배열
 
int* 변수이름 = new 타입[갯수];
타입 뒤에 *가 들어갑니다. 중요합니다.
또한, 할당하고 나서 다음과 같이 꼭 해제를 해줘야 합니다.
delete[] 변수이름;
 
 
 
 
int* score = new int[10];
for(int i = 0; i < 10; i++)
{
score[i] = i * 2;
qDebug() << "i = " << score[i];
}
다차원배열
지금까지 본건 1차원 배열입니다.
QT를 컴파일하는 gcc의 경우 10차원이 넘는 배열을 선언할 수 있습니다.
간단한 프로그램을 작성해 봅시다.
int data[3][5];
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 5; j++)
{
data[i][j] = i * j;
qDebug() << i << "*" << "j" << "=" << data[i][j];
}
}
 
 
구조체
구조체는 다음과 같이 사용합니다.
struct {
};
반응형
Comments