如何实时取得QSpinBox的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何实时取得QSpinBox的值相关的知识,希望对你有一定的参考价值。

参考技术A   自己emit一个信号,步骤如下(保证你这个两个cpp都对应的类是继承自QObject类):
  准备两个cpp,一个是包含QSpinBox的cpp,一个是需要获得SpinBox改变的值
  1、在QSpinBox的类中(可能是QWidget)中增加一个信号void spinBoxChanged(QString);
  2、对于一个QSpinBox会有一个valueChanged的信号槽,假设你已经实现了这个槽函数中,并且在这个槽函数中得到了改变后的值,然后emit spinBoxChanged(changeValue);
  3、再在另一个需要获得SpinBox的cpp对应的类(假设是QClass)中增加一个与信号函数的参数相同的槽函数
  void slotSpinBoxChanged(QString).并实现之
  4、连接两个对象的信号和槽,一般在初始化中连接

  可能写的不太好懂,为了简单,你可以利用QT的一个信号对应多个槽的机制,不需要自己发信号,直接把槽函数和QSpinBox的valueChanged信号相连,这样就更简单了。
参考技术B 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <QtGui>

#include "mainwindow.h"
#include <QLabel>
#include <QSplitter>

#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>

int spinBox1value;
int spinBox2value;

MainWindow::MainWindow()
: QMainWindow()

QSplitter *MainSplitter = new QSplitter(Qt::Horizontal);

area = new SvgWindow;
area->resize(289,maximumHeight ());
area->setStyleSheet("background-color:gray;");
QSplitter * WidgetRight = new QSplitter(Qt::Vertical);
//WidgetRight->setWindowTitle("Enter Your Age");
QWidget *SubWidget1 = new QWidget;
QWidget *SubWidget2 = new QWidget;
////////////////////////////////////////////////////////////////////////////////
QSpinBox *spinBox1 = new QSpinBox;

QSlider *slider1 = new QSlider(Qt::Horizontal);
spinBox1->setRange(0, 130);
slider1->setRange(0, 130);
QObject::connect(spinBox1, SIGNAL(valueChanged(int)),
slider1, SLOT(setValue(int)));
QObject::connect(slider1, SIGNAL(valueChanged(int)),
spinBox1, SLOT(setValue(int)));
QObject::connect(spinBox1, SIGNAL(valueChanged(int)),
this,SLOT(GetValue1(int)));
QObject::connect(spinBox1, SIGNAL(valueChanged(int)),
area,SLOT(SpinBoxEvent(int)));

spinBox1->setValue(35);

QHBoxLayout *layout1 = new QHBoxLayout;
layout1->addWidget(spinBox1);
layout1->addWidget(slider1);
SubWidget1->setLayout(layout1);
////////////////////////////////////////////////////////////////////////////
QSpinBox *spinBox2 = new QSpinBox;
QSlider *slider2 = new QSlider(Qt::Horizontal);
spinBox2->setRange(0, 130);
slider2->setRange(0, 130);
QObject::connect(spinBox2, SIGNAL(valueChanged(int)),
slider2, SLOT(setValue(int)));
QObject::connect(slider2, SIGNAL(valueChanged(int)),
spinBox2, SLOT(setValue(int)));
spinBox2->setValue(35);

QHBoxLayout *layout2 = new QHBoxLayout;
layout2->addWidget(spinBox2);
layout2->addWidget(slider2);
SubWidget2->setLayout(layout2);

/////////////////////////////////////////////////////////////////////////////

WidgetRight->addWidget(SubWidget1);
WidgetRight->addWidget(SubWidget2);

MainSplitter->addWidget(area);
MainSplitter->addWidget(WidgetRight);

setCentralWidget(MainSplitter);

QMenu *fileMenu = new QMenu(tr("&File"), this);
QAction *openAction = fileMenu->addAction(tr("&Open..."));
openAction->setShortcut(QKeySequence(tr("Ctrl+O")));
QAction *quitAction = fileMenu->addAction(tr("E&xit"));
quitAction->setShortcut(QKeySequence(tr("Ctrl+Q")));

menuBar()->addMenu(fileMenu);

QMenu *rendererMenu = new QMenu(tr("&Renderer"), this);
nativeAction = rendererMenu->addAction(tr("&Native"));
nativeAction->setCheckable(true);
nativeAction->setChecked(true);
#ifndef QT_NO_OPENGL
glAction = rendererMenu->addAction(tr("&OpenGL"));
glAction->setCheckable(true);
#endif
imageAction = rendererMenu->addAction(tr("&Image"));
imageAction->setCheckable(true);

