发布时间:2023-07-14 17:00
先在vs里面创建了ui文件,并建立相应的.cpp和.h文件。不出意外的话,在ui(new Ui::login)会一直报错:
解决步骤如下:
1.找到自己创建的ui界面,不是刚刚手动创建的那个,即主窗口;
2.查看其.cpp文件和.h文件就会发现其关键问题,找到其对ui声明代码块,发现ui是在ui_xxx.h文件声明的,类似的,在新创建的.h文件找到ui_xxx.h文件,找到如下代码块;
namespace Ui {
class Form: public Ui_Form {};
} // namespace Ui
3.在新建的h文件中,将Ui::Form ui;声明为private,并将ui(new Ui::login)删掉,delete ui也去掉。
新建的ui即可被主窗口调用。
新建子窗口.h文件如下
#ifndef LOGIN_H
#define LOGIN_H
#include
#include "ui_login.h"
namespace Ui {
class DialogLogin;
}
class DialogLogin : public QDialog
{
Q_OBJECT
public:
explicit DialogLogin(QWidget *parent = 0);
~DialogLogin();
QString buf;
QString buf2;
private slots:
void on_pushButton_clicked();
signals:
void sendsignal(QString);//将信号带参数
private:
Ui::Form ui;
};
#endif // DIALOGLOGIN_H
新建子窗口.cpp文件如下
#include "login.h"
DialogLogin::DialogLogin(QWidget *parent) :QDialog(parent)
{
ui.setupUi(this);
}
DialogLogin::~DialogLogin()
{
}
void DialogLogin::on_pushButton_clicked()
{
buf = ui.IPEdit->text();
buf2 = ui.PortEdit->text();
QString buf3 = buf +","+ buf2;
emit sendsignal(buf3);
this->close();
}
父窗口.h文件如下
#ifndef WIDGET_H
#define WIDGET_H
#include
#include
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
//定义两个槽函数
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void reshow(QString);
signals:
void sendsignal(QString);//定义一个带参数的信号
private:
Ui::Widget *ui;
private:
DialogLogin *f1;
};
#endif // WIDGET_H
父窗口.cpp文件如下
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
f1=new DialogLogin;
//从信号传过来的参数,会被槽函数接受
connect(f1,SIGNAL(sendsignal(QString)),this,SLOT(reshow(QString)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
f1->show();//显示子窗口
this->hide();//隐藏主窗口
}
//增加
void Widget::reshow(QString y)
{
this->show();//将主窗口显示出来
ui->textEdit->setText(y);//将数据显示出来
}
//删除
void Widget::on_pushButton_2_clicked()
{
}
该程序实现的子窗口shrubs数据,父窗口显示。