template<class Ui_Class>
class Base_Dialog : virtual public QDialog, protected Ui_Class
{
protected:
QDialog* caller_;
public:
template<class Implementation>
Base_Dialog(Implementation*const & imp,QDialog *caller,QWidget* parent = nullptr);
};
template<class Ui_Class>
template<class Implementation>
Base_Dialog<Ui_Class>::Base_Dialog(Implementation*const& imp,QDialog *caller,QWidget* parent):
QDialog(parent),
caller_(caller)
{
setupUi(imp);
}
を私はそうのようにそれを使用しています:
class My_Class : public **Base_Dialog<Ui::My_Class>**
{
Q_OBJECT
public slots:
void display_me()
{/*THIS IS NOT GETTING CONNECTED*/
QMessageBox::warning(this,"Aha!","Aha!");
}
public:
explicit My_Class(QDialog* caller = nullptr,QWidget *parent = nullptr);
};
Line_Counter::Line_Counter(QDialog* caller,QWidget *parent) :
Base_Dialog(this,caller,parent)
{
//setupUi(this);//THIS WORKS BUT I'D RATHER CALL IT FROM Base_Dialog
}
これ以上の構築物をしたとしていますQDialogおよびUiクラスから継承する方法を簡単にし、簡素化します。これは、スロットと信号がクラスに導入されたときに何らかの理由で基底クラスがそれらを参照しない(スロット/シグナル)ことを除いて動作します。 My_ClassでsetupUiを呼び出すと、すべて正常に動作しますが、Base_Classで呼び出す方が好きです。それを行う方法はありますか?
次のようなエラーが表示されますか: 'No such slot BaseDialog :: displayMe()'? – cmannett85
mocがテンプレートを正しく処理しない可能性があります。 ui生成コードを含む慣用的な方法は、Ui :: My_Classをメンバとして持つことです。 –
@ cbamber85私が得ているメッセージは、QDialogでそのようなスロットのようなものではありません。 – user336635