반응형

QString 문자열에서 자료형 변환 예제모음. (QString to data type)

자료형에서 QString 변환 예제모음. (data type to QString)


 

QString -> int

// Convert QString to int

QString in_qstr = "2147483647";
int out_value = in_qstr.toInt();
printf("%d\n", out_value); 
// result(int) : 2147483647

 

 

int -> QString

// Convert int to QString

int in_value = 2147483647;
QString out_qstr = QString::number(in_value);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : 2147483647

 

QString -> long long

// convert QString to long long
        
QString in_qstr = "9223372036854775807";
long long out_value = in_qstr.toLongLong();
printf("%llu\n", out_value);
// result(long long) : 9223372036854775807

 

long long -> QString

// convert long long to QString

long long in_value = 9223372036854775807;
QString out_qstr = QString::number(in_value);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : 9223372036854775807

 

QString -> double (precision)

// convert QString to double(precision)

QString in_qstr = "3.14";
double out_value = in_qstr.toDouble();
printf("%lf\n", out_value);
// result(double) : 3.140000

 

double (precision) -> QString

// convert double(precision) to QString

double in_value = 3.14;
int precision = 1;
QString out_qstr = QStringLiteral("%1").arg(in_value, 0, 'f', precision);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : 3.1

 

QString -> float (precison)

// convert QString to float(precision)

float in_value = 3.14;
int precision = 2;
QString out_qstr = QStringLiteral("%1").arg(in_value, 0, 'f', precision);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : 3.14

 

float (precison) -> QString

// convert float (precison) to QString

QString in_qstr = "3.14";
float out_value = in_qstr.toDouble();
printf("%f\n", out_value);
// result(float) : 3.140000

 

 

QString -> char

// convert QString to char

QString in_qstr = "QString to char";
char out_str[32] = {NULL, };
sprintf(out_str, "%s", (const char*)(QByteArray)((in_qstr.toLocal8Bit()).data()));
printf("%s\n", out_str);
// result(char) : QString to char

 

 

char -> QString

// convert char to QString

char in_str[32] = "char to QString";
QString out_qstr = QString(in_str);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : char to QString

 

 

QString -> TCHAR

// convert QString to TCHAR

QString in_qstr = "QString to TCHAR";
TCHAR out_tchar[32] = {NULL, };
in_qstr.toWCharArray(out_tchar);
_tprintf(_T("%s\n"), out_tchar);
// result(TCHAR) : QString to TCHAR

 

 

TCHAR -> QString

// convert TCHAR to QString

TCHAR in_tchar[32] = _T("TCHAR to QString");
QString out_qstr = QString::fromWCharArray(in_tchar);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : TCHAR to QString

 

 

QString -> wchar_t

// convert QString to wchar_t

QString in_qstr = "QString to wchar_t";
wchar_t out_wchar[32] = L"";
in_qstr.toWCharArray(out_wchar);
wprintf(L"%s\n", out_wchar);
// result(QString) : QString to wchar_t

 

 

wchar_t -> QString

// convert wchar_t to QString

wchar_t in_wchar[32] = L"wchar_t to QString";
QString out_qstr = QString::fromWCharArray(in_wchar);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : wchar_t to QString

감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 


 

반응형
반응형

 

문자열 중 "왼쪽에서" 또는 "오른쪽에서" 부터 "특정 문자" 또는 "문자열" 매칭 비교하여

맞는 경우 삭제. 아닌 경우 문자열 그대로 출력.

기존 CString에서 제공하는 함수 중 TrimRight, TrimLeft를 QString에서도 사용할 수 있도록 함수 구현함.


 

# 개발환경

  • 개발도구 : Visual Studio Community 2017
  • QT 버전 : 5.12.5

 

# 결과

  • 테스트 문자열 : Jeff's DevSpace, C++, C, Qt(99)
  • Trim Right 문자열 :  9)
  • Trim Left 문자열 :  Jeff's  


# 예제소스

  • .cpp
    #include <iostream>
    #include <qdebug.h>
    #include "vs2017_qt_example.h"
    
    using namespace std;
    
    vs2017_qt_example::vs2017_qt_example(QWidget *parent) : QMainWindow(parent), ui(new Ui::vs2017_qt_exampleClass)
    {
        ui->setupUi(this);
    
        QString qsTest;
        QString result;
    
        qsTest = "Jeff's DevSpace, C++, C, Qt(99)";
        printQstr(qsTest);
    
        result = trimRight(qsTest, "9)");
        printQstr("QString Trim Right ( 9) ) : " + result);
    
        result = trimLeft(qsTest, "Jeff's");
        printQstr("QString Trim Left ( Jeff's ) : " + result);
    
    }
    
    vs2017_qt_example::~vs2017_qt_example() { }
    
    QString vs2017_qt_example::trimRight(QString qsFullStr, QString target)
    {
        // startIdx
        int len = qsFullStr.length();
        int len2 = target.length();
        int startIdx = len-len2;
        if(startIdx < 0) return qsFullStr;
    
        // parse
        QString qsParse = "";
        for(int n=startIdx; n<len; n++){
            qsParse.append(qsFullStr.at(n));
        }
    
        // cmp, split
        QString qstr = "";
        if(qsParse==target) qstr = qsFullStr.chopped(len2);
        else                    qstr = qsFullStr;
    
        return qstr;
    }
    
    
    QString vs2017_qt_example::trimLeft(QString qsFullStr, QString target)
    {
        // len
        int len = target.length();
        if(qsFullStr.length() < len) return qsFullStr;
    
        // parse
        QString qsParse = "";
        for(int n=0; n<len; n++){
            qsParse.append(qsFullStr.at(n));
        }
    
        // cmp, split
        QString qstr = "";
        if(qsParse==target) qstr = qsFullStr.remove(0, len);
        else                qstr = qsFullStr;
    
        return qstr;
    }
    
    
    void vs2017_qt_example::printQstr(QString qstr)
    {
        qDebug() << qstr << endl;
    }​​
  • .h
    #pragma once
    
    #include <QtWidgets/QMainWindow>
    #include "ui_vs2017_qt_example.h"
    
    class vs2017_qt_example : public QMainWindow
    {
        Q_OBJECT
    
    public:
        vs2017_qt_example(QWidget *parent = nullptr);
        ~vs2017_qt_example();
    
        void printQstr(QString qstr);
        QString trimRight(QString qsFullStr, QString target);
        QString trimLeft(QString qsFullStr, QString target);
    
    private:
        Ui::vs2017_qt_exampleClass* ui;
    
    private Q_SLOTS:
    
    };​

감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형

 

.exe 프로그램에 사용하는 DLL, 디자인 파일들을 생성하여 무설치 배포 파일을 만든다.


 

# 개발도구

  • QT 버전 : 5.12.5

 

# 무설치 배포 만드는 방법

1. Debug 또는 Release 선택하고 솔루션 빌드 선택.


2. 빌드된 프로그램 폴더 열기

  • 솔루션에 오른쪽 마우스 클릭하여 '파일 탐색기에서 폴더 열기' 선택
  • Debug 또는 Release 빌드한 폴더로 들어가기


3. .exe 프로그램 경로 복사

  • 경로 허공에 오른쪽 마우스 클릭하여 '주소 복사' 메뉴 선택


4. Qt Prompt 실행

  • 윈도우 키를 눌러 'Qt' 검색하면 여러 Qt (버전) 프롬프트 나온다.
  • QT creator 에서 빌드한 프로그램은 MinGW ...
  • Visual Studio 에서 빌드한 프로그램은 MSVS ...


5. 빌드된 프로그램 경로 설정

  • .exe 프로그램 경로 복사하여 Qt prompt에 붙여넣기. (검은화면에 오른쪽 마우스 누르면 붙여넣기함)
    - $ cd { .exe 프로그램 경로 }


6. 배포 명령어 입력

  • windeployqt -release {프로그램이름}.exe


