当点击按钮隐藏另一个按钮位于其他职业
我有两个类。
第一类叫Widget
,有一个按钮属于它,第二类叫dialog
,还有一个属于它的按钮。
当点击窗口小部件上的按钮(Open Dialog
)时,会显示属于dialog class
的窗口对话框。当点击按钮隐藏另一个按钮位于其他职业
我想要的是,当点击属于dialog class
按钮隐藏属于widget class
按钮。
我试图用正常的方式来做,但我失败了。
void Dialog::on_doSomthing_btn_clicked(){
Widget *widget = new Widget;
QPushButton *btn = widget->findChild<QPushButton *>("OpenDialog_Btn");
btn->hide();
}
而且我已经使用了Signal & Slot
方式如下:
widget.h
private slots:
void hideButton();
widget.cpp
void Widget::hideButton(){
ui->OpenDialog_Btn->hide();
}
dialog.h:
signals:
void doHideButton();
dialog.cpp:
void Dialog::on_doSomthing_btn_clicked(){
Widget *widget = new Widget;
connect(this, SIGNAL(doHideButton()), widget, SLOT(hideButton()));
emit doHideButton();
this->close();
}
怎么做,或有什么问题在我的代码?
您每次按下按钮时都会创建一个Widget
类的新实例。你应该做的是将一个来自Dialog
对象的信号连接到你现有的Widget
对象的一个插槽。
在代码中的某处,您正在创建Dialog
类的实例。事实证明,这是在你的Widget
类。当您创建实例,其信号连接到您的Widget
对象的插槽:
Dialog dialog;
connect(&dialog, SIGNAL(hideSignal()), this, SLOT(hideSlot()));
,并发出Dialog::hideSignal
当你按下应该隐藏在Widget
对象的其他按钮按钮。而在Widget::hideSlot
里面你只需隐藏按钮。
当按下按钮时,您正在堆栈上创建本地实例Widget
。您应该持有指向Widget
的对象的指针以访问它或使用信号插槽机制。只需使用Dialog
类中的信号,该信号连接到Widget
类中的某个插槽。当按下按钮时发出信号并将按钮隐藏在接收槽中。
试试这个,但我仍然认为信号和插槽机制更好。 (因为它推荐Nejat
在这里和我后来推荐这个给你)
Widget.h:
public:
//...
void hideBut();
Widget.cpp:
void Widget::hideBut()
{
ui->pushButton->hide();
}
对话框:
//#include "widget.h"
void Dialog::on_doSomthing_btn_clicked(){
Widget* par = static_cast<Widget*>(parent());
if(par)
par->hideBut();
}
和:
Dialog *mDialog = new Dialog(this);
mDialog->show();
谢谢,但不幸的是,你的代码不适合我。我也使用了'信号和插槽'的方式,也没有工作,再次看到我的问题,我已经更新了我的问题。 – 2014-10-04 23:29:31
MyWidget::MyWidget(QWidget *parent) :
QWidget(parent)
{
...
QPushButton *btn = new QPushButton("Button To Hide");
connect(btn, &QPushButton::clicked, this, &MyWidget::onButtonToHideClicked);
...
}
void MyWidget::onButtonToHideClicked()
{
QPushButton *btn = (QPushButton*)sender();
btn->hide();
}
...
谢谢,但我不明白你的代码。 – 2014-10-04 23:14:00
你能说出你不明白的部分吗?如果使用sender()方法,那么可以使用sender()方法在一个插槽中获取sender对象,在这种情况下,它是您单击的按钮,因为我们将点击的信号连接到构造函数中的onButtonToHideClicked插槽。所以你可以在插槽中打开一个新的对话框,并在这里隐藏按钮作为获取它的指针并使用sender()方法强制转换为QPushButton – cobalt 2014-10-06 16:47:32
但我不想隐藏我单击的按钮,我想隐藏另一个按钮属于另一个类,如在我的问题中显示的图片。 – 2014-10-07 00:22:01
我已经使用指针的方式,仍然不工作,再次看到我的代码,我已经更新了我的问题。 – 2014-10-04 05:29:11
您正在制作一个'Widget'的新实例。您应该有一个指向打开对话框的现有对象的指针。 – Nejat 2014-10-04 05:34:00
你能举个例子吗? – 2014-10-04 05:43:02