求救:如何实时取得QSpinBox的值?

superwavelet 2010-10-21 12:25:15
我想通过
void MainWindow::GetValue1(int value1)
{
spinBox1value=spinBox1->value();
}

QObject::connect(spinBox1, SIGNAL(valueChanged(int)),
this,SLOT(GetValue1(int)));

把spinBox1的值实时取得,然后把spinBox1value赋值给另一个cpp文件。
但是出现错误:error C2065: 'spinBox1' : undeclared identifier
...全文
1985 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackfacewa 2010-10-25
  • 打赏
  • 举报
回复
基本的面向对象的概念都不清楚!楼主还是先仔细的好好的看看面向对象的基础!
至少你描述问题的时候能讲的别人看起来很清晰
yeaiping 2010-10-25
  • 打赏
  • 举报
回复
自己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信号相连,这样就更简单了。

记住,qt中的信号槽机制让两个互不相干的模块通信变得简单
lefttime 2010-10-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 superwavelet 的回复:]
引用 8 楼 lefttime 的回复:
从代码分析来看, spinBox1是在构造函数中定义的, 它的作用域(不是生命周期)仅在构造函数中, 所以会出现未定义的错误, 它并不是什么ui的成员~``
所以比较直接的解决方式是将spinBox1修改成类成员即可~``


您好,但是我怎么在另一个类中使用connect函数?因为connect函数要调用spinBox1

谢谢
[/Quote]
...另一个类中使用connect函数...这是什么意思?
spinBox1如果作为类成员的话, 那在别的类中引用这个类的成员即可, 还有什么疑问么?
dbzhang800 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 superwavelet 的回复:]
把spinBox1的值实时取得,然后把spinBox1value赋值给另一个cpp文件。
[/Quote]
不要总拿cpp文件说事,你关心的应该是这个类的对象和另一个类的对象如何传值这样的问题。
superwavelet 2010-10-21
  • 打赏
  • 举报
回复

#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();
}
superwavelet 2010-10-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lefttime 的回复:]
从代码分析来看, spinBox1是在构造函数中定义的, 它的作用域(不是生命周期)仅在构造函数中, 所以会出现未定义的错误, 它并不是什么ui的成员~``
所以比较直接的解决方式是将spinBox1修改成类成员即可~``
[/Quote]

您好,但是我怎么在另一个类中使用connect函数?因为connect函数要调用spinBox1

谢谢
lefttime 2010-10-21
  • 打赏
  • 举报
回复
从代码分析来看, spinBox1是在构造函数中定义的, 它的作用域(不是生命周期)仅在构造函数中, 所以会出现未定义的错误, 它并不是什么ui的成员~``
所以比较直接的解决方式是将spinBox1修改成类成员即可~``
lbwave1 2010-10-21
  • 打赏
  • 举报
回复
spinBox1 是ui下的成员 当然报error C2065: 'spinBox1' : undeclared identifier 未定义的错误
lbwave1 2010-10-21
  • 打赏
  • 举报
回复
你是用QT UI生成的代码吧 要写ui->spinBox1->value()
因为qt有一段
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
class Ui::MainWindow 被生成 你看不见
superwavelet 2010-10-21
  • 打赏
  • 举报
回复
求助ing.....
superwavelet 2010-10-21
  • 打赏
  • 举报
回复
Need help...........
superwavelet 2010-10-21
  • 打赏
  • 举报
回复
So, what's your solution?

21,489

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