Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migration of unmigrated content due to installation of a new plugin

Dialogin teko ohjelmallisesti, layout ....

...

Qt:n

...

yksi

...

tärkeimmistä

...

tiedostoista

...

on

...

projektitiedosto,

...

tästä

...

qmake

...

ohjelma

...

osaa

...

tehdä

...

automaattisesti

...

make

...

-tiedoston.

...

Ensimäisessä

...

esimerkissämme

...

projektitiedostossa

...

terve.pro

...

kerrotaan,

...

että

...

ollaan

...

tekemässä

...

sovellusta

...

"application",

...

siitä

...

app

...

ja

...

ohjelmaan

...

sisällytetään

...

lähdekoodit

...

SOURCES,

...

nyt

...

terve.cpp

{
Code Block
}

TEMPLATE      = app

HEADERS       = finddialog.h

SOURCES       = finddialog.cpp \

main.cpp
{code}


Varsinainen ohjelma  

Varsinainen ohjelma  terve.cpp

...

on

...

esitetty

...

alla

...

olevassa

...

"laatikossa".

Code Block

#include <QApplication> // Kyseessä Qt-sovellus
\#include <QLabel> // Label eli ilmoitusikkuna"finddialog.h"

int main(int argc, char \*argv\[\])
{
    QApplication app(argc, argv);
    FindDialog //luodaan pinoon sovellus
QLabel \**dialog = new FindDialog;
    dialog->show();
    return app.exec();
}

Dialogin otsikkotiedosto

Code Block

#ifndef FINDDIALOG_H //estetään ,ettei otsikkotiedostoa ladata montaa kertaa
#define FINDDIALOG_H

#include <QDialog>
#include <QLabel>
#include <QCheckBox>
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout>

class FindDialog : public QDialog
{
    Q_OBJECT
public:
    FindDialog(QWidget *parent = 0);
signals:
    void findNext(const QString &str, Qt::CaseSensitivity cs);
    void findPrevious(const QString &str, Qt::CaseSensitivity cs);
private slots:
    void findClicked();
    void enableFindButton(const QString &text);
private:
    QLabel *label;
    QLineEdit *lineEdit;
    QCheckBox *caseCheckBox;
    QCheckBox *backwardCheckBox;
    QPushButton *findButton;
    QPushButton *closeButton;
};
#endif //define-maarittelyn loppu

Dialogin toteutus

Code Block

#include <QtGui>
#include "finddialog.h"

FindDialog::FindDialog(QWidget *parent): QDialog(parent)
{
    label = new QLabel(tr("Find &what:"));
    lineEdit = new QLineEdit;
    label->setBuddy(lineEdit);
    caseCheckBox = new QCheckBox("Terve, eka Qt-sovellus\!");
label->show();
return app.exec(); //täällä ollaan kunnes sovellus sulkeutuu
}


h1.tr("Match &case"));
    backwardCheckBox = new QCheckBox(tr("Search &backward"));
    findButton = new QPushButton(tr("&Find"));
    findButton->setDefault(true);
    findButton->setEnabled(false);
    closeButton = new QPushButton(tr("Close"));
    connect(lineEdit, SIGNAL(textChanged(const QString &)),
            this, SLOT(enableFindButton(const QString &)));
    connect(findButton, SIGNAL(clicked()),
            this, SLOT(findClicked()));
    connect(closeButton, SIGNAL(clicked()),
            this, SLOT(close()));
    QHBoxLayout *topLeftLayout = new QHBoxLayout;
    topLeftLayout->addWidget(label);
    topLeftLayout->addWidget(lineEdit);
    QVBoxLayout *leftLayout = new QVBoxLayout;
    leftLayout->addLayout(topLeftLayout);
    leftLayout->addWidget(caseCheckBox);
    leftLayout->addWidget(backwardCheckBox);
    QVBoxLayout *rightLayout = new QVBoxLayout;
    rightLayout->addWidget(findButton);
    rightLayout->addWidget(closeButton);
    rightLayout->addStretch();
    QHBoxLayout *mainLayout = new QHBoxLayout;
    mainLayout->addLayout(leftLayout);
    mainLayout->addLayout(rightLayout);
    setLayout(mainLayout);
    setWindowTitle(tr("Find"));
    setFixedHeight(sizeHint().height());
}

void FindDialog::findClicked()
{
    QString text = lineEdit->text();
    Qt::CaseSensitivity cs =
            caseCheckBox->isChecked() ? Qt::CaseSensitive
                                      : Qt::CaseInsensitive;
    if (backwardCheckBox->isChecked()) {
        emit findPrevious(text, cs);
    } else {
        emit findNext(text, cs);
    }
}


void FindDialog::enableFindButton(const QString &text)
{
    findButton->setEnabled(!text.isEmpty());
}