QT创建者水平旋转框

时间:2018-02-09 17:46:04

标签: qt qt-creator

有没有办法创建一个QSpinBox,其箭头指向左右(而不是上下)?虽然看起来很基本,但我还没有找到任何相关的东西。

3 个答案:

答案 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;
}

获得这个:

styled spinbox