카테고리 없음

Qt - Visual studio 연동 및 연습(1)

kingsgirl 2023. 8. 9. 18:09
728x90

Qt 설치시 
start Menu shorcuts -> 시작메뉴이름설정
Qt로 지정 

구글비밀번호
dhkddkwjd2!!

비쥬얼스튜디오에서 새프로젝트 생성하려 했는데 C++이 없음 
해결 visual studio installer 에서
 C++를 사용한 데스크톱 개발 체크 후 수정 (설치)

visuaal studio installer C++ 설치 
라고 검색하면 나옴 

프로젝트 만들기 
Qt Widgets Application

새프로젝트 생성시 
Qt GUI Application Wizard 창 생성

Base class 에서 모듈선택
QMainWindow - 일반적인 메인 어플리케이션 생성시 사용
어플리케이션의 사용자 인터페이스를 만들기 위한 프레임워크를 제공합니다.

또한, QToolBars, QDockWidgets, QMenuBar 그리고 QStatusBar를 추가 가능 

QWidget
모든 GUI 요소에 대한 기본 클래스(base class)

QDialog와 같은 다른 위젯에 button을 추가하는 것과 같은 형태를 의미

- 메인 어플리케이면 QMaimWindow 사용
일반적대화상자 Diaglog 사용

파일명이 xxx.ui 파일 더블클릭 하면 Qt 디자이너실행
UI배치 적용 후 변수이름,텍스트,크기: 속성 편집기에서 설정 가능 

저장 후 visual stuidio 로 복귀 

Qt 경로
C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Qt\5.14.2


Qt 개념 이벤트(signal)와 함수(Slot)
버튼이 클릭됬다는 이벤트(signal)이 발생하면 연결된함수(slot)이 실행되는 방식

 

버튼누르면 팝업메시지 helloword 뜨는 예제


헤더파일
1. #include <QMessageBox> 정의

2. slot()함수 정의
public slots:
    void ButtonClicked();

소스파일
1.connect함수를  사용하여 버튼 이벤트 연결"
connect(ui.pushButton1, SIGNAL(clicked()), this, SLOT(ButtonClicked()));//버튼이벤트 연결


2."버튼이벤트 실행될 함수 정의 "
void QtWidgetsApplication0809::ButtonClicked()
QMessageBox::information(this, "Title", "Helloworld");
//버튼이벤트 실행될 함수 정의 헤더파일에 QMessageBox정의

 

버튼 클릭하여 이미지파일 선택하고 선택된 이미지를 laveldp 그리는 예제

헤더파일

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_QtWidgetsApplication0809.h"
#include <qfiledialog.h>



class QtWidgetsApplication0809 : public QMainWindow
{
    Q_OBJECT

public:
    QtWidgetsApplication0809(QWidget *parent = nullptr);
    //~QtWidgetsApplication0809();

private:
    Ui::QtWidgetsApplication0809Class ui;


public slots:
    void ButtonClicked();
};

소스파일

#include "QtWidgetsApplication0809.h"

QtWidgetsApplication0809::QtWidgetsApplication0809(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

    connect(ui.pushButton_LoadImage, SIGNAL(clicked()), this, SLOT(ButtonClicked()));//버튼이벤트 연결

}

void QtWidgetsApplication0809::ButtonClicked()

{
    QFileDialog dlg;
    QString filePath = dlg.getOpenFileName(this, "Load Image", "", "Image Files (*.png *.jpg *.bmp)");

    QString fileName = filePath.section("/",-1); //파일이름 추출 위한 section함수
    ui.label_FileName->setText(fileName);

    QPixmap img; //
    img.load(filePath);

    int w = img.width();
    ui.label_Width->setText(QString::number(w));

    int h = img.height();
    ui.label_Height->setText(QString::number(h));

    ui.label_Display->setPixmap(img); //setPixmap함수: QPixmap이미지 정보를 QLabel에 설정
    ui.label_Display->setScaledContents(true); //QLabel의 사용가능한 모든 공간 채움 ->설정된 pixmap크기조정됨


   
}
728x90