我有一個Qt對話框,並有一個滑塊,當對話框初始化時,滑塊將被設置一個值。爲了提醒用戶什麼是默認值,我想添加一個標記到滑塊,只需在手柄上方畫一條線或一個三角形即可。這裏,滑塊應該是QSlider類型,這意味着我不能實現從QSlider派生的定製控件。有什麼辦法可以實現它嗎?如何將一個刻度線添加到滑塊,如果它不能繼承QSlider
回答
我不清楚爲什麼你不能從QSlider
得到控制。您仍然可以將其視爲QSlider
,只需覆蓋paintEvent
方法即可。下面的例子是非常不好的,視覺上說,但你可以使用從QStyle
方法,使它看起來更自然:
#include <QtGui>
class DefaultValueSlider : public QSlider {
Q_OBJECT
public:
DefaultValueSlider(Qt::Orientation orientation, QWidget *parent = NULL)
: QSlider(orientation, parent),
default_value_(-1) {
connect(this, SIGNAL(valueChanged(int)), SLOT(VerifyDefaultValue(int)));
}
protected:
void paintEvent(QPaintEvent *ev) {
int position = QStyle::sliderPositionFromValue(minimum(),
maximum(),
default_value_,
width());
QPainter painter(this);
painter.drawLine(position, 0, position, height());
QSlider::paintEvent(ev);
}
private slots:
void VerifyDefaultValue(int value){
if (default_value_ == -1) {
default_value_ = value;
update();
}
}
private:
int default_value_;
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
DefaultValueSlider *slider = new DefaultValueSlider(Qt::Horizontal);
slider->setValue(30);
QWidget *w = new QWidget;
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(slider);
layout->addStretch(1);
w->setLayout(layout);
QMainWindow window;
window.setCentralWidget(w);
window.show();
return app.exec();
}
#include "main.moc"
感謝提及'QStyle :: sliderPositionFromValue' – Micka 2014-10-09 13:08:14
爲什麼你需要繼承一個QSlider來訪問它的公共方法?
http://doc.trolltech.com/4.7/qslider.html
您可以直接調用它在你的應用setTickPosition()。我能想到
抱歉,我沒有清楚地表達我的問題。我的意思是,例如,如果滑塊的值是30,那麼在位置30處只有一個標記。 – Royt 2012-03-21 10:45:54
最簡單方法是:
添加QSlider到QSlider(像你這樣的佈局和QFrames做到這一點)。上面的滑塊將是您當前的滑塊(可點擊其中一個)。下面的滑塊將成爲您的「默認滴答位置」值。
#include <QApplication>
#include <QSlider>
#include <QVBoxLayout>
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
QSlider * defaultValueSlider = new QSlider();
QSlider * valueSlider = new QSlider(defaultValueSlider);
QVBoxLayout * lay = new QVBoxLayout(defaultValueSlider);
lay->setContentsMargins(0, 0, 0, 0);
lay->setSpacing(0);
lay->addWidget(valueSlider);
defaultValueSlider->setRange(0, 100);
valueSlider->setRange(0, 100);
defaultValueSlider->setValue(30);
defaultValueSlider->show();
return app.exec();
}
- 1. 爲jQuery滑塊添加刻度線?
- 2. 如何添加刻度線和標籤jQuery的移動滑塊?
- 3. 將添加刻度線(✔)添加到string.xml
- 4. 如何獲得Qslider中第一個和最後一個刻度線的位置?
- 5. 如何添加刻度標記沿jQuery Mobile的滑塊
- 6. 如何將滑塊添加到QMenu中?
- 7. 如何將繼續添加到if塊
- 8. 如何顯示離散滑塊的刻度線?
- 9. 如何將功能添加到繼承的屬性?
- 10. 如何將進度條添加到vue-strap轉盤滑塊?
- 11. 如何將一個幻燈片效果添加到JavaScript圖像滑塊
- 12. 如何將自動滑塊功能添加到我的jQuery滑塊?
- 13. 如何將範圍滑塊的功能添加到常規滑塊中
- 14. 如何添加標籤到刻度?
- 15. 如何添加輸入到繼承
- 16. 如何在繼承QGraphicsEllipseItem添加到QGraphicsScene
- 17. QSlider不滑動
- 18. 將DragScroll添加到滑塊
- 19. 如何將下一個和上一個選項添加到滑塊?
- 20. 如何將第二個拇指添加到Javascript滑塊
- 21. 將兩個y軸刻度添加到同一個圖表
- 22. 如何添加填充到滑塊?
- 23. 如何將jquery ui滑塊添加到PrestaShop模塊表單
- 24. 角度材料滑塊如何設置刻度值
- 25. 如何將多個手柄添加到一個jQuery滑塊在飛行
- 26. 如何將進度條(時間軸)添加到滑塊,如幻燈片或nivoslider
- 27. 如何將標籤添加到SWT Scale刻度?
- 28. 如何添加功能到現有的繼承
- 29. Flex滑塊 - 如何添加兩個滑塊的相同控件
- 30. 如何將滑塊添加到滑塊而不會丟失滑塊分接行爲?
你的意思是手柄沿滑塊範圍的某處,但你想畫些強調的另一個位置一種標記? – Masci 2012-03-21 10:46:44
@Masci:我想強調滑塊的默認值,當用戶拖動手柄時,他們仍然可以看到滑塊的原始值,因爲有初始值的標記。 – Royt 2012-03-21 10:55:52
好的,現在很清楚 – Masci 2012-03-21 10:58:23