まずは、メインウィンドウを持ったアプリケーションのスケルトン(骨組み)を作成し、ビルド・実行してみる。
今回は Qt のシグナル・スロットの使用方法をC++コードレベルで理解するために、QtDesiner を使用しない
→ Qt アプリケーションのスケルトンが作成される。
メインウィンドウの paintEvent() をオーバライドし、中央に "hello, world" を表示してみる。
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void paintEvent(QPaintEvent *event);
};
#include <QtGui>
#include "mainwindow.h"
.....
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setPen(Qt::blue);
painter.setFont(QFont("Arial", 20));
painter.drawText(rect(), Qt::AlignCenter, "Hello, world.");
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void paintEvent(QPaintEvent *event);
public slots:
void setMessage(const QString &);
private:
QString m_message;
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
m_message = "hello, world.";
}
void MainWindow::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setPen(Qt::blue);
painter.setFont(QFont("Arial", 20));
painter.drawText(rect(), Qt::AlignCenter, m_message);
}
void MainWindow::setMessage(const QString &mess)
{
if( mess != m_message ) {
m_message = mess;
repaint();
}
}
class MainWindow : public QMainWindow
{
.....
private:
QString m_message;
class QLineEdit *m_lineEdit;
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
m_message = "hello, world.";
m_lineEdit = new QLineEdit;
statusBar()->addWidget(m_lineEdit);
connect(m_lineEdit, SIGNAL(textChanged(const QString &)),
this, SLOT(setMessage(const QString &)));
}
ステータスバーに "quit" と入力し Enter を押すと、プログラムを終了するようにしてみる。
class MainWindow : public QMainWindow
{
.....
public slots:
void setMessage(const QString &);
void onReturnPressed();
signals:
void quit();
.....
};
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
.....
connect(m_lineEdit, SIGNAL(returnPressed()), this, SLOT(onReturnPressed()));
}
void MainWindow::onReturnPressed()
{
if( m_message == "quit" )
emit quit();
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
QObject::connect(&w, SIGNAL(quit()), &a, SLOT(quit()));
return a.exec();
}