前言,需要實作從界面1點擊“+”按鈕跳轉到界面2,然后界面2點擊“取消”/“存盤”回傳界面1。
前面是可以實作的,但是點擊點擊“取消”/“存盤”,均可以發送信號,界面1的槽函式receive_save()和receive_addid_cancel收不到信號。。。
已經做過的嘗試:首先connect程序是回傳true的,之前也寫過很多的這樣類似的信號槽沒有遇到過這種問題!
因為這里涉及界面1和界面2之間多對信號槽,我在想是不是槽函式對數量有限制??
這個問題困擾了我一整天,要窒息了,快救救孩子吧~
界面1:

界面2:

main.cpp
#include "widget.h"
#include "addid.h"
#include <QApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget *w = new Widget;
AddId *i = new AddId;
w->show();
QObject::connect(w,SIGNAL(showAddId()),i,SLOT(receive_widget_addid()));
bool isConnected = QObject::connect(i,SIGNAL(showLabel()),w,SLOT(receive_save()));
qDebug() <<isConnected;
QObject::connect(i,SIGNAL(showWidget()),w,SLOT(receive_addid_cancel()));
return a.exec();
}
界面1.h(主界面)
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_addid_clicked();
void receive_save();
void receive_addid_cancel();
signals:
void showAddId();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
界面1.cpp(主界面):
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QMouseEvent>
#include <QDialog>
#include <QPainter>
#include <QAction>
#include <QStyleOption>
#include <QVBoxLayout>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_addid_clicked()
{
this->hide();
qDebug() <<"添加界面信號!";
emit showAddId();
}
void Widget::receive_save()
{
qDebug() << "接收保存信號!";
this->show();
}
void Widget::receive_addid_cancel()
{
qDebug() << "接收關閉信號!";
this->show();
}
界面2.h(添加id編輯界面)
[code=c]#ifndef ADDID_H
#define ADDID_H
#include <QWidget>
namespace Ui {
class AddId;
}
class AddId : public QWidget
{
Q_OBJECT
public:
explicit AddId(QWidget *parent = nullptr);
~AddId();
private slots:
void receive_widget_addid();
void on_save_clicked();
void on_cancel_clicked();
signals:
void showWidget();
void showLabel();
private:
Ui::AddId *ui;
};
#endif // ADDID_H
[/code]
界面2.cpp(添加id編輯界面):
#include "addid.h"
#include "ui_addid.h"
#include <QPainter>
#include <QLabel>
#include <QPropertyAnimation>
#include <QDebug>
#include "widget.h"
AddId::AddId(QWidget *parent)
:QWidget(parent)
,ui(new Ui::AddId)
{
ui->setupUi(this);
}
AddId::~AddId()
{
delete ui;
}
void AddId::receive_widget_addid()
{
qDebug() << "接收widget信號!";
AddId *i= new AddId;
i->show();
}
void AddId::on_save_clicked()
{
this->hide();
qDebug() <<"發送保存信號!";
emit showLabel();
}
void AddId::on_cancel_clicked()
{
this->hide();
qDebug() <<"發送關閉信號!";
emit showWidget();
}
uj5u.com熱心網友回復:
萌新第一次發帖,請大家捧捧場看看~uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
不要亂new,也沒delete。如果是繼承自Qt的類,指定parent還可能會被銷毀,否則就記憶體泄漏。uj5u.com熱心網友回復:
你先是開了倆視窗,然后在add視窗里收到信號又new一個add視窗,那你自己想想,此時點的按鈕屬于誰的?qDebug列印下this地址就知道uj5u.com熱心網友回復:
是這里了,改成this就解決了uj5u.com熱心網友回復:
嗯嗯,在回去的車上,晚點試試,先把疑問打上。這里new了一個i,我是想著方便使用addid界面,所以界面不還是兩個界面嗎,存盤按鈕不是還屬于addid嗎,為啥會導致widget的槽函式收不到信號了[face]monkey2:012.png[/face]轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/232773.html
標籤:C++ 語言
下一篇:這個swap()函式,看不懂啊