7. 배포 생성 결과

  • 생성된 파일들을 압축하여 Portable 배포 만든다.


8. 오류 발생하는 경우

  • 배포 명령어 후 .exe 실행 시 .dll 없다고 오류가 나타날 수 있다.
    1) 오류가 출력된 .dll을 따로 메모한다.
    2) Qt 설치폴더창 또는 System32 폴더창 띄운다.
    3) 메모해둔 .dll 을 검색한다.

- Qt 설치폴더 경로 : C:\Qt\5.12.5

- System32 설치폴더 경로 : C:\Windows\System32

 

메모해둔 dll들을 검색한다.


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형

 

 

QRadioButton으로 여러 버튼으로 구성하여 버튼들을 누를 시 여러 버튼 중 하나만 선택이 된다.
라디오버튼마다 누를 시 각각 체크할 수 있도록 체크 그룹 해제 설정한다.


 

# 개발환경

  • 개발도구 : Visual Studio Community 2017
  • QT 버전 : 5.12.5

 

# 설정 전

 

# 설정 후

 

# 설정방법

  • .ui 에서 QRadioButton 속성에서 autoExclusive 체크 해제.


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형

 

.ui 에서 특정 ui만 이벤트 처리하기 위해 installEventFilter와 eventFilter 함수를 사용한다.


# 개발도구

  • 개발도구 : Visual Studio Community 2017
  • QT 버전 : 5.12.5

 

# 결과

  • 마우스 클릭 이벤트 처리
    - 버튼 누를 시 "mouseClick : pushButton" 출력
    - 라벨 누를 시 "mouseClick : label" 출력
  • 키보드 입력 이벤트 처리
    - 버튼 누를 시 "keyPress : pushButton" 출력

 

# 전체 소스

  • 이벤트 처리할 ui 설정 (installEventFilter)
  • 이벤트 처리 함수 (eventFilter)

- QtExample.cpp

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

	setWindowTitle("QtExample");

	ui.label->installEventFilter(this);
	ui.pushButton->installEventFilter(this);
}

QtExample::~QtExample()
{

}

bool QtExample::eventFilter(QObject *obj, QEvent *e)
{
	int key;
	QString objName = obj->objectName();
	QKeyEvent *keyEvent = static_cast<QKeyEvent*>(e);
	QEvent::Type eventType = keyEvent->type();

	if(eventType==QEvent::KeyPress)
	{
		if(objName=="pushButton"){
			printf("keyPress : pushButton\n");
		}else{
			printf("none\n");
		}
	}
	else if(eventType==QEvent::MouseButtonRelease)
	{
		if(objName=="pushButton"){
			printf("mouseClick : pushButton\n");
		}else if(objName=="label"){
			printf("mouseClick : label\n");
		}else{
			printf("none\n");
		}
	}

	return QObject::eventFilter(obj, e);
}

- QtExample.h

#pragma once

#include "ui_QtExample.h"
#include <iostream>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QApplication>
#include <QKeyEvent>

class QtExample : public QMainWindow
{
    Q_OBJECT

public:
    QtExample(QWidget *parent = nullptr);
    ~QtExample();


private:
    Ui::QtExampleClass ui;
	bool eventFilter(QObject *obj, QEvent *e);

};

 

# 단위 분석

  • QtExample::QtExample(QWidget *parent) : QMainWindow(parent)
  • 이벤트 처리할 ui 설정 (installEventFilter)
    - ui.label->installEventFilter(this);
    - ui.pushButton->installEventFilter(this);
  • 사용자가 키보드 또는 마우스로 이용하여 label 또는 pushButton 조작 시 이벤트(핸들러)를 받을 수 있다.
QtExample::QtExample(QWidget *parent) : QMainWindow(parent)
{
	ui.setupUi(this);

	setWindowTitle("QtExample");

	ui.label->installEventFilter(this);
	ui.pushButton->installEventFilter(this);
}

  • bool QtExample::eventFilter(QObject *obj, QEvent *e)
  • QObject, QEvent 인자를 이용하여 object name 과 object class name을 구할 수 있다.
  • 키보드 또는 마우스 입력 판단은 QKeyEvent 로 통해 type 함수에서 판단할 수 있다.
    - 이벤트 타입 받기 : keyEvent->type();
    - 타입 종류 : QEvent::keyPress 또는 QEvent::MouseButtonRelease 등. (링크:keyEvent type 종류 보기)
bool QtExample::eventFilter(QObject *obj, QEvent *e)
{
	int key;
	QString objName = obj->objectName();
	QKeyEvent *keyEvent = static_cast<QKeyEvent*>(e);
	QEvent::Type eventType = keyEvent->type();

	if(eventType==QEvent::KeyPress)
	{
		if(objName=="pushButton"){
			printf("keyPress : pushButton\n");
		}else{
			printf("none\n");
		}
	}
	else if(eventType==QEvent::MouseButtonRelease)
	{
		if(objName=="pushButton"){
			printf("mouseClick : pushButton\n");
		}else if(objName=="label"){
			printf("mouseClick : label\n");
		}else{
			printf("none\n");
		}
	}

	return QObject::eventFilter(obj, e);
}

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형


사용자의 UI 조작에 따라 기능동작할 수 있도록 이벤트 처리 코드를 구현한다.

수많은 UI와 클래스, 화면탭, 단축키, 마우스조작방법, 동시 키실행 등이 있는 경우 각 UI클래스마다 이벤트 처리를 해주어야 할 것들이 많다.

위와 같은 코드 복잡성 증가를 줄이기 위해 각 코드마다 유지보수를 쉽게 할 수 있고, 모든 이벤트들을 처리할 수 있는 함수로 구성된 클래스를 만들 것다.


 

# 참고자료

 

#5_[Visual/C++/QT] 개별 ui 이벤트 처리 함수 (eventFilter) - 기본형

.ui 에서 특정 ui만 이벤트 처리하기 위해 installEventFilter와 eventFilter 함수를 사용한다. # 개발도구 개발도구 : Visual Studio Community 2017 QT 버전 : 5.12.5 # 결과 마우스 클릭 이벤트 처리 - 버튼 누..

manbedded.tistory.com

 

# 개발환경

  • 개발도구 : Visual Studio Community 2017
  • QT 버전 : 5.12.5

 

# 결과

 

# 프로젝트 파일 구성

  • QtExample 프로젝트명으로 생성함.
  • 추가적으로 QEventFilter 생성함. (.h, .cpp)

# 전체 소스

1. QEventFilter 클래스 생성.


2. stdlib.h 소스 작성.
- 각 클래스마다 라이브러리를 작성하기 귀찮아서 하나의 헤더파일에서 라이브러리를 작성함.

- stdlib.h

#pragma once

#include <iostream>

#include <QtWidgets/QMainWindow>
#include <QtWidgets/QApplication>
#include <QKeyEvent>
#include <qpushbutton.h>
#include <qsharedmemory.h>
#include <qobject.h>
#include "QEventFilter.h"

2. QEventFilter 소스 작성.
- QEventFilter.h

#pragma once

#include "stdlib.h"

class QEventFilter : public QObject
{
    Q_OBJECT

public:
    explicit QEventFilter(QObject *parent = nullptr);
    ~QEventFilter();

private:
	bool eventFilter(QObject *obj, QEvent *e);

};

- 아래 소스는 pushButton을 Return (오른쪽 shift 위)로도 push할 수 있도록 함.
- Return 키를 누를 시 QObject 로 ui 클래스로 변환하여 클릭 시그널을 호출함.


- QEventFilter.cpp

#include "QEventFilter.h"

QEventFilter::QEventFilter(QObject *parent) : QObject(parent) { }
QEventFilter::~QEventFilter() { }

