qt窗口布局及自定义类
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
需要 this
rightLayout->addStretch(1);
QHBoxLayout *mainLayout = new QHBoxLayout(this);
mainLayout->setMargin(30); mainLayout->setSpacing(6); mainLayout->addLayout(leftLayout); mainLayout->addLayout(rightLayout); }
finddialog.h (4)
private: QLabel *label; QLineEdit *lineEdit; QCheckBox *caseCheckBox; QCheckBox *backwardCheckBox; QPushButton *findButton; QPushButton *closeButton; }; #endif
class FindDialog : public QDialog { Q_OBJECT public: FindDialog(QWidget *parent = 0, const char *name = 0); signals: void findNext(const QString &str, bool caseSensitive); void findPrev(const QString &str, bool caseSensitive); private slots: void findClicked(); void enableFindButton(const QString &text);
qt窗口布局及自定义类qt自定义窗口qt自定义控件qt自定义信号qt自定义事件android自定义布局qt布局qtcreator布局qt布局管理器qtdesigner布局
qt窗口布局及自定义类
说明
以下将通过一个例子讲解自定义类的qt 程序设计的主要流程
要设计的界面
通过两个文件:finddialog.h 和 finddialog.cpp来实 现,即定义一个类
finddialog.h(2)
#ifndef FINDDIALOG_H #define FINDDIALOG_H #include <qdialog.h> class QCheckBox; class QLabel; class QLineEdit; class QPushButton;
finddialog.h(3)
3 将finddialog.cpp文件的findClicked函数,改为: void FindDialog::findClicked(){ AnalogClock *clock=new AnalogClock; clock->show(); } 这样,用户点击clock按钮的时候就可以调出clock界面了。
finddialog.h (1)
#ifndef FINDDIALOG_H #define FINDDIALOG_H #include <qdialog.h> class QCheckBox; class QLabel; class QLineEdit; class QPushButton; class FindDialog : public QDialog { Q_OBJECT public: FindDialog(QWidget *parent = 0, const char *name = 0); signals: void findNext(const QString &str, bool caseSensitive); void findPrev(const QString &str, bool caseSensitive); private slots: void findClicked(); void enableFindButton(const QString &text); private: QLabel *label; QLineEdit *lineEdit; QCheckBox *caseCheckBox; QCheckBox *backwardCheckBox; QPushButton *findButton; QPushButton *closeButton; }; #endif
finddialog.cpp (1)
#include <qcheckbox.h> #include <qlabel.h> #include <qlayout.h> #include <qlineedit.h> #include <qpushbutton.h> #include "finddialog.h"
主函数main.cpp
#include <qapplication.h> #include "finddialog.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); FindDialog *dialog = new FindDialog; app.setMainWidget(dialog); dialog->show(); return app.exec(); }
finddialog.cpp (3)
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()));
注意何时调用 addWidget, 何时调用
addLayout
窗口布局
QHBoxLayout QVBoxLayout QGridLayout
窗口布局
finddialog.cpp (5)
void FindDialog::findClicked() {
QString text = lineEdit->text(); bool caseSensitive = caseCheckBox->isOn(); if (backwardCheckBox->isOn()) emit findPrev(text, caseSensitive); else emit findNext(text, caseSensitive); } void FindDialog::enableFindButton(const QString &text) { findButton->setEnabled(!text.isEmpty()); }
多窗口调用
以前面的例子为例讲解多程序调用的方法:
1 将find按钮名称改为clock按钮,将../../ qt-embedded-free3.1.1/examples/aclock中的aclock.cpp和aclock.h拷贝到当前目录
2 在finddialog.h里加上 #include"aclock.h" class AnalogClock;
leftLayout->addLayout(topLeftLayout);
leftLayout->addWidget(caseCheckBox);
leftLayout->addWidget(backwardCheckBox);
总布局
QVBoxLayout *rightLayout = new QVBoxLayout; rightLayout->addWidget(findButton); rightLayout->addWidget(closeButton);
finddialog.cpp (2)
FindDialog::FindDialog(QWidget *parent, const char *name) : QDialog(parent, name) { setCaption(tr("Find")); label = new QLabel(tr("Find &what:"), this); lineEdit = new QLineEdit(this); label->setBuddy(lineEdit); caseCheckBox = new QCheckBox(tr("Match &case"), this); backwardCheckBox = new QCheckBox(tr("Search &backward"), this); findButton = new QPushButton(tr("&Find"), this); findButton->setDefault(true); findButton->setEnabled(false); closeButton = new QPushButton(tr("CloseQHBoxLayout *topLeftLayout = new QHBoxLayout;
topLeftLayout->addWidget(label);
topLeftLayout->addWidget(lineEdit);
QVBoxLayout *leftLayout = new QVBoxLayout;