[英]Qt5 C++: Custom Spinbox accepting two values
簡短的答案是:否
長答案是:
您應該QAbstractSpinBox
並實現這兩個虛擬方法:
virtual void stepBy(int steps) override;
virtual StepEnabled stepEnabled() const override;
請記住,您將需要提供自己的數據存儲和數據操作!
第一個功能確定當請求沿任一方向的踏步時會發生什么。 步驟的負數(表示在任一方向上走了多少步)表示下降,而正數表示上升(即單擊SpinBox的箭頭)。 QSpinBox
會將值steps
添加到其值中(因此當它為負數時將被減去)。 在這里,您還可以捕獲用戶選擇的SpiBox字符串的哪一部分,並使用
lineEdit()->selectionStart();
lineEdit()->selectedText();
完成后,請使用以下命令設置正確的文本:
lineEdit()->setText(myModifedValueText); //note that your internally stored value does not need to be QString, you just need to create it from your value in this method to set it to the internal QLineEdit so it can be displayed
當SpinBox需要知道它可以上升還是下降時,將調用第二種方法。 因此,基本上,您在這里檢查邊界(如果有的話)並返回適當的標志( QAbstractSpinBox::StepUpEnabled
或QAbstractSpinBox::StepDownEnabled
或兩者)。
最好在SpinBox的構造函數中,可以將QValidator
應用於其內部QLineEdit
以在用戶手動輸入值時僅接受某些格式的值,例如:
QRegExpValidator *validator = new QRegExpValidator(this);
validator->setRegExp(...); //create a RegExp for your value, you may use any Online regexp validator/creator for this to get the right one
lineEdit()->setValidator(validator);
最后,您可以微調SpinBox以在出現無效值時顯示文本,也可以使用QAbstractSpinBox::fixup
對其進行修復,並使用名稱為QAbstractSpinBox::fixup
validate的輸入進行QAbstractSpinBox::validate
。
為了真正啟動SpinBox,您還可以重新實現其上下文菜單和操作,您首先從QLineEdit
獲得標准菜單:
QMenu *menu = lineEdit()->createStandardContextMenu();
在QWidget::contextMenuEvent
並根據需要添加/修改它,然后使用menu->exec(event->globalPos())
顯示它,然后delete menu;
。
但是QAbstractSpinBox
為您完成了大部分基礎工作,因此僅實現上述兩個虛擬方法就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.