天天看点

Qt之对话框

一个对话框程序

在VS2008下新建工程的时候得是有ui的Qt Application

不用Qt Designer就是麻烦,横或竖的BoxLayout写了N多。还是有些地方没怎么明白。

dialogapp2.h

 //dialogapp2.h

#ifndef FINDDIALOG_H

#define FINDDIALOG_H

#include <QDialog>

class QCheckBox;

class QLabel;

class QLineEdit;

class QPushButton;

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

dialogapp2.cpp

//dialogapp2.cpp

#include <QtGui>

#include "dialogapp2.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());

}

main.cpp

#include <QApplication>

#include "dialogapp2.h"

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

FindDialog *dialog = new FindDialog;

dialog->show();

return app.exec();

}

继续阅读