0
我對Qt很新,我一直在玩它。最近在做我的一個項目的時候,我碰到了一些我不明白的東西。出於某種原因,在類JoinWindow
中,我無法將受保護的插槽連接到任何設備,但仍可以與其他插槽進行連接。Qt無法連接類的插槽,當連接到繼承類的受保護成員
這裏是我的頭:
#ifndef JOINWINDOW_H
#define JOINWINDOW_H
#include "mywindow.h"
class JoinWindow : public MyWindow
{
public:
JoinWindow(QString name = "Guess");
protected slots:
void on_buttonConnexion_clicked();
};
#endif // JOINWINDOW_H
我CPP:
#include "joinwindow.h"
JoinWindow::JoinWindow(QString name)
:MyWindow(name)
{
buttonConnexion->setText("Connexion"); // protected member of MyWindow
connect(buttonServer, SIGNAL(clicked()), this, SLOT(on_buttonConnexion_clicked()));
}
void JoinWindow::on_buttonConnexion_clicked()
{
// Code in slot won't get called when the button is clicked
}
這裏是爲mywindow的頭文件:
#ifndef MYWINDOW_H
#define MYWINDOW_H
#include <QtWidgets>
class MyWindow : public QWidget
{
Q_OBJECT
public:
MyWindow(QString name = "Guess");
~MyWindow();
// Some fonctions here and Slots
protected:
QPushButton *buttonServer;
// More objects
};
#endif // MYWINDOW_H
有什麼奇怪的,我不明白,是我沒有收到任何編譯錯誤,我的程序完美無缺。當按下按鈕時,它不會調用插槽on_buttonConnexion_clicked()
。更奇怪的是,我連接了一個不屬於JoinWindow
類的SLOT,它會調用SLOT,並按下按鈕即可按預期工作。
#include "joinwindow.h"
JoinWindow::JoinWindow(QString name)
:MyWindow(name)
{
buttonConnexion->setText("Connexion"); // protected member of MyWindow
connect(buttonServer, SIGNAL(clicked()), qApp, SLOT(quit()));
}
void JoinWindow::on_buttonConnexion_clicked()
{
}
此代碼將在點擊按鈕時關閉應用程序。我還可以連接到類MyWindow
的SLOTS,因爲某些原因,它無法連接到JoinWindow
的SLOTS。
必須有我不明白的東西,如果我在MyWindow中添加SLOT的定義,它一切正常,你不能在子類中調用新插槽嗎? – Mathieu