有没有办法创建一个QSpinBox,其箭头指向左右(而不是上下)?虽然看起来很基本,但我还没有找到任何相关的东西。
答案 0 :(得分:0)
我想你知道qt不直接提供它。 请看下面的文档,它有三个选项。
QAbstractSpinBox::UpDownArrows
QAbstractSpinBox::PlusMinus
QAbstractSpinBox::NoButtons
http://doc.qt.io/qt-5/qabstractspinbox.html#ButtonSymbols-enum
但您可以使用所需图像使用样式表属性设置旋转框样式。
为左右符号提供良好的图像文件,并使用样式表设置图像文件,如下所示。
QSpinBox::up-button { image: url(:/images/spinRight.png) }
QSpinBox::down-button { image: url(:/images/spinLeft.png) }
答案 1 :(得分:0)
我从来没有找到Qt本机解决方案,所以尝试使用一些技巧,下面一个可能的原始示例,基本的想法是让Spinbox裸露(没有原生按钮,并制作你自己的按钮)setButtonSymbols(QAbstractSpinBox::NoButtons);
,我只使用左/右按钮的简单文本,您可以为按钮选择更精美的图像:
·H
//
private slots:
void leftBtn();
void RightBtn();
private:
QSpinBox *spinBx;
//
的.cpp
{
QHBoxLayout *hlayout = new QHBoxLayout;
QToolButton *btnLt = new QToolButton;
btnLt->setText("<"); // this is simple, use your image to style the button
QToolButton *btnRt = new QToolButton; // or could be pushbutton!
btnRt->setText(">");
spinBx = new QSpinBox;
spinBx->setButtonSymbols(QAbstractSpinBox::NoButtons);
hlayout->addWidget(btnLt);
hlayout->addWidget(spinBx);
hlayout->addWidget(btnRt);
connect(btnLt, &QToolButton::clicked, this, &MainWindow::leftBtn);
connect(btnRt, &QToolButton::clicked, this, &MainWindow::RightBtn);
this->ui->centralWidget->setLayout(hlayout);
}
void MainWindow::leftBtn()
{
this->spinBx->setValue(this->spinBx->value()-1);
}
void MainWindow::RightBtn()
{
this->spinBx->setValue(this->spinBx->value()+1);
}
答案 2 :(得分:0)
您可以将按钮移动到控件侧,并使用如下样式表为它们提供自定义箭头位图:
QSpinBox::down-button {
subcontrol-origin: margin;
subcontrol-position: center left;
image: url(:/icons/leftArrow.png);
}
QSpinBox::up-button {
subcontrol-origin: margin;
subcontrol-position: center right;
image: url(:/icons/rightArrow.png);
}
例如,将以下样式表应用于固定高度为26像素的旋转框:
QSpinBox {
border: 1px solid #ABABAB;
border-radius: 3px;
}
QSpinBox::up-button {
subcontrol-origin: margin;
subcontrol-position: center left;
image: url(:/icons/leftArrow.png);
background-color: #ABABAB;
left: 1px;
height: 24px;
width: 24px;
}
QSpinBox::down-button {
subcontrol-origin: margin;
subcontrol-position: center right;
image: url(:/icons/rightArrow.png);
background-color: #ABABAB;
right: 1px;
height: 24px;
width: 24px;
}
获得这个: