Qt-纯代码创建子对话框QDialog

    科技2022-07-13  135

    熟悉子对话框的创建,以及QCheckBox、QPushbutton的使用,QHBoxLayout、QVBoxLayout、QGridLayout三种布局方式的嵌套使用。 finddialog.h

    #ifndef FINDDIALOG_H #define FINDDIALOG_H #include <QMainWindow> #include <QDialog> #include <QtGui> QT_BEGIN_NAMESPACE namespace Ui { class finddialog; } QT_END_NAMESPACE class QCheckBox; class QLabel; class QLineEdit; class QPushButton; class finddialog : public QDialog { Q_OBJECT public: finddialog(QWidget *parent = nullptr); ~finddialog(); 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: Ui::finddialog *ui; QLabel *label; QLineEdit*lineEdit; QCheckBox *caseCheckBox; QCheckBox *backwardCheckBox; QPushButton *findButton; QPushButton *closeButton; }; #endif // FINDDIALOG_H

    finddialog.cpp

    #include "finddialog.h" #include "ui_finddialog.h" #include <QLabel> #include <QLineEdit> #include <QCheckBox> #include <QPushButton> #include <QHBoxLayout> #include <QVBoxLayout> finddialog::finddialog(QWidget *parent) : QDialog(parent) , ui(new Ui::finddialog) { 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()); } finddialog::~finddialog() { delete ui; }

    mian.cpp

    #include "finddialog.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); finddialog *w=new finddialog ; w->show(); return a.exec(); }

    Processed: 0.010, SQL: 8