connect(sender,SIGNAL(signal),receiver,SLOT(slot));
- 一个信号可以连接多个槽:发射一个信号的时候,会以不确定的顺序一个接着一个执行。
- 多个信号可以连接同一个槽:无论发射那一个信号,都会调用这个槽。
- 一个信号可以于另外一个信号相连接:类似于信号绑定,一个发射另一个也会发射。
- 连接可以被移除:这种方式不常用。
要把信号成功连接到槽,它们的参数必须具有相同的顺序和相同的类型。
如果信号参数比槽多,那么多余的参数会被忽略掉。
快速设计对话框:
无论是代码还是使用Qt设计师必须遵循几个相同的基本步骤:
要使用Qt设计师(类似于MFC拖动控件的方式)在Windows下,在开始菜单打开designer即可。
这个界面进来就熟悉好多,和MFC拖动控件一样。
关于Designer的使用:https://blog.csdn.net/qq_42418668/article/details/89536905
生成的UI的文件放在一个空目录下,使用qmake -project之后智能生成相关的头文件。
/********************************************************************************
** Form generated from reading UI file 'gotocelldialog.ui'
**
** Created by: Qt User Interface Compiler version 4.8.5
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_GOTOCELLDIALOG_H
#define UI_GOTOCELLDIALOG_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QFrame>
#include <QtGui/QHBoxLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QPushButton>
#include <QtGui/QVBoxLayout>
QT_BEGIN_NAMESPACE
class Ui_GoToCellDialog
{
public:
QVBoxLayout *verticalLayout;
QHBoxLayout *horizontalLayout;
QLabel *label;
QLineEdit *lineEdit;
QHBoxLayout *horizontalLayout_3;
QHBoxLayout *horizontalLayout_2;
QFrame *line;
QPushButton *okButton;
QPushButton *cancelButton;
void setupUi(QDialog *GoToCellDialog)
{
if (GoToCellDialog->objectName().isEmpty())
GoToCellDialog->setObjectName(QString::fromUtf8("GoToCellDialog"));
GoToCellDialog->resize(306, 84);
verticalLayout = new QVBoxLayout(GoToCellDialog);
verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
horizontalLayout = new QHBoxLayout();
horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
label = new QLabel(GoToCellDialog);
label->setObjectName(QString::fromUtf8("label"));
horizontalLayout->addWidget(label);
lineEdit = new QLineEdit(GoToCellDialog);
lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
horizontalLayout->addWidget(lineEdit);
verticalLayout->addLayout(horizontalLayout);
horizontalLayout_3 = new QHBoxLayout();
horizontalLayout_3->setObjectName(QString::fromUtf8("horizontalLayout_3"));
horizontalLayout_2 = new QHBoxLayout();
horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
line = new QFrame(GoToCellDialog);
line->setObjectName(QString::fromUtf8("line"));
line->setFrameShape(QFrame::HLine);
line->setFrameShadow(QFrame::Sunken);
horizontalLayout_2->addWidget(line);
okButton = new QPushButton(GoToCellDialog);
okButton->setObjectName(QString::fromUtf8("okButton"));
okButton->setEnabled(false);
okButton->setDefault(true);
horizontalLayout_2->addWidget(okButton);
cancelButton = new QPushButton(GoToCellDialog);
cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
horizontalLayout_2->addWidget(cancelButton);
horizontalLayout_3->addLayout(horizontalLayout_2);
verticalLayout->addLayout(horizontalLayout_3);
#ifndef QT_NO_SHORTCUT
label->setBuddy(lineEdit);
#endif // QT_NO_SHORTCUT
QWidget::setTabOrder(lineEdit, okButton);
QWidget::setTabOrder(okButton, cancelButton);
retranslateUi(GoToCellDialog);
QMetaObject::connectSlotsByName(GoToCellDialog);
} // setupUi
void retranslateUi(QDialog *GoToCellDialog)
{
GoToCellDialog->setWindowTitle(QApplication::translate("GoToCellDialog", "Go to Cell", 0, QApplication::UnicodeUTF8));
label->setText(QApplication::translate("GoToCellDialog", "&Cell Location", 0, QApplication::UnicodeUTF8));
okButton->setText(QApplication::translate("GoToCellDialog", "OK", 0, QApplication::UnicodeUTF8));
cancelButton->setText(QApplication::translate("GoToCellDialog", "Cancel", 0, QApplication::UnicodeUTF8));
} // retranslateUi
};
namespace Ui {
class GoToCellDialog: public Ui_GoToCellDialog {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_GOTOCELLDIALOG_H
自动生成的类是没有父类的,所以我们在主函数中可以调用QDialog 一个值传给setUi函数
#include<QApplication>
#include<QDialog>
#include "ui_gotocelldialog.h"
int main(int argc,char *argv[])
{
QApplication app(argc,argv);
Ui::GoToCellDialog ui;
QDialog *dialog = new QDialog;
ui.setupUi(dialog);
dialog->show();
return app.exec();
}