Dialogin teko ohjelmallisesti, layout ....
...
Qt:n
...
yksi
...
tärkeimmistä
...
tiedostoista
...
on
...
projektitiedosto,
...
tästä
...
...
ohjelma
...
osaa
...
tehdä
...
automaattisesti
...
...
-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()); } |