我知道應該避免投射,我正在嘗試這樣做,但我不能看到如何使用QToolBox進行投射。如何避免使用QToolBox投射?
我建築的窗戶有一個QToolBox供用戶選擇他想要做的操作,並且在工具箱內部是每個操作的具體參數。 「應用」按鈕位於QToolBox之外。
當用戶點擊應用按鈕時,我必須得到他所選擇的操作及其參數。
問題是,QToolBox currentWidget()方法返回一個QWidget,它是一個我不能改變的類。所以我不能使用虛擬方法或類似的東西。我看到獲取參數的唯一方法是使用投射。
下面是一些代碼來顯示我的問題:
class BaseOperation : QWidget {
public:
virtual int getParameter() = 0;
}
class Operation1 : public BaseOperation {
...
}
class Operation2 : public BaseOperation {
...
}
...
_ui->toolBox->addItem(new Operation1(this), "OP 1");
_ui->toolBox->addItem(new Operation2(this), "OP 2");
...
QWidget* curItem = _ui->toolBox->currentWidget();
BaseOperation* op = dynamic_cast<BaseOperation*>(op);
op.getParameter();
有沒有更好的辦法做到我想要什麼?我想過使用工具箱中的項目索引和哈希映射來做到這一點,但這看起來不太符合OOP。
你做什麼沒有問題。更重要的是:既然你靜態地知道'curItem'是一個'BaseOperation',那麼這個cast應該是'static_cast'。 – peppe