在QT我想通过按下子窗口的一个按钮的按钮然后可以调用父窗口中的一个槽函数应该怎么做,在线等

在QT我想通过按下子窗口的一个按钮的按钮然后可以调用父窗口中的一个槽函数应该怎么做,在线等,第1张

你的意思是子窗口中的一个按钮被点击了,父窗口上的一个slot函数响应这个点击吧?

很简单的:

1)在子窗口里面增加一个signal,在父窗口里面增加一个响应slot用于接收这个信号

2)子窗口的按钮slot函数中emit这个signal。

3)在父窗口中把子窗口的这个signal连到自己的响应slot。

// 子窗口

class ChildWindow : public QWidget

{

Q_OBJECT

public:

ChildWindow(QWidget* p = 0)

:QWidget(p)

{

QVBoxLayout* l = new QVBoxLayout(this)

QPushButton* btn = new QPushButton("btn", this)

l->addWidget(btn)

connect(btn, SIGNAL(clicked()), SLOT(ClickedBtn())

}

signals:

// 这个信号是发给父窗口的。

void ChildWindowEvent()

protected slots:

// 点击子窗口中按钮的slot

void ClickedBtn()

{

// 触发子窗口的信号给父窗口接收。

emit ChildWindowEvent()

}

}

// 父窗口

class ParentWindow : public QWidget

{

Q_OBJECT

public:

ParentWindow(QWidget* p = 0)

:QWidget(p)

{

QVBoxLayout* l = new QVBoxLayout(this)

w = new ChildWindow(this)

l->addWidget(w)

// 把子窗口的信号连接到父窗口来。

connect(w, SIGNAL(ChildWindowEvent()), SLOT(ChildWindowEventSlot())

}

protected:

ChildWindow* w

protected slots:

// 父窗口用于接收子窗口信号的slot。

void ChildWindowEventSlot()

{

//子窗口的按钮被点击了。

}

}

这么多年了被小白看到了,补一下空:

QWidget* w = new QWidget(this);是嵌入到父窗口的,根据Qt文档的描述:

“不嵌入在父部件中的小部件称为窗口。通常,windows有一个框架和一个标题栏“

这样子做是没有标题栏的。

要想有默认的标题栏,就不给它指定父窗口。当然这么做会打开两个窗口不再是嵌入。

想实现既嵌入又有标题栏又有关闭按钮,也可以自己实现就行了。QLabel或者QFrame做一个标题栏,再放一个button,连接按钮信号clicked()和this的槽close()。

没什么是自己实现不了,Qt的信号/槽,加上QPainter和样式表,想实现什么样都行。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11957054.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存