닷넷 프로젝트를 수행하다 보면 기본적으로 솔루션 파일(*.sln 또는 *.slnx)과 함께 프로젝트 파일(*.csproj)을 템플릿을 통해서 제작하는 것으로 시작한다. 그런데 개발 과정에서 간단하게 실제 동작을 테스트 해보고 싶은 경우에 개발 중인 프로젝트에 코드를 삽입해서 실행시키는 것은 조금 부담되는 것이 사실이다. 이런 경우에 기존 프로젝트와는 별개로 *.cs로 간단한 테스트 코드를 하나 작성해서 빌드하고 실행시켜 보는 것이 효과적이다. 예를 들면 C 프로그램을 "cc -o testpgm testpgm.c" 처럼 간단하게 빌드하는 것처럼 C# 프로그램도 빌드하고 싶은 것이다. 일단 닷넷 10부터는 기본적으로 "dotnet run testpgm.cs" 처럼 수행하면 프로젝트 파일 없이 개별 코드를 바..
요즘은 EUC-KR 인코딩을 처리할 일이 거의 없을 정도로 UTF-8 인코딩이 일반화되었다. 표준으로 굳어진 UTF-8 인코딩을 사용하는 웹페이지가 90% 이상이라고 한다. 문제는 고객의 요청이나 기타 사유로 EUC-KR 인코딩을 사용해야 하거나 사용할 수밖에 없는 상황이 있다는 것이다. 대표적인 것이 CSV 파일로 저장해서 엑셀로 읽거나 또는 반대의 경우이다. File.WriteAllText(outDir, sb.ToString(), System.Text.Encoding.GetEncoding("euc-kr")); 통상 위와 같은 코드를 작성하면 지정한 인코딩으로 변환해서 스트링을 파일로 저장할 수 있다. 문제는 개발을 닷넷 프레임워크 기반이 아니라 닷넷 코어를 기반으로 하는 경우에 닷넷 코어 5.0 이상..
비주얼스튜디오 코드(VS Code, 이하 코드)로 아발로니아 UI(Avalonia UI) 기반의 크로스플랫폼 앱을 개발하는 과정도 시간이 꽤 흘렀다. Winforms 응용을 개발하는 것처럼 디자이너로 자유롭게 UI를 개발할 수 없는 것이 단점이기는 하지만 프로젝트 자체가 Winforms 기반 응용을 아발로니아로 전환하는 것이었기에 기존의 디자인 코드를 참조하는 것으로 나름 요령을 가지고 개발할 수 있었다. 아발로니아 응용을 개발한다면 Winform으로 UI를 스케치하고 그것을 아발로니아로 전환하는 것도 나름 방법이지 않을까 싶다. 코드를 개발환경으로 하여 디버깅을 수행하는 것도 무리가 없는 작업이었다. 이번 포스팅은 디버깅 모드에서는 문제가 없던 프로그램이 릴리즈 모드로 퍼블리시하면 문제가 생기는 이슈를..
■ 목차├ 1. SimpleToDoList 들어가기├ 2. 프로그램 동작 및 구조├ 3. 어노테이션과 코드 생성기├ 4. 프로그램 시작 및 종료와 JSON 파일 읽고 쓰기└ 5. 뷰와 아발로니아 요소들 1. SimpleToDoList 들어가기크로스플랫폼 닷넷 UI 프레임워크인 아바로니아 맛보기를 넘어서서 본격적인 활용에 들어가기 위한 학습 방법으로 필자는 예제 프로그램 리뷰를 하나씩 수행하기로 했다. 기술 자료가 넉넉하고, 비주얼스튜디오의 WPF 디자이너와 같은 도구가 있다면 넘어갈 수도 있는 문제겠지만 지금까지 접하지 않았던 새로운 도구와 친숙해지는 방법은 역시 예제를 통하는 것이 좋은 방법이 아닌가 싶다. 공식 예제 코드는 깃허브 https://github.com/AvaloniaUI/Avalonia...
■ 목차├ 1. DialogManagerSample 들어가기├ 2. 프로그램 동작 및 구조├ 3. 대화창 서비스 구현 방법└ 4. 뷰와 아발로니아 요소들 1. DialogManagerSample 들어가기크로스플랫폼 닷넷 UI 프레임워크인 아바로니아 맛보기를 넘어서서 본격적인 활용에 들어가기 위한 학습 방법으로 필자는 예제 프로그램 리뷰를 하나씩 수행하기로 했다. 기술 자료가 넉넉하고, 비주얼스튜디오의 WPF 디자이너와 같은 도구가 있다면 넘어갈 수도 있는 문제겠지만 지금까지 접하지 않았던 새로운 도구와 친숙해지는 방법은 역시 예제를 통하는 것이 좋은 방법이 아닌가 싶다. 공식 예제 코드는 깃허브 https://github.com/AvaloniaUI/Avalonia.Samples 에서 받을 수 있다. 커뮤..
■ 목차├ 1. MvvmDialogSample 들어가기├ 2. 프로그램 동작 및 구조├ 3. 두 가지 Interaction 구현 방법└ 4. 뷰와 아발로니아 요소들 1. MvvmDialogSample 들어가기크로스플랫폼 닷넷 UI 프레임워크인 아바로니아 맛보기를 넘어서서 본격적인 활용에 들어가기 위한 학습 방법으로 필자는 예제 프로그램 리뷰를 하나씩 수행하기로 했다. 기술 자료가 넉넉하고, 비주얼스튜디오의 WPF 디자이너와 같은 도구가 있다면 넘어갈 수도 있는 문제겠지만 지금까지 접하지 않았던 새로운 도구와 친숙해지는 방법은 역시 예제를 통하는 것이 좋은 방법이 아닌가 싶다. 공식 예제 코드는 깃허브 https://github.com/AvaloniaUI/Avalonia.Samples 에서 받을 수 있다...
■ 목차├ 1. ValueConversionSample 들어가기├ 2. 프로그램 동작 및 구조├ 3. 세 가지 변환기 구현 방법└ 4. 뷰와 아발로니아 요소들 1. ValueConversionSample 들어가기크로스플랫폼 닷넷 UI 프레임워크인 아바로니아 맛보기를 넘어서서 본격적인 활용에 들어가기 위한 학습 방법으로 필자는 예제 프로그램 리뷰를 하나씩 수행하기로 했다. 기술 자료가 넉넉하고, 비주얼스튜디오의 WPF 디자이너와 같은 도구가 있다면 넘어갈 수도 있는 문제겠지만 지금까지 접하지 않았던 새로운 도구와 친숙해지는 방법은 역시 예제를 통하는 것이 좋은 방법이 아닌가 싶다. 공식 예제 코드는 깃허브 https://github.com/AvaloniaUI/Avalonia.Samples 에서 받을 수 있..
■ 목차├ 1. ValidationSample 들어가기├ 2. 프로그램 동작 및 구조├ 3. UI 항목 검증 세 가지 방법└ 4. 뷰와 아발로니아 요소들 1. ValidationSample 들어가기크로스플랫폼 닷넷 UI 프레임워크인 아바로니아 맛보기를 넘어서서 본격적인 활용에 들어가기 위한 학습 방법으로 필자는 예제 프로그램 리뷰를 하나씩 수행하기로 했다. 기술 자료가 넉넉하고, 비주얼스튜디오의 WPF 디자이너와 같은 도구가 있다면 넘어갈 수도 있는 문제겠지만 지금까지 접하지 않았던 새로운 도구와 친숙해지는 방법은 역시 예제를 통하는 것이 아닌가 싶다. 공식 예제 코드는 깃허브 https://github.com/AvaloniaUI/Avalonia.Samples 에서 받을 수 있다. 커뮤니티에서 발굴해 놓..
■ 목차├ 1. CommandSample 들어가기├ 2. 프로그램 동작 및 구조├ 3. 서브 뷰 내포시키기├ 4. 뷰와 아발로니아 요소들└ 5. ReactiveUI와 CommunityToolkit.Mvvm 1. CommandSample 들어가기크로스플랫폼 닷넷 UI 프레임워크인 아바로니아 맛보기를 넘어서서 본격적인 활용에 들어가기 위한 학습 방법으로 필자는 예제 프로그램 리뷰를 하나씩 수행하기로 했다. 기술 자료가 넉넉하고, 비주얼스튜디오의 WPF 디자이너와 같은 도구가 있다면 넘어갈 수도 있는 문제겠지만 지금까지 접하지 않았던 새로운 도구와 친숙해지는 방법은 역시 예제를 통하는 것이 아닌가 싶다. 공식 예제 코드는 깃허브 https://github.com/AvaloniaUI/Avalonia.Sample..
■ 목차├ 1. BasicMvvmSample 들어가기├ 2. 프로그램 동작 및 구조├ 3. 뷰와 아발로니아 요소들└ 4. ReactiveUI와 MVVM 패턴 1. BasicMvvmSample 들어가기크로스플랫폼 닷넷 UI 프레임워크인 아바로니아 맛보기를 넘어서서 본격적인 활용에 들어가기 위한 학습 방법으로 필자는 예제 프로그램 리뷰를 하나씩 수행하기로 했다. 기술 자료가 넉넉하고, 비주얼스튜디오의 WPF 디자이너와 같은 도구가 있다면 넘어갈 수도 있는 문제겠지만 지금까지 접하지 않았던 새로운 도구와 친숙해지는 방법은 역시 예제를 통하는 것이 아닌가 싶다. 공식 예제 코드는 깃허브 https://github.com/AvaloniaUI/Avalonia.Samples 에서 받을 수 있다. 커뮤니티에서 발굴해 ..
닷넷 기반의 크로스 플랫폼 UI인 아발로니아를 VS2022에서 맛보기로 했다. 아발로니아 UI 사이트에서는 윈도우 플랫폼에서는 VS2022를 추천하고 있고 맥이나 리눅스에서는 젯브레인 라이더를 추천하고 있으니, 일단 윈도우에서 추천하는 VS2022로 아발로니아 UI 개발을 맛보기로 했다. VS2022 커뮤니티 버전을 설치하고 위의 그림과 같이 "Avalonia for Visual Studio"를 설치한다. 아발로니아 확장을 정상적으로 설치하면 새 프로젝트 만들기 화면에서 "avalonia"를 검색하면 위의 그림처럼 여러 연관 템플릿을 확인할 수 있다. "Avalonia .NET MVVM App"을 선택한다. 프로젝트 폴더를 선택하고 [다음]을 누른다. 닷넷 코어 버전을 프레임워크에서 선택하고 나머지는 ..
VS Code에서 아발로니아 UI(AvaloniaUI, "아발로니아 UI에 대한 고찰" 참조)를 응용을 빌드하고 실행하는 과정을 수행하려면 일단 닷넷 SDK와 아발로니아 프로젝트 템플릿을 준비해야 한다. 닷넷 SDK는 위의 그림처럼 명령창을 열어서 "dotnet --list-sdks"로 간단히 확인할 수 있으며("설치된 닷넷 SDK와 닷넷 런타임을 확인하기" 참조), 아발로니아 프로젝트 템플릿도 "dotnet new install Avalonia.Templates" 명령으로 간편하게 설치할 수 있다. 설치 결과를 보면 많이 사용하는 "Avalonia .NET App", "Avalonia .NET MVVM App" 템플릿 이외에도 여러 템플릿이 있음을 확인할 수 있다. 닷넷 SDK 버전은 "Avalonia..
프로그램 개발 및 유지 보수의 생산성을 높이고, 협업으로 시너지를 높일 수 있는 아키텍처는 지속적으로 개발되어 왔는데 대표적인 예들은 아래와 같다.MVC (Model, View, Controller)MVP (Model, View, Presenter)MVI (Model, View, Intent)MVVM (Model, View, View Model)이번에 다룰 MVVM은 MVC에서 파생된 것으로 차이점이라면 MVC 모델에서는 Controller가 입력을 받는다면 MVVM에서는 View에서 입력을 받는다. 무엇보다 WPF 응용에서 가장 널리 사용하는 프로그래밍 패턴이다. 물론 크로스플랫폼 UI인 아발론 UI에서도 MVVM을 채용하고 있다. MVVM은 각 요소를 독립적으로 개발 및 테스트를 진행할 수 있도록 만..
VSCode의 인기는 나날로 늘어가고 있는 모양새다. 이런저런 용도로 개발자에게 큰 도움을 주는 도구가 되어 가고 있다. 통합 개발 환경에서도 텍스트 편집기에서도 소스코드를 열면 언어별 문법 요소에 따라 색상을 구분해서 출력해 주는데 이런 기능을 Syntax Highlighting이라 부른다. 그런데, 개인적인 취향 또는 특정한 필요에 따라서 이 색상을 변경할 경우가 있다, 이번 포스팅은 문법 구분 색상을 바꾸는 방법을 간단히 메모한다. 파일> 기본 설정> 설정 메뉴 또는 Ctrl+, 단축키로 설정창을 연다. 설정 창에서 확장> CSS 언어 기능> JSON을 선택하고 우측에서 [settings.json에서 편집]을 클릭한다. 편집창이 열리면 위의 그림처럼 "editor.tokenColorCustomiza..
필자가 아날로니아 UI를 사용하는 크로스플랫폼 앱을 개발하기 위한 사전 단계로 WPF 프로그램을 만드는 과정을 밟아 보고자 한다. 비주얼스튜디오 2019를 사용하고 있는 관계로 비주얼스튜디오를 기반으로 프로그램을 만들어 본다. Window+R 단축키로 "devenv"를 입력하여 비주얼스튜디오 2019를 실행시킨다. [새 프로젝트 만들기]를 선택하고 위의 그림처럼 템플릿 검색창에 wpf를 입력하면 연관된 다양한 템플릿을 만날 수 있는데 C# 기반의 닷넷 코어를 사용하는 템플릿을 선택하고 [다음]을 누른다. 프로젝트 구성은 원하는 폴더와 이름으로 적절히 입력한 다음에 [다음]으로 진행한다. 끝으로 적용할 닷넷 버전을 선택하고 [만들기]를 클릭하면 지정한 템플릿으로 프로그램을 생성한다. 프로젝트가 생성되면 위..
C# 닷넷 환경에서 개발한 프로그램을 윈도우나 리눅스, 맥에 그대로 실행하는 데 있어 가장 큰 장애가 되는 것은 UI 프레임워크이다. WinForms 기반으로 뚝딱뚝딱 프로그램을 만들었던 경험이 있던 개발자가 닷넷 환경을 생각하며 리눅스에서 프로그램을 실행하면 아주 간단한 프로그램이야 별 차이 없이 동작하는 것처럼 보이기도 하지만 UI가 조금이라고 복잡해지고 깊이가 있으면 화면이 깨지거나 아예 실행이 실패하기도 한다. 그래서, 크로스플랫폼을 지원하는 UI 프레임워크를 찾아보다가 아발로니아 UI를 만나게 되었다. 크로스플랫폼을 바이너리 레벨, 즉, 런타임 레벨로 지원하는 것은 아니다. 하나의 소스 코드로 여러 가지 플랫폼에서 구동하는 프로그램을 작성하고자 하는 개발자에게 적절한 솔루션이다. 소스 코드는..
프로그램으로 문자를 보내는 방법은 어떤 서비스 업체를 선택하는가로 시작한다. 네이버와 같은 대형 포털 업체를 사용할 수도 있고 중소 전문 업체를 이용할 수도 있다. 필자의 경우에는 깃허브에 C# 예제 코드와 라이브러리를 공개하고 있는 CoolSMS를 이용하기로 했다. 회원 가입 시점에서 개인 아이디로 가입할지 사업자 계정을 만들지를 묻는다. 당연히 사업자 계정인 경우에는 대량 발송이나 멤버 관리가 필요할 것으로 보인다. 회원 가입이 끝나면 자동으로 위의 그림처럼 300원을 충전해 주므로 건당 20원씩 생각하면 개발 중 15건의 테스트가 가능하다. 개발을 위해서 꼭 필요한 것은 API Key로 [새로운 API KEY] 버튼을 눌러서 키를 발급받는다. 발급 과정에서 IP 대역을 지정하여 특정한 IP대역에..
C#. Net 코드를 작성하며 이메일을 전송하는 코드를 메모한다. WinForm 형식의 프로그램을 작성하는 사례로 위의 그림처럼 발신자의 이메일과 비밀번호, 그리고 발신자의 이메일이 등록되어 있는 SMTP 서버의 정보를 입력받아 지정한 수신자 이메일로 테스트 메일을 전송한다. 간편하게 메일을 전송하려면 코드에 "using System.Net.Mail;"를 포함한다. var mailMessage = new MailMessage{ From = new MailAddress(email_send.Text), Subject = "테스트 메일", Body = "테스트 메일입니다확인했습니다", IsBodyHtml = true};mailMessage.To.Add(email_recv.Text);bool send_ok ..
string conditions = "ThisisaTestData";string[] condary = conditions.Split(new string[] { "" }, StringSplitOptions.RemoveEmptyEntries);foreach (var itm in condary){ tbl_condition.Rows.Add(itm);} C#에서 배열은 리스트나 사전 타입과 달리 항목의 개수가 고정된 데이터 형식이다. 위의 예제 코드에서는 conditions라는 문자열을 Split 함수를 사용하여 문자열 구분자인 ""로 잘라서 condary라는 문자열 배열에 저장하는 작업을 수행했는데 그 결과 배열은 5개의 항목 개수를 가지게 되었다. 이 상태에서 항목을 추가하려면 리스트의 경우에는 add 함수..
개발자가 테스트하는 중에 생기는 예외나 오류는 해당 상황이 재현만 된다면 대부분 디버깅 과정을 통해서 어렵지 않게 찾을 수 있는 것이 사실이다. 그런데, 디버깅할 수 없는 환경이나 기타 상황이라면, 특히 해당 문제점이 거의 재현되지 않는다면 개발자 입장에서는 난감한 상황에 빠질 수밖에 없다. 이런 경우에는 비정상 종료 당시의 상황 정보를 담고 있는 코어 덤프가 있으면 문제의 실마리를 찾아갈 수 있다. 리눅스나 유닉스의 경우에는 코어 덤프 파일을 현재 디렉터리나 시스템 폴더에 남기는데, 윈도우의 경우에는 윈도우 오류 보고(WER, Windows Error Reporting) 레지스트리 설정으로 가능하다. 위의 그림과 같이 regedit를 실행하여 다음과 같은 위치로 이동한다. 컴퓨터\HKEY_LOCAL_..
웹 인터페이스를 보면 대부분의 요소에서 직각은 거의 찾아볼 수 없고 버튼도 검색창도 대부분 라운드 박스 형태를 가진다. 그렇지만, C# Winform 형태의 프로그램 개발 환경에서 라운드 사각형으로 뭔가를 만든다는 것은 쉽지 않은 일이다. 기본 컨트롤에서는 그러한 필요를 채울 수 없기 때문이다. 이번 포스팅에서는 Label 컨트롤을 상속받아 라운드 박스 형태로 출력하는 레이블 컨트롤을 만들어 보고자 한다. public class MYRoundBox : Label{ [Browsable(false)] public new Image Image { get { return base.Image; } set { base.Image = value; } } [Browsable(false)] public new Conte..
웹서버에서 자료가 여러 개인 경우 사용자에게 개별 데이터를 하나하나 클릭해서 다운로드하게 하는 대신에 사용자가 일괄 다운로드를 요청하면 웹서버에서 동적으로 압축 파일을 생성해서 다운로드시키는 방법이다. 크게 두 가지 방법이 있는데, 하나는 서버 경로 상에 이미 존재하는 파일들을 압축 파일로 만들어서 내려보내는 방법이고, 다른 하나는 데이터베이스에 존재하는 것을 읽거나 기타 프로그램에 의해 동적으로 생성하는 내용을 압축 파일로 만들어서 내려보내는 방법이다. ■ 파일 동적 압축 다운로드if (is_dir($folderName)) { $archive_file_name = $folderName.'/downall.zip'; $zip = new ZipArchive(); if ($zip->open($archive_f..
핸드폰에서 세로로 찍은 사진을 사진 뷰어나 그래픽 편집 도구로 확인하면 위의 그림처럼 문제없이 보인다. 그런데, 해당 그림을 C# PictureBox 컨트롤에 적용하면 위의 그림처럼 그림이 자동으로 회전된다. 이 문제는 PictureBox 컨트롤이 JPG나 PNG 파일에 있는 Exif(Exchangeable image file format) 형식을 제대로 지원하지 않아서 생기는 것이다. 핸드폰이나 기타 도구에서 이미지를 저장할 때 가로 형태로 이미지를 저장하고 Orientation 정보(0x112)에 이미지는 90도 회전했다는 식으로 설정했는데 PictureBox 컨트롤이 그 정보를 처리하지 않는다는 것이다. public class MyPictureBox : PictureBox{ private void ..
"C# 배포시 난독화를 해야 할까? - ConfuserEx 사용법" 포스팅에 연관된 글이다. 최근 C# 프로그램을 빌드해서 배포하는 과정에서 난독화를 추가했더니 윈도우 보안(Microsoft Defender)에서 악성 코드로 오탐지되어 당황스러운 상황에 처한 적이 있었다. 할 수 없이 관련 정보를 검색해 보니 유사한 사례를 겪은 사용자도 있었고 최신 프로그램을 배포하는 깃허브 사이트도 있었다. https://github.com/mkaring/ConfuserEx 우선 최신까지 난독화 프로그램을 업데이트하고 있는 곳은 위의 깃허브 사이트이다. 원래 배포하던 https://github.com/yck1509/ConfuserEx를 포크 해서 업데이트하며 버전을 1.6까지 올려서 배포하고 있다. 그리고, Confu..
파이썬의 배열은 여러 원소를 하나의 묶음으로 관리하고 각 원소 간에는 순서(order)가 존재하여 인덱스(Index)를 통해 접근하는 리스트로 파이썬에서는 리스트(list)와 튜플(tuple)이라는 두 가지 타입이 있습니다. 통상 프로그래밍 언어에서 배열은 동일한 데이터 타입의 원소들로 구성되지만 파이썬에서는 각 원소의 데이터 타입이 동일하지 않아도 되고 심지어 다른 배열을 원소로 갖는 것도 허용됩니다. 배열간의 비교는 동일 인덱스끼리 각각 비교해 가는 방식으로 적용됩니다. ■ 리스트(list)와 튜플(tuple) 리스트(list)는 [1, 2, 3] 형태로 정의하며 각 원소를 수정할 수 있는 특성을 갖습니다. []는 빈 list를 의미합니다. >>> b = [1,"aa",3,4,5]>>> type (..
C# 프로그램을 개발하다 보면 외부 패키지를 사용하면 *.DLL 파일들이 하나둘 늘어나고 배포 과정에서 해당 DLL이 있느니, 없느니 하며 오류 원인이 되기도 한다. 그런데, 이렇게 참조하는 DLL 파일들을 프로젝트 리소스로 포함시키고 프로그램 시작 시점에서 해당 DLL들을 로딩하도록 하면 간편하게 DLL을 프로젝트에 내장시키면서 실행파일 하나만으로도 배포가 가능해진다. 일단, *.DLL 파일들을 프로젝트의 Resources 폴더에 복사한다. 솔루션 탐색기에서 Resources.resx를 더블클릭하고 편집창에서 리소스추가> 기존파일추가로 복사한 DLL 파일을 선택한다. 추가한 파일의 리소스 이름, 위의 그림에서는 INIFileParser를 기억해 둔다. DLL의 참조 속성에서 그림과 같이 "로컬 복사"를..
요즘 리눅스 개발환경으로 비주얼스튜디오 코드(VisualStudio Code, 이하 코드로 지칭)를 애용하고 있다. 여러 장점이 있지만 무엇보다 gdb와의 연계를 통한 디버깅 기능이다. 일반적으로 최적화 옵션(-O)을 빼고 디버깅 옵션(-g)을 추가하여 빌드하면 대부분 문제없이 디버깅 기능을 사용할 수 있다. 문제는 프로그램이 시스템 장치를 사용하는 경우 sudo로 실행해야 하는데 이런 경우에는 별도의 처리가 필요하다. 우선 launch.json 파일에서 위의 그림처럼 "MIMode"는 gdb로 둔 상태에서 "miDebuggerPath"에 자신의 디버거 실행 파일의 경로를 입력한다. 이 파일은 쉘 파일로 이곳에서 gdb를 실행하게 될 것이다. pkexec /usr/bin/gdb "$@"쉘 파일의 내용은 ..
리눅스 환경에서의 프로그래밍 과정에서 편리한 통합 개발 환경의 존재는 프로그래머에게 날개를 달아주는 것이다. 맥 환경의 XCode나 윈도우 환경의 비주얼스튜디오가 바로 그런 존재이다. 물론 리눅스 환경에서도 NetBeans, CodeBlocks 등을 사용할 수 있지만 비주얼스튜디오 코드의 등장은 여러모로 반갑다. 필자의 경우 C/C++ 개발 과정에서 gdb와 연동하여 디버깅하는 과정은 나름 만족스러운 수준이다. 그런데 복병이 등장했다. 프로그램이 네트워크 인터페이스나 통신 포트와 같은 시스템 자원을 직접 접근하는 경우에는 sudo 권한이 필요한데 일반적인 상황으로는 sudo 권한을 받는 과정에서 실패하여 디버깅을 할 수 없었다. 여러 가지 해결책이 있으나 시스템 보안을 유지하며 자연스럽게 이러한 필요를 ..
통상 대화창에서 [확인] 버튼을 누르면 필요한 작업을 수행하는 것이 보통이지만 텍스트 입력창에서 엔터키를 눌렀을 때 마우스 클릭 없이 바로 대화창을 종료하고 싶은 사용자가 있기 마련이다. 이러한 경우에 처리할 수 있는 방법이다. 대화창의 디자인 편집기를 열고 텍스트 박스를 선택한 다음 위의 그림과 같이 속성창에서 이벤트 아이콘을 클릭한다. 그리고, "KeyDown" 이벤트를 찾아 우측 공간에 더블클릭하여 자동으로 코드를 만들고 다음과 같이 코드를 작성하면 된다. private void intext_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { gomake_Click(this, new EventArgs()); } } 입력된 ..
QT UI 앱을 작성하다가 특정 메뉴의 서브 메뉴 일부를 라디오 버튼 동작 방식처럼 그룹 중 일부만 선택되도록 하는 필요가 생겼다. 서브 메뉴를 열면 현재 선택 상태도 보인다. 먼저 결과 화면먼저 보면 위의 그림과 같다. 개별 서브메뉴를 선택했을 때 미리 설정된 액션 슬롯도 수행하고 어떤 메뉴가 선택 상태인지도 표시된다. actZoom40 = new QAction(QIcon(), _("40%"),this); connect(actZoom40, SIGNAL(triggered()), this, SLOT(OnZoom40Menu())); actZoom70 = new QAction(QIcon(), _("70%"),this); connect(actZoom70, SIGNAL(triggered()), this, SLOT..