...
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> #include "finddialog.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); FindDialog *dialog = new FindDialog; dialog->show(); return app.exec(); } {code} h1. Dialogin otsikkotiedosto |
Dialogin otsikkotiedosto
Code Block |
---|
{code} #ifndef FINDDIALOG_H //estetään ,ettei otsikkotiedostoa ladata montaa kertaa #define FINDDIALOG_H #include <QDialog> #include <QLabel> class#include QCheckBox;<QCheckBox> class#include QLabel;<QLineEdit> class#include QLineEdit;<QPushButton> class#include QPushButton;<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 |
---|
{code} h1. Dialogin toteutus {code} #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(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()); } {code} |