Programming/qt2026. 6. 5. 17:03

전체 화면을 scaling 하는 방법. 일장일단이 있겠지만

화면 비율이 다르면 답없는 건 매한가지 ㅠㅠ

 

[링크 : https://doc.qt.io/archives/qt-5.15/qgraphicsproxywidget.html]

Posted by 구차니
Programming/qt2026. 6. 5. 14:57

QComboBox 등으로 언어를 선택하고 app.installTranslator()를 호출하면

모든 위젯들에게 자동으로 changeLanguage()가 발송된다 (즉, 수동으로 언어 변경 메시지를 전체에 뿌릴 필요가 없다)

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

    QTranslator myappTranslator;
    if (myappTranslator.load(QLocale::system(), u"myapp"_s, u"_"_s, u":/i18n"_s))
        app.installTranslator(&myappTranslator);

    return app.exec();
}

 

위젯들에게 각각 아래의 이벤트 핸들러를 추가해주면 되는데

헤더에는 protected: 에 override 해서 해주면되고

protected:
    void resizeEvent(QResizeEvent *event) override;
    void changeEvent(QEvent *event) override;

 

함수에서는 별거 없이 retranslateUi()를 호출해주면된다.

void MyWidget::changeEvent(QEvent *event)
{
    if (event->type() == QEvent::LanguageChange) {
        ui.retranslateUi(this);
    } else
        QWidget::changeEvent(event);
}

