SlideShare a Scribd company logo
1 of 56
Download to read offline
QtとC++で
GUIプログラミング
@seanchas_t
2013年9月28日
13年9月29日日曜日
自己紹介
• twitter.com/seanchas_t
• [PR] Qtでペイントソフトを制作中
- github.com/iofg2100/PaintField
13年9月29日日曜日
イントロダクション
13年9月29日日曜日
はじめに
• C++でGUIアプリを作ろう
• 今回紹介するのは
Qtを使ったGUIアプリ開発
- コード例、Qtのシステムの概略の紹介
13年9月29日日曜日
目次
• イントロダクション
• 使ってみる (Qt Widgets編)
• 使ってみる (Qt Quick編)
• QObjectについて
• Qtのコンテナライブラリ
• Qtの描画システム
13年9月29日日曜日
Qtについて
• クロスプラットフォームのアプリケーション、UIフ
レームワーク
- WindowsでもMacでもLinuxでも
同じコードが動く
- Android、iOSにもQt 5.1から実験的に対応
- 今回はデスクトップに限った話
13年9月29日日曜日
Getting Started
• qt-project.org/downloads
からダウンロード
- もしくはお好きなパッケージマネージャで
• 統合開発環境はQt Creator
• C++11を使う場合は、
プロジェクトファイル (*.pro) に
“CONFIG += c++11” を追加
13年9月29日日曜日
使ってみる (Qt Widgets編)
13年9月29日日曜日
Qt Widgetsとは
• Qtに昔からある、GUIの記述方法
• C++で各UI部品を作って配置
13年9月29日日曜日
• ボタンを押したら数字が1増える
シンプルなカウンタを作ろう
こんな感じ
ボタン
ラベル
13年9月29日日曜日
シンプルなカウンタを作ろう
カウンタ
イメージ図
ボタン ラベル
クリック
カウントアップ 値が変化
文字列を更新 ↓UI
13年9月29日日曜日
シンプルなカウンタを作ろう
• Qtでは「シグナル」と「スロット」
を使ってこの図と同じようにコードを組む
13年9月29日日曜日
カウンタ
class Counter : public QObject
{
Q_OBJECT
public:
explicit Counter(QObject *parent = 0) : QObject(parent) {}
signals:
void countChanged(int count);
public slots:
void increment()
{
++m_count;
emit countChanged(m_count);
}
private:
int m_count = 0;
};
13年9月29日日曜日
カウンタ
class Counter : public QObject
{
Q_OBJECT
public:
explicit Counter(QObject *parent = 0) : QObject(parent) {}
signals:
void countChanged(int count);
public slots:
void increment()
{
++m_count;
emit countChanged(m_count);
}
private:
int m_count = 0;
};
このオブジェクトが
発することのできる「シグナル」
(値が変化したことを知らせる)
13年9月29日日曜日
カウンタ
class Counter : public QObject
{
Q_OBJECT
public:
explicit Counter(QObject *parent = 0) : QObject(parent) {}
signals:
void countChanged(int count);
public slots:
void increment()
{
++m_count;
emit countChanged(m_count);
}
private:
int m_count = 0;
};
シグナルに呼応して
実行される「スロット」
(カウントアップ)
13年9月29日日曜日
トップレベルのウィジェット
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(Counter *counter, QWidget *parent = 0) : QWidget(parent)
{
auto layout = new QVBoxLayout();
auto label = new QLabel("0");
connect(counter, SIGNAL(countChanged(int)), label, SLOT(setNum(int)));
layout->addWidget(label);
auto button = new QPushButton("Increment");
connect(button, SIGNAL(pressed()), counter, SLOT(increment()));
layout->addWidget(button);
setLayout(layout);
}
};
13年9月29日日曜日
トップレベルのウィジェット
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(Counter *counter, QWidget *parent = 0) : QWidget(parent)
{
auto layout = new QVBoxLayout();
auto label = new QLabel("0");
connect(counter, SIGNAL(countChanged(int)), label, SLOT(setNum(int)));
layout->addWidget(label);
auto button = new QPushButton("Increment");
connect(button, SIGNAL(pressed()), counter, SLOT(increment()));
layout->addWidget(button);
setLayout(layout);
}
};
レイアウトで
ボタンやラベルを配置
13年9月29日日曜日
トップレベルのウィジェット
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(Counter *counter, QWidget *parent = 0) : QWidget(parent)
{
auto layout = new QVBoxLayout();
auto label = new QLabel("0");
connect(counter, SIGNAL(countChanged(int)), label, SLOT(setNum(int)));
layout->addWidget(label);
auto button = new QPushButton("Increment");
connect(button, SIGNAL(pressed()), counter, SLOT(increment()));
layout->addWidget(button);
setLayout(layout);
}
};
先ほどのCounterと、
ボタン・ラベルのシグナル/スロットを接続
13年9月29日日曜日
main関数
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Counter counter;
Widget widget(&counter);
widget.show();
return app.exec();
}
結局こんな感じになる
(先ほどと同じ)
13年9月29日日曜日
使ってみる (Qt Quick編)
13年9月29日日曜日
Qt Quickとは
• QMLという言語を使ってUIを記述
• QMLは動的にロードされる
• CSSっぽくオブジェクトを配置、
プロパティを設定
• JavaScriptでロジックも記述可能
- JavaScriptでは無理なことも
• ローカルファイルへのアクセスとか
13年9月29日日曜日
Qt Quickとは
• C++との連携も可能
- QMLからC++を呼び出す
- C++からQMLを呼び出す
- Qt QuickのUIアイテムをC++で実装する
• C++だとQQuickItem
13年9月29日日曜日
カウンタ
class Counter : public QObject
{
Q_OBJECT
public:
explicit Counter(QObject *parent = 0) : QObject(parent) {}
Q_PROPERTY(int count READ count WRITE setCount NOTIFY countChanged)
int count() const { return m_count; }
void setCount(int count) { m_count = count; }
signals:
void countChanged(int count);
public slots:
void increment()
{
++m_count;
emit countChanged(m_count);
}
private:
int m_count = 0;
};
13年9月29日日曜日
カウンタ
class Counter : public QObject
{
Q_OBJECT
public:
explicit Counter(QObject *parent = 0) : QObject(parent) {}
Q_PROPERTY(int count READ count WRITE setCount NOTIFY countChanged)
int count() const { return m_count; }
void setCount(int count) { m_count = count; }
signals:
void countChanged(int count);
public slots:
void increment()
{
++m_count;
emit countChanged(m_count);
}
private:
int m_count = 0;
};
setter、getter、変更時のsignalを登録して
プロパティを宣言
13年9月29日日曜日
QML
import QtQuick 2.1
import QtQuick.Controls 1.0
ApplicationWindow {
title: "Window"
Column {
anchors.fill: parent
anchors.margins: 10
spacing: 10
Label {
text: counter.count
}
Button {
text: "Button"
onClicked: {
counter.increment()
}
}
}
}
13年9月29日日曜日
QML
import QtQuick 2.1
import QtQuick.Controls 1.0
ApplicationWindow {
title: "Window"
Column {
anchors.fill: parent
anchors.margins: 10
spacing: 10
Label {
text: counter.count
}
Button {
text: "Button"
onClicked: {
counter.increment()
}
}
}
}
Qt Quick Controls
以前のQt Quickにはなかったボタン、メニューなどの
よく使うGUI部品などが使えるようになった
(5.1から)
13年9月29日日曜日
QML
import QtQuick 2.1
import QtQuick.Controls 1.0
ApplicationWindow {
title: "Window"
Column {
anchors.fill: parent
anchors.margins: 10
spacing: 10
Label {
text: counter.count
}
Button {
text: "Button"
onClicked: {
counter.increment()
}
}
}
}
C++で書いたCounterオブジェクトを使用可能
13年9月29日日曜日
QML
import QtQuick 2.1
import QtQuick.Controls 1.0
ApplicationWindow {
title: "Window"
Column {
anchors.fill: parent
anchors.margins: 10
spacing: 10
Label {
text: counter.count
}
Button {
text: "Button"
onClicked: {
counter.increment()
}
}
}
}
プロパティバインディング
13年9月29日日曜日
プロパティバインディング
• プロパティに他のオブジェクトの
プロパティを使った式を使うと、
自動的にその変化に追従させられる
• Reactive Programming
- Excelっぽい
• QMLの大きな特徴
13年9月29日日曜日
QML
import QtQuick 2.1
import QtQuick.Controls 1.0
ApplicationWindow {
title: "Window"
Column {
anchors.fill: parent
anchors.margins: 10
spacing: 10
Label {
text: counter.count
}
Button {
text: "Button"
onClicked: {
counter.increment()
}
}
}
}
プロパティバインディング
textが、counterのcountプロパティ
(先ほど宣言した)に追従
13年9月29日日曜日
QML
import QtQuick 2.1
import QtQuick.Controls 1.0
ApplicationWindow {
title: "Window"
Column {
anchors.fill: parent
anchors.margins: 10
spacing: 10
Label {
text: counter.count
}
Button {
text: "Button"
onClicked: {
counter.increment()
}
}
}
}
JavaScriptで処理を書ける
(カウンタのインクリメント)
13年9月29日日曜日
main関数
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QQmlApplicationEngine engine(QUrl("qrc:/main.qml"));
Counter counter;
engine.rootContext()->setContextProperty("counter", &counter);
auto window = qobject_cast<QQuickWindow *>(engine.rootObjects().first());
window->show();
return a.exec();
}
13年9月29日日曜日
main関数
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QQmlApplicationEngine engine(QUrl("qrc:/main.qml"));
Counter counter;
engine.rootContext()->setContextProperty("counter", &counter);
auto window = qobject_cast<QQuickWindow *>(engine.rootObjects().first());
window->show();
return a.exec();
}
counterをQML内で使えるようにする
13年9月29日日曜日
main関数
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QQmlApplicationEngine engine(QUrl("qrc:/main.qml"));
Counter counter;
engine.rootContext()->setContextProperty("counter", &counter);
auto window = qobject_cast<QQuickWindow *>(engine.rootObjects().first());
window->show();
return a.exec();
} ApplicationWindow(C++ではQQuickWindowに相当)
を参照して表示させる
13年9月29日日曜日
QObject
13年9月29日日曜日
QObjectとは
• 普通のC++にはないQtの様々な機能
- signal・slot
- QMLからの
メソッドの動的な呼び出し
QObjectの機能
13年9月29日日曜日
QObjectとは
• QWidget系のオブジェクトも
QMLのオブジェクトも
全部QObjectから派生している
• 先ほど作ったCounterクラスもQObjectから派生
13年9月29日日曜日
QObjectの例 (さっきの)
class Counter : public QObject
{
Q_OBJECT
public:
explicit Counter(QObject *parent = 0) : QObject(parent) {}
Q_PROPERTY(int count READ count WRITE setCount NOTIFY countChanged)
int count() const { return m_count; }
void setCount(int count) { m_count = count; }
signals:
void countChanged(int count);
public slots:
void increment()
{
++m_count;
emit countChanged(m_count);
}
private:
int m_count = 0;
};
signal・slot
プロパティ
13年9月29日日曜日
QObjectの機能
• 親子構造
• シグナルとスロット
• プロパティ
• リフレクション
- 動的なメソッドの呼び出し
- 動的なプロパティの書き換え
• など
13年9月29日日曜日
QObjectの機能
• なぜこんなことができるのか?
- Meta-Object Compiler (MOC) の活躍
- ビルド時にヘッダファイルを読み込んで
各クラスごとに特殊なコードを生成
- Q_OBJECTマクロが必要
13年9月29日日曜日
QObjectの親子構造
• QObjectは親子構造を持つことができる
• 親がdeleteされると子もdelete
- わざわざ手動でdeleteする必要がない
• QObjectのメモリ管理は
この親子関係で行われる
13年9月29日日曜日
QObjectの親子構造
auto parent = new QObject();
auto child1 = new QObject(parent);
auto child2 = new QObject();
child2->setParent(parent);
delete parent;
child1, child2も自動的にdeleteされる
13年9月29日日曜日
シグナルとスロット
• signalを発すると、そのsignalに接続された
すべてのslotが呼び出される
• QObject::connectで接続
• 類似のライブラリ: Boost.Signals2
• スレッド間でも使える
(イベントとしてキューされる)
13年9月29日日曜日
シグナルとスロット
auto lineEdit = new QLineEdit();
auto label = new QLabel();
connect(lineEdit, SIGNAL(textChanged(QString)), label, SLOT(setText(QString)));
connect(lineEdit, &QLineEdit::textChanged, label, &QLabel::setText);
connect(lineEdit, &QLineEdit::textChanged, [](const QString &text){
qDebug() << "text changed to" << text;
});
従来の方法。SIGNALとSLOTは実は文字列を返すマクロ
メンバ関数ポインタで接続 (Qt5から)
任意の関数オブジェクトを接続 (Qt5から)
13年9月29日日曜日
動的なメソッドの呼び出し
• signalや、Q_INVOKABLEを付けたメソッドは
動的に呼び出すことができる
• QMLからでも呼び出せるようになる
13年9月29日日曜日
動的なメソッドの呼び出し
class Object : public QObject
{
Q_OBJECT
public:
explicit Object(QObject *parent = 0);
void method1();
Q_INVOKABLE void method2();
public slots:
void slot1();
};
NG
OK
13年9月29日日曜日
Qtのコンテナライブラリ
13年9月29日日曜日
Qtのコンテナライブラリ
• Qtには、様々な独自のコンテナライブラリが
用意されている
- QString (文字列)
- QList (リスト)
- QHash (辞書)
- など
13年9月29日日曜日
Qtのコンテナライブラリ
• STLとの違い
- メソッドが豊富
- コピーオンライトである
• コンテナをコピーしても、変更が加わるまでは
同じ内部データを共有する
• shared_ptrとかmove semanticsとか
考えなくてもいい
- 総じてSTLより易しい
13年9月29日日曜日
Qtのコンテナライブラリ
• STLとの互換性
- begin()、end()などは用意されている
• range-based forでも使える
• STLのアルゴリズムが使える
- QList、QHashではinitializer_listも使える
13年9月29日日曜日
Qtの描画システム
13年9月29日日曜日
描画システム (Qt Widgets)
• 描画イベントが発生すると
QWidget::paintEventが呼ばれる
• QWidget::paintEvent内で実際に描画
class Widget : public QWidget
{
...
protected:
void paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setBrush(Qt::red);
painter.drawEllipse(0, 0, 100, 100);
}
};
13年9月29日日曜日
描画システム (Qt Quick)
• scene graph
(描画する図形や変形などを木構造で表したグラフ)
を構築して描画が行われる
• scene graphの更新時、各Itemごとに、
QQuickItem::updatePaintNodeが呼ばれる
• scene graphはメインとは別のスレッドで描画される
• (QQuickPaintedItemを継承して
QWidget風の描画方法も一応可能)
13年9月29日日曜日
描画システム (Qt Quick)
class Item : public QQuickItem
{
Q_OBJECT
public:
explicit Item(QQuickItem *parent = 0) : QQuickItem(parent)
{
this->setFlag(ItemHasContents, true);
}
protected:
QSGNode *updatePaintNode(QSGNode *old, UpdatePaintNodeData *)
{
auto node = static_cast<QSGSimpleRectNode *>(old);
if (!node) {
node = new QSGSimpleRectNode();
node->setColor(Qt::red);
}
node->setRect(this->boundingRect());
return node;
}
};
13年9月29日日曜日
まとめ
• Qtの簡単な使用例と概要について紹介
• C++の応用の参考の1つになれば幸い
13年9月29日日曜日
以上です
13年9月29日日曜日

