很简单的:
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和样式表,想实现什么样都行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)