我設計了一些建築是這樣的:連接(以不尋常的方式)的信號插槽
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 ctor中調用setupUi,一切正常,但我更願意在Base_Class中調用它。有沒有辦法做到這一點?
你會得到一個錯誤:'沒有這樣的插槽BaseDialog :: displayMe()'? – cmannett85 2011-12-26 10:15:32
moc可能無法正確處理模板。包含ui生成代碼的慣用方法是將Ui :: My_Class作爲成員。 – 2011-12-26 13:19:12
@ cbamber85我收到的消息就像QDialog中沒有這樣的插槽。 – user336635 2011-12-26 13:52:33