bool QEventFilter::eventFilter(QObject *obj, QEvent *e)
{
	int key;
	QString objName;
	QString objClassName;

	QPushButton *qButton;
	QKeyEvent *keyEvent = static_cast<QKeyEvent*>(e);
	QEvent::Type eventType = keyEvent->type();

	if(eventType==QEvent::KeyPress)
    {
		key = keyEvent->key();
		objName = obj->objectName();
		objClassName = QString(obj->metaObject()->className());

		if(key==Qt::Key_Return){
			if(objClassName=="QPushButton"){
				qButton = qobject_cast<QPushButton*>(obj);
				qButton->clicked();
			}
		}else if(keyEvent->matches(QKeySequence::Copy)==true){
			printf("key press : copy\n");
		}
	}

    return QObject::eventFilter(obj, e);
}

3. eventFilter 설정
- QApplication 에 EventFIlter 설정. (installEventFilter)
- 전체 ui에 대한 이벤트를 eventFilter로 받을 수 있음.

- main.cpp

#include "stdlib.h"
#include "QtExample.h"


int main(int argc, char *argv[])
{
	QApplication a(argc, argv);
	a.installEventFilter(new QEventFilter());

	QtExample w;
	w.show();
	
	return a.exec();
}

4. QtExample 소스 작성
- QtExample.h

#pragma once

#include "ui_QtExample.h"
#include "stdlib.h"

class QtExample : public QMainWindow
{
    Q_OBJECT

public:
    QtExample(QWidget *parent = nullptr);
    ~QtExample();

private:
    Ui::QtExampleClass ui;


private slots:
	void pushButtonFunc(void);

};

- 간단하게 pushButton을 누를 시 printf와 label 설정하는 함수를 작성함.

- QtExample.cpp

#include "QtExample.h"

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

    setWindowTitle("QtExample");

	connect(ui.pushButton, SIGNAL(clicked()), SLOT(pushButtonFunc()));
}

QtExample::~QtExample()
{

}

void QtExample::pushButtonFunc(void)
{
	printf("push\n");
	ui.label->setText("push");
}

5. QtExample.ui 구성
- pushButton, label 배치.

 


감사합니다.

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다.


 

반응형
반응형

 

프로그램 이름으로 현재 실행되어 있는지 확인할 수 있다.

또한 이것을 이용하여 프로그램 중복실행 방지로 활용할 수 있다.


 

# 개발환경

개발도구 : Visual Studio Community 2017

QT 버전 : 5.12.5

 

# 소스코드

- QSharedMemory 사용하여 현재 실행 중인 프로그램 이름을 확인하여 프로그램 실행여부를 확인할 수 있다.
- 실행 여부에 따라서 동작처리코드를 구현할 수 있다.

#include "QtExample.h"
#include <QtWidgets/QApplication>
#include <qsharedmemory.h>

int main(int argc, char *argv[])
{
   	QApplication a(argc, argv);

	QSharedMemory shared("QtExample");
	if(!shared.create(512, QSharedMemory::ReadWrite)){
		printf("Error\n");
	}else{
		QtExample w;
		w.show();
		return a.exec();
	}
	
	return 1;
}

 

# 프로그램 이름 설정 방법


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형

 


 

Visual Studio 에서 QT 프로젝트 만들기.


 

# 개발환경

개발도구 : Visual Studio Community 2017

QT 버전 : 5.12.5

 

# 프로젝트 생성 방법

1. 상단 메뉴 파일 > 새로 만들기 > 프로젝트 선택


2. 프로젝트 유형 선택 (Visual C++ > Qt > Qt Widget Application)


3. Qt Widgets Application Wizard


4. 생성된 프로젝트 확인


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형

 


 

Visual Studio 에서 .h와 .cpp, .ui를 3개를 생성할 수 있다.


 

# 개발환경

개발도구 : Visual Studio Community 2017

QT 버전 : 5.12.5

 

# Ui 클래스 생성 방법

1. 프로젝트에서 생성하고자하는 폴더에서 오른쪽 마우스 클릭 - 추가 - Add Qt Class... 선택


2. Qt Widget Class 이름 설정


3. Qt Widget Class Wizard 에서 .h .cpp .ui 파일명 설정


4. 생성된 파일 확인

 


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형

+ Recent posts