[링크 : https://doc.qt.io/qt-6/ko/i18n-source-translation.html#prepare-for-dynamic-language-changes]

 

확실히 이렇게 하니 시그널들 서로 연결한다고 고생안해도 되서 개꿀

'Programming > qt' 카테고리의 다른 글

QGraphicsProxyWidget  (0) 2026.06.05
QT 자식 위젯으로 생성 / 부모 위젯 연결  (0) 2026.06.05
qt QTabWidget 사용  (0) 2026.06.04
qt 다국어지원 - 보이지 않는 메시지 추가하기  (0) 2026.06.02
QCombobox + 다국어  (0) 2026.05.21
Posted by 구차니
Programming/qt2026. 6. 5. 12:07

위젯 생성시 this를 넣어서 하면, 자식으로 생성되어 별도의 창으로 뜨지 않는다.

QWidget test = new QWidget(); // 독립된 창으로 뜸
test.show();

QWidget test2 = new QWidget(this); // Mainwindow 안에 뜸
test2.show();

 

간단하게(?) parent를 지정해주냐 안해주냐의 차이인듯.

class test : public QWidget
{
    Q_OBJECT

public:
    explicit test(QWidget *parent = nullptr);
    ~test();
}

 

'Programming > qt' 카테고리의 다른 글

QGraphicsProxyWidget  (0) 2026.06.05
QT 다국어 언어 설정 전파  (0) 2026.06.05
qt QTabWidget 사용  (0) 2026.06.04
qt 다국어지원 - 보이지 않는 메시지 추가하기  (0) 2026.06.02
QCombobox + 다국어  (0) 2026.05.21
Posted by 구차니
Programming/qt2026. 6. 4. 11:49

도움은 크게 안되었지만 아이디어를 얻은 페이지

[링크 : https://stackoverflow.com/questions/59594800/confining-background-color-to-triangular-tab-on-qtabbar]

 

Step 1. widget에 Tab Widget을 드래그 한다.

 

Step 2. Tab Widget 사이즈 조절. 만만한게 바로 grid 커져라 얍!

 

Step 3. 탭하나 추가하기

원하는 탭을 하나 선택하고 

 

상위 QTabWidget 에서 우클릭해서 Insert Page - After Current Page

 

그러면 tab_3 추가

 

 

gui 상에서 우클릭해도 바로 되긴한다.

Posted by 구차니
Programming/qt2026. 6. 2. 15:52

gpt 가라사대~

아래와 같이 QT_TRANSLATE_NOOP()을 이용해서 추가하면

GUI 에서 내용이 바뀌기 때문에 여러개 메시지를 넣고 출력하지 않도록 할 필요 없이

내부적으로 tr()을 이용해 끌어오면 될 듯 하다.

static const char *dummy[] = {
    QT_TRANSLATE_NOOP("Language", "Korean"),
    QT_TRANSLATE_NOOP("Language", "English"),
    QT_TRANSLATE_NOOP("Language", "Japanese")
};

 

아래 정의 된 것 처럼, scope와 메시지로 되어있는데

#define QT_TRANSLATE_NOOP(scope, x) x

 

scope는 qt에서 생성한 class 이름으로 하면, 별도의 번역으로 분리되지 않고 하나로 잘 뭉쳐서 나오게 된다.

Posted by 구차니
Programming/qt2026. 5. 21. 14:57

combobox 추가하고

 

추가된 애를 더블 클릭하면

 

Edit Combobox 라고 뜨는데

여기에 한줄씩 추가해서 넣으면 된다.

 

그나저나.. 왜 프로퍼티 창에서 바로 넣을수 있는 곳은 없는걸까?

[링크 : https://dibrary.tistory.com/21]

 

아래는 GPT가 짜준거

일단 값이 변경되는 이벤트에서 언어 파일을 읽게 하고,

changeEvent()를 오버라이드 해서 언어 변경 이벤트에 대해서 적용하고

combobox의 시그날 발생을 잠시 막고(갱신되면서 0번 인덱스로 가는것 방지)

이전의 인덱스를 복구해주고, 시그널 발생을 다시 가능하게 해주는 식으로 끝. 천잰데?

protected:
    void changeEvent(QEvent *event) override;

 

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->s
// Connect combobox signal
    connect(ui->comboBox, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &Widget::on_comboBox_currentIndexChanged);
}

void Widget::changeEvent(QEvent *event)
{
    if (event->type() == QEvent::LanguageChange) {
        int currentIndex = ui->comboBox->currentIndex();
        ui->comboBox->blockSignals(true);
        ui->retranslateUi(this);
        ui->comboBox->setCurrentIndex(currentIndex);
        ui->comboBox->blockSignals(false);
    }
    QWidget::changeEvent(event);
}

void Widget::on_comboBox_currentIndexChanged(int index)
{
    QString langFile;
    switch(index) {
        case 0: langFile = "untitled_ko_KR"; break;
        case 1: langFile = "untitled_en_US"; break;
        case 2: langFile = "untitled_el_GR"; break;
        case 3: langFile = "untitled_fr_FR"; break;
        case 4: langFile = "untitled_es_ES"; break;
        case 5: langFile = "untitled_pt_PT"; break; // Note: combo says polish but translations exist for pt_PT
        case 6: langFile = "untitled_sk_SK"; break;
        case 7: langFile = "untitled_ru_RU"; break;
        default: langFile = "untitled_en_US"; break;
    }
    
    if (m_translator.load(":/i18n/" + langFile)) {
        qApp->installTranslator(&m_translator);
    }
}
Posted by 구차니
Programming/qt2026. 5. 20. 12:17

antigravity 가지고 물어보니 이거 하나 넣으라니 정말 되네.

 

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    setAttribute(Qt::WA_StyledBackground);
}

 

 

Qt::WA_StyledBackground 93 Indicates the widget should be drawn using a styled background.

[링크 : https://doc.qt.io/qt-6/qt.html]

[링크 : https://runebook.dev/ko/docs/qt/stylesheet-reference]

 

QWidget은 원래 배경 색상만 지원하도록 만든 클래스인가 보네..

[링크 : https://doc.qt.io/qt-6/stylesheet-reference.html]

'Programming > qt' 카테고리의 다른 글

qt 다국어지원 - 보이지 않는 메시지 추가하기  (0) 2026.06.02
QCombobox + 다국어  (0) 2026.05.21
QT 런타임중 언어 변경  (0) 2026.05.14
QT QMainWindow, QWidget, QDialog  (0) 2026.05.14
QT 창관리  (0) 2026.05.13
Posted by 구차니
Programming/qt2026. 5. 14. 17:49

아직 테스트는 못해봄.

일단 실행시에 LANG 으로 바꾸는건 해봤는데

실행중에 바꾸어야 할 것 같아서 찾아봄.

 

기존 translator을 제거(QApplication::removeTranslator)하고, 다시 install(위 적용 참조)한다. 
      
          app.removeTranslator(&translator);
          translator.load("lang/ko_kr");
          app.installTranslator(&translator);
      
    installTranslator하면, QEvent::LanguageChange이벤트가 발생한다. 이 이벤트로 번역문자열이 새로운 translator에 의해 적용되도록 한다. 
         
          void MainWindow::changeEvent(QEvent* event)
          {
              if (event->type() == QEvent::LanguageChange)
              {
                  // 디자이너에 의해 생성된 문자열
                  ui.retranslateUi(this);
            
                  // 코드에서 삽입한 문자열
                  retranslate();
              }
              QMainWindow::changeEvent(event);
          }

[링크 : https://dorigom.tistory.com/359]

'Programming > qt' 카테고리의 다른 글

QCombobox + 다국어  (0) 2026.05.21
qt widget 에서 배경화면 스타일 시트 적용 안될 경우  (0) 2026.05.20
QT QMainWindow, QWidget, QDialog  (0) 2026.05.14
QT 창관리  (0) 2026.05.13
QString arg()  (0) 2026.05.13
Posted by 구차니
Programming/qt2026. 5. 14. 15:30

 

QMainWindow

 -  내부는 QWidget 으로 채워질수 있음

 + setWindowModality(Qt::WindowModal)

 + show()

 + raise() 로 띄움

 QDialog

 -  별도 창에 표시되는 취상위 위젯

 + setWindowModality(Qt::WindowModal)

 + exec() 로 띄움

 - QWidget 기반

QWidget

 - 어떻게 보면 얘가 근본?

 [링크 : https://ggangtalife.tistory.com/entry/PyQt5-클래스-QMainWindow-QDialog-QWidget-차이점]

 

다이얼로그

 - modal 속성으로 주로 사용(제어권 독점) 

 - 확인/취소 누르는 용도

[링크 : https://coding-kindergarten.tistory.com/171]

'Programming > qt' 카테고리의 다른 글

qt widget 에서 배경화면 스타일 시트 적용 안될 경우  (0) 2026.05.20
QT 런타임중 언어 변경  (0) 2026.05.14
QT 창관리  (0) 2026.05.13
QString arg()  (0) 2026.05.13
qt 동적 크기  (0) 2026.05.12
Posted by 구차니
Programming/qt2026. 5. 13. 15:24

show() 보이기

hide() 숨기기

raise() 가장 위로 창 옮기기

activateWindow() 윈도우 기준 입력 활성화(포커스)

setFocus() 위젯 기준 입력 활성화

'Programming > qt' 카테고리의 다른 글

QT 런타임중 언어 변경  (0) 2026.05.14
QT QMainWindow, QWidget, QDialog  (0) 2026.05.14
QString arg()  (0) 2026.05.13
qt 동적 크기  (0) 2026.05.12
QT QPushButton 의 텍스트 폰트 / 색상 변경하기  (0) 2026.05.11
Posted by 구차니