• QT 시작
qt console app 으로 프로젝트 시작
cmake 빌드
-프로젝트 생성해서 디버그 찍어보기
#include <QCoreApplication>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
qDebug("Hello Qt");
qDebug() << "test!";
return a.exec();
}
- 온클릭 이벤트
#include <QApplication>
#include <QLabel>
#include <QPushButton>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
QLabel hello("<font color = red> Hello <i>Qt!</i> </font>",&w);
hello.resize(75,35);
QPushButton quit("quit",&w);
quit.move(10,40);
quit.resize(75,35);
QObject::connect(&quit, &QPushButton::clicked,
&hello,[&](){hello.setText("<b>Hi</b>");});
w.show();
return a.exec();
}
- signal로 값 전달하기
인자 값을 전달하려면 람다식을 사용해서 넘겨줘야 한다...
아니면 넘기려는 인자가 0~9면 함수 10개를 만들어줘야 하는 어지러운 상황
#include "mainwindow.h"
#include <QApplication>
#include <QLCDNumber>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLCDNumber *lcd = new QLCDNumber();
lcd->setSegmentStyle(QLCDNumber::Filled);
lcd->setBinMode();
lcd->setDigitCount(14);
lcd->display(1512);
lcd->show();
return a.exec();
}
-- 프로그레스바를 만들고 특정 퍼센트에 도달하면 멈추게 하기
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QProgressBar* progBar = new QProgressBar();
progBar->setRange(0, 100);
progBar->show();
QTimer timer;
int n = 0;
QObject::connect(&timer,&QTimer::timeout,[&]{
progBar->setValue(++n%101);
if(progBar->value() == 84) timer.stop();
});
timer.start(5);
return a.exec();
}
--qt로 html 파일 열기
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextBrowser *tb = new QTextBrowser();
tb->setSource(QUrl("index.html"));
tb->show();
return a.exec();
}
--토글 버튼 만들기
toggle는 눌리면 true, 다시 눌리면 false를 리턴한다
누르면 디버그에 toggled를 리턴하고 다시 누르면 quit가 되는 버튼
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton *pushButton = new QPushButton("Push&Button",0);
pushButton->setCheckable(true);
QObject::connect(pushButton, &QPushButton::toggled,[&](bool flag){qDebug() << "toggled";
if(!flag) a.quit();});
pushButton->show();
return a.exec();
}
-단축문자
Button 앞에 들어간 &는 B를 단축문차로 사용가능하게 한다
alt + 단축문자로 버튼을 누른 효과를 낼 수 있다
QPushButton *pushButton = new QPushButton("Push&Button",0);
-숏컷
pushButton->setShortcut(QKeySequence("ctrl+c"));
QkeySeqence("숏컷 단축키"); 형태로 만들어두면 해당 키를 눌럿을때 버튼을 누른 효과를 낼 수 있다
-- 이미지 추가하기
프로젝트 우클릭 - qt resource 파일 추가
qrc 파일 생성돤거를 클릭해서 prefix에 add files로 이미지 파일 추가
pushButton->setIcon(QIcon(":/resource/android.png"));
qt에서는 ":"를 상위 경로로 쓰는 것 같다
이미지를 아이콘으로 넣어 줄 수 있다
-- 라디오버튼
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLabel>
#include <QRadioButton>
#include <QButtonGroup>
class QRadioButton;
class QButtonGroup;
class widget : public QWidget
{
Q_OBJECT
public:
widget(QWidget *parent = 0);
~widget();
private:
QLabel *label;
QRadioButton *radiobtn[4];
QButtonGroup *buttonGroup;
};
#endif // WIDGET_H
widget.cpp 라디오버튼에 이름 넣어주고 클릭시 해당 번호 버튼 클릭되었다고 해주기
#include "widget.h"
#include <QRadioButton>
#include <QButtonGroup>
widget::widget(QWidget *parent) : QWidget(parent){
resize(140,110);
buttonGroup = new QButtonGroup(this);
for (int i = 0; i < 4; i++) {
QString str = QString("RadioButton") + QString::number(i+1);
radiobtn[i] = new QRadioButton(str,this);
radiobtn[i]->move(10,10+20*i);
buttonGroup->addButton(radiobtn[i]);
}
connect(buttonGroup, &QButtonGroup::buttonClicked, [=](){
for(int i = 0; i < 4; i++){
if(radiobtn[i]->isChecked()){
qDebug() << i+1 << "btn clicked";
}
}
});
}
widget::~widget() {
// 소멸자에서 특별히 할 일은 없지만, 명시적으로 정의
}
메인
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
widget w;
w.show();
return a.exec();
}
-- 슬라이더
#include <QApplication>
#include <QLabel>
#include "widget.h"
#include <QSlider>
#include <QStyleFactory>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSlider *slider = new QSlider();
slider->setOrientation(Qt::Horizontal);
slider->setTickPosition(QSlider::TicksAbove);
slider->setStyle(QStyleFactory::create("Fusion"));
slider->show();
return a.exec();
}
--다이얼
다이얼 돌리면 현재 값을 가져오는 코드
#include <QApplication>
#include <QDial>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QDial *dial = new QDial();
dial->setWrapping(true);
dial->show();
QObject::connect(dial, &QDial::valueChanged,[=](){
qDebug() << dial->value();
});
return a.exec();
}
-- 스핀박스
#include <QApplication>
#include <QSpinBox>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QSpinBox *spin = new QSpinBox();
spin->setRange(0,10);
spin->setSuffix("%");
spin->setWrapping(true);
spin->setSpecialValueText("parcento");
spin->show();
QObject::connect(spin, &QSpinBox::valueChanged, [=](){
qDebug() << spin->value();
});
return a.exec();
}
-- LineEdit, 자동완성
#include <QApplication>
#include <QLineEdit>
#include <QCompleter>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLineEdit *line = new QLineEdit();
QStringList list;
list << "test" << "aaaaa" << "bbbbb" << "ccccc";
QCompleter *completer = new QCompleter(list,line);
completer->setCaseSensitivity(Qt::CaseInsensitive);
line->setCompleter(completer);
line->show();
return a.exec();
}
-- 입력받은게 특정 qstring 값과 같으면 출력
#include <QApplication>
#include <QLineEdit>
#include <QCompleter>
#include <Qstring>
using namespace std;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QLineEdit *line = new QLineEdit();
line->show();
QString pw = "testpw";
QObject::connect(line,&QLineEdit::editingFinished,[=]{
QString get = line->text();
if(get == pw) qDebug() << get;
});
return a.exec();
}
--레이아웃
QVBoxLayout - 버티컬
QHBoxLayout - 호리즌탈
#include "widget.h"
#include <QVBoxLayout>
#include <QPushButton>
widget::widget(QWidget *parent) : QWidget(parent){
QPushButton * btn1 = new QPushButton();
btn1->setText("btn1");
QPushButton * btn2 = new QPushButton("btn2");
QPushButton * btn3 = new QPushButton("btn3",this);
QVBoxLayout * layout = new QVBoxLayout();
layout->setSpacing(6);
layout->addWidget(btn1);
layout->addWidget(btn2);
layout->addWidget(btn3);
setLayout(layout);
}
-- 그리드 레이아웃
#include "widget.h"
#include <QtWidgets>
#include <QPushButton>
widget::widget(QWidget *parent) : QWidget(parent){
QStringList labels;
labels << "&IP" << "&PW" << "&Date";
QLineEdit* line[3];
QString ans[3] = {"testid", "testpw", "test"};
QFormLayout* layout = new QFormLayout;
for (int i = 0; i < 3; ++i) {
line[i] = new QLineEdit(this);
layout->addRow(labels.at(i),line[i]);
connect(line[i], &QLineEdit::editingFinished, [=](){
if (line[i]->text() == ans[i]) qDebug() << "success";
});
}
QGroupBox* box = new QGroupBox("&login", this);
box->move(5,5);
box->setLayout(layout);
resize(box->sizeHint().width()*2,box->sizeHint().height()*2);
}
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QLabel>
#include <QRadioButton>
#include <QButtonGroup>
#include <QCheckBox>
class widget : public QWidget
{
Q_OBJECT
public:
widget(QWidget *parent = 0);
private:
QLabel *label;
};
#endif // WIDGET_H
--QTabWidget
탭 여러개 만들기
#include "widget.h"
#include <QtWidgets>
#include <QPushButton>
widget::widget(QWidget *parent) : QWidget(parent){
QDial *dial = new QDial(this);
QCalendarWidget* cal = new QCalendarWidget(this);
QTextEdit* te = new QTextEdit("tab 3", this);
QTabWidget *tw = new QTabWidget(this);
tw->addTab(dial,"Tab&1");
tw->addTab(cal,"Tab&2");
tw->addTab(te,"Tab&3");
resize(tw->sizeHint());
}
'대외활동 > 시스템프로그래밍' 카테고리의 다른 글
0808 Qt 메세지박스, 자료구조 (0) | 2024.08.08 |
---|---|
0807 QT 에디터 & 액션 (0) | 2024.08.07 |
modern c++ (0) | 2024.07.31 |
스마트 포인터 (0) | 2024.07.31 |
예외 처리 (0) | 2024.07.31 |