More Related Content

What's hot

Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Kenjiro Kubota
 
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメSatoshi Takami
 
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座Hiroko Tamagawa
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~NTT Communications Technology Development
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#Yoshifumi Kawai
 
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたRedmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたKohei Nakamura
 
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!アプリ開発検証はLXC+Ansibleで楽ちんにやろう!
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!Mutsumi IWAISHI
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理Tadashi Miyazato
 
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)Yasuharu Nishi
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはJun-ichi Sakamoto
 
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しようUnity Technologies Japan K.K.
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)NTT DATA Technology & Innovation
 
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月VirtualTech Japan Inc.
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがないTakuya ASADA
 
分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報Emma Haruka Iwao
 

What's hot (20)

Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。Akkaとは。アクターモデル とは。
Akkaとは。アクターモデル とは。
 
入門!Jenkins
入門!Jenkins入門!Jenkins
入門!Jenkins
 
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
[JJUG CCC 2021 Spring]Eclipse ユーザのための VSCode のススメ
 
第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座第9回Jenkins勉強会 超簡単Pipeline講座
第9回Jenkins勉強会 超簡単Pipeline講座
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
 
Redmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみたRedmine にいろいろ埋め込んでみた
Redmine にいろいろ埋め込んでみた
 
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!アプリ開発検証はLXC+Ansibleで楽ちんにやろう!
アプリ開発検証はLXC+Ansibleで楽ちんにやろう!
 
OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理OSSを利用したプロジェクト管理
OSSを利用したプロジェクト管理
 
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
品質を加速させるために、テスターを増やす前から考えるべきQMファンネルの話(3D版)
 
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とはがんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
がんばらなくても C# で Single Page Web アプリケーションが書けてしまう「Blazor」とは
 
【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう【Unity道場】ゲーム制作に使う数学を学習しよう
【Unity道場】ゲーム制作に使う数学を学習しよう
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
Kubernetes 基盤における非機能試験の deepdive(Kubernetes Novice Tokyo #17 発表資料)
 
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
今さら聞けない人のためのDocker超入門 – OpenStack最新情報セミナー 2015年4月
 
僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない僕のIntel nucが起動しないわけがない
僕のIntel nucが起動しないわけがない
 
分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報分散ストレージ技術Cephの最新情報
分散ストレージ技術Cephの最新情報
 

Similar to QtとC++でGUIプログラミング

Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 NagoyaQtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 NagoyaKazuo Asano (@kazuo_asa)
 
JDK8で変わるJavaプログラミング
JDK8で変わるJavaプログラミングJDK8で変わるJavaプログラミング
JDK8で変わるJavaプログラミングGo Hayakawa
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜Masaya Aoyama
 
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanakoQtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanakoKazuo Asano (@kazuo_asa)
 
memcached proxy server development and operation
memcached proxy server development and operationmemcached proxy server development and operation
memcached proxy server development and operationTatsuhiko Kubo
 
jsCafe v13 Grunt
jsCafe v13 GruntjsCafe v13 Grunt
jsCafe v13 GruntShinya Sugo
 
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤Google Cloud Platform - Japan
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1Uehara Junji
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8Kohei KaiGai
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11えぴ 福田
 
Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018真吾 吉田
 
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Anaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみたAnaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみたYosuke Onoue
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfaceKohei KaiGai
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Clooaokomoriuta
 
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみようGoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみようHidemasa Togashi
 
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)智啓 出川
 

Similar to QtとC++でGUIプログラミング (20)

Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 NagoyaQtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 Nagoya
 
JDK8で変わるJavaプログラミング
JDK8で変わるJavaプログラミングJDK8で変わるJavaプログラミング
JDK8で変わるJavaプログラミング
 
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
CI/CD Pipeline を考える 〜KubeCon 2017 + CyberAgent の最大公倍数〜
 
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanakoQtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako
Qtではじめるクロスプラットフォームアプリケーション開発 osc2019 hamanako
 
memcached proxy server development and operation
memcached proxy server development and operationmemcached proxy server development and operation
memcached proxy server development and operation
 
jsCafe v13 Grunt
jsCafe v13 GruntjsCafe v13 Grunt
jsCafe v13 Grunt
 
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
CEDEC 2015: Google スケールで実現する!ゲーム&分析基盤
 
New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1New features of Groovy 2.0 and 2.1
New features of Groovy 2.0 and 2.1
 
20170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#820170127 JAWS HPC-UG#8
20170127 JAWS HPC-UG#8
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 
Boost sg msgpack
Boost sg msgpackBoost sg msgpack
Boost sg msgpack
 
Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018Architecting on Alibaba Cloud - Fundamentals - 2018
Architecting on Alibaba Cloud - Fundamentals - 2018
 
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Anaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみたAnaconda & NumbaPro 使ってみた
Anaconda & NumbaPro 使ってみた
 
DevSap20130921
DevSap20130921DevSap20130921
DevSap20130921
 
PostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join InterfacePostgreSQL v9.5の新機能~CustomScan/Join Interface
PostgreSQL v9.5の新機能~CustomScan/Join Interface
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
 
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみようGoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
 
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)
2015年度GPGPU実践基礎工学 第3回 GPUクラスタ上でのプログラミング(CUDA)
 

Recently uploaded

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 

Recently uploaded (9)

TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 

QtとC++でGUIプログラミング