QActionGroup *rendererGroup = new QActionGroup(this);
rendererGroup->addAction(nativeAction);
#ifndef QT_NO_OPENGL
rendererGroup->addAction(glAction);
#endif
rendererGroup->addAction(imageAction);

menuBar()->addMenu(rendererMenu);

connect(openAction, SIGNAL(triggered()), this, SLOT(openFile()));
connect(quitAction, SIGNAL(triggered()), qApp, SLOT(quit()));
connect(rendererGroup, SIGNAL(triggered(QAction *)),
this, SLOT(setRenderer(QAction *)));

//setCentralWidget(area);
setWindowTitle(tr("SVG Viewer"));


void MainWindow::openFile(const QString &path)

QString fileName;
if (path.isNull())
fileName = QFileDialog::getOpenFileName(this, tr("Open SVG File"),
currentPath, "*.svg");
else
fileName = path;

if (!fileName.isEmpty())
area->openFile(fileName);
if (!fileName.startsWith(":/"))
currentPath = fileName;
setWindowTitle(tr("%1 - SVGViewer").arg(currentPath));




void MainWindow::setRenderer(QAction *action)

if (action == nativeAction)
area->setRenderer(SvgWindow::Native);
#ifndef QT_NO_OPENGL
else if (action == glAction)
area->setRenderer(SvgWindow::OpenGL);
#endif
else if (action == imageAction)
area->setRenderer(SvgWindow::Image);

void MainWindow::GetValue1(int value1)

spinBox1value=spinBox1->value();

PyQt4:QSpinBox 不接受高于 100 的值

【中文标题】PyQt4:QSpinBox 不接受高于 100 的值【英文标题】:PyQt4: QSpinBox doesn't accept values higher than 100 【发布时间】:2011-04-22 11:12:16 【问题描述】:

我对 python 和 qt 很陌生,我想使用一个范围从 0 到 1000000 的微调器,但是即使我将最大值设置为 1000000,QSpinBox 也不会超过 100,我相信这真的很简单,但我一直在寻找年龄,找不到任何东西。这是我到目前为止使用的代码:

steps_spin = qt.QSpinBox()
steps_spin.setValue(10000)
steps_spin.setMinimum(100)
steps_spin.setSingleStep(100)

希望大家能帮帮我!

【问题讨论】:

【参考方案1】: QSpinBox 的默认最大值为 99,因此 setValue 限制为 99。

要设置高于 99 的值,您必须先调用 setMaximum/setRange:

steps_spin = QtGui.QSpinBox()
steps_spin.setMinimum(100)
steps_spin.setMaximum(100000)
# alternatively, you may call: steps_spin.setRange(100, 100000)
steps_spin.setValue(10000)

【讨论】:

【参考方案2】:

怎么样

steps_spin.setRange(0,1000000)

【讨论】:

你能说出为什么 Qt 设计器不允许将最大范围设置为 2,176,999,999【参考方案3】:

来自PyQt4 documentation:

QSpinBox.__ init__ (self, QWidget parent = None)

parent 参数,如果不是 None,则导致 self 归 Qt 所有 而不是 PyQt。

构造一个以 0 为最小值、99 为最大值的旋转框, 步长值为 1。该值最初设置为 0。它的父级为 父母。

另请参见 setMinimum()、setMaximum() 和 setSingleStep()。

您可以在诺基亚的Qt documentation 中找到类似的文字。

工作代码示例:

from PyQt4 import QtGui
app = QtGui.QApplication([])
steps_spin = QtGui.QSpinBox()
steps_spin.setMaximum(1000000)
steps_spin.setValue(10000)
steps_spin.setMinimum(100)
steps_spin.setSingleStep(100)
steps_spin.show()

【讨论】:

以上是关于如何实时取得QSpinBox的值的主要内容,如果未能解决你的问题,请参考以下文章

PyQt4:QSpinBox 不接受高于 100 的值

QSlider 和 QSpinBox 之间的 Qt 模型视图架构

PyQt5组件之QSpinBox

Qt入门系列开发教程基础控件篇QSpinBox旋转框

Python Qt GUI设计:QSpinBox计数器类(基础篇—15)

Python Qt GUI设计:QSpinBox计数器类(基础篇—15)