在VS2015里面的QT创建新ui

  • Post author:
  • Post category:其他


先在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 <QDialog>
#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 <QWidget>
#include<login.h>

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数据,父窗口显示。



版权声明:本文为weixin_41167925原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。