1.建立一个QWidget的项目;
2.文件->新建文件或项目->选C++->再选C++Class->choose->class name:输入名字,Base class:选QWidget,下一步->完成;(此时项目中新增.cpp和.h两个文件)
3、在.h文件中添加头文件,在public:中声明行编辑框和两个按钮;
QLineEdit *mNameLinEdit;
QPushButton *mSaveButton;
QPushButton *mCancelButton;
signals:
void sendNewName(QString name);//自定义信号,用于发送行编辑框中修改后的姓名。
private slots:
void on_mSaveButton_clicked()//声明槽函数;
4.完善.cpp文件,添加网格布局器和空间间隔类的头文件;
QGridLayout *mainGridLayout = new GQridLayout();//创建网格布局管理器
QSpacerItem *verticalSpacer = new QSpacerItem(40,20);//创建空间间隔;
mNameLinEdit = new QLineEdit(); //实例化 mNameLinEdit
mSaveButton = new QPushButton("保存");//实例化mSaveButton,并将文本设置“”“保存”
mCancelButton = new QPushButtom("取消");
mainGridLayout->addwidget(mNameLineEdit,0,0,1,2);
mainGridLayout->addItem(verticalSpacer,1,0,1,2);
mainGridLayout->addwidget(mSaveButton,2,0,1,1);
mainGridLayout->addwidget(mCancelButton,2,1,1,1);
connect(mSaveButton,SIGNAL(clicked()),this,SLOT(on_mSaveButton_clicked()));
connect(mSaveButton,SIGNAL(clicked()),this,SLOT(close()));
connect(mCancelButton,SIGNAL(clicked()),this,SLOT(close()));
setLayout(mainGridLayout);
void NameModify::on_mSaveButton_clicked() // 定义槽函数on_mSaveButton_clicked()
{
emit(sendNewName(mNameLineEdit->text())); // 发送一个信号,携带文本输入框中的文本作为参数
}
5.声明标签,定义QString类变量;声明槽函数;
public:
QLabel *mNameTextLabel;
QString mNewName;
private slots:
void on_modifyButton_clicked();//修改按钮clicked()的槽函数;
void get NewName(QString name);//sendNewName(QString mNewName)的槽函数;
6.实例化mNameTextLabel,实例化三个按钮,将信号与槽函数关联;将对象添加如布局器中;设置当前窗口布局;
mNameTextLabel = new QLabel("姓名:");
mNameEditLabel = new QLabel("小李");
QPushButton *modifyButton = new QPushButton("修改");
modifyButton->setMaximmSize(70,25);
QPushButton *okButton = new QPushButton("确定");
QPushButton *quitButton = new QPushButton("退出");
connect(modifyButton,SIGNAL(clicked()),this,SLOT(on_modifyButton_clicked()));
connect(okButton,SIGNAL(clicked()),this,SLOT(close()));
connect(quitButton,SIGNAL(clicked()),this,SLOT(close()));
labelHBoxLayout->addWidget(mNameTextLabel); // 添加姓名标签到水平布局
labelHBoxLayout->addWidget(mNameEditLabel, Qt::AlignLeft); // 添加姓名编辑标签到水平布局,左对齐 labelHBoxLayout->addWidget(modifyButton); // 添加修改按钮到水平布局 buttonHBoxLayout->addWidget(okButton); // 添加确定按钮到水平布局 // 将水平布局添加到垂直布局中 mainVBoxLayout->addLayout(labelHBoxLayout); // 添加标签水平布局到垂直布局 mainVBoxLayout->addLayout(buttonHBoxLayout); // 添加按钮水平布局到垂直布局 setMaximumSize(250, 200); // 设置窗口的最大尺寸 setLayout(mainVBoxLayout);// 设置窗口的主布局为垂直布局
7.在on_modifyButton_clicked()槽函数中创建一个NameModify对象,并实例化,将NameModify的sendNewName(QString )信号关联get NewName(QString )槽函数;
将弹窗行编辑框mNameLineEdit的初始文本设置为当前主界面中mNameEditLabel文本,并显示弹窗。
// 当点击修改按钮时调用此槽函数 void Widget::on_modifyButton_clicked() { NameModify *nameModify = new NameModify(); // 创建NameModify对象 // 连接信号与槽:当NameModify发送新名字时,调用getNewName()槽函数接收新名字connect(nameModify, SIGNAL(sendNewName(QString)), this, SLOT(getNewName(QString))); // 设置NameModify对象的文本框内容为当前姓名编辑标签的内容 nameModify->mNameLineEdit->setText(mNameEditLabel->text()); // 显示NameModify窗口 nameModify->show(); }
关系图如下: