Qt 信号的值如何返回?

project15 2009-03-31 03:26:51
代码如下
#include <QApplication>
#include <QPushButton>
#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget *window = new QWidget;
window->setWindowTitle("Show your Input!");

QSpinBox *spinBox = new QSpinBox;

QPushButton *button = new QPushButton("set spinBox to 0");

QSlider *slider = new QSlider(Qt::Horizontal);
spinBox->setRange(0,130);
slider->setRange(0,130);
button->setText("set 0");

QObject::connect(spinBox,
SIGNAL(valueChanged(int)),
slider,
SLOT(setValue(int))
);
QObject::connect(slider,
SIGNAL(valueChanged(int)),
spinBox,
SLOT(setValue(int))
);

QObject::connect(button,
SIGNAL(clicked()),
spinBox,SLOT(setValue(0))
);
spinBox->setValue(35);

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBox);
layout->addWidget(slider);
layout->addWidget(button);
window->setLayout(layout);
window->show();

return app.exec();
}


我希望在点击按钮的时候,文本框清零
   QObject::connect(button,
SIGNAL(clicked()),
spinBox,SLOT(setValue(0))
);

这里的SIGNAL是clicked()
SLOT是setValue(0)
可是点了却没有效果
要怎么作?
...全文
555 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
project15 2009-03-31
  • 打赏
  • 举报
回复
谢谢jawiudi提供的思路

成功获取型号,并将spinBox的值设为0了。

mainwindow.cpp 代码如下

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindowClass)
{
ui->setupUi(this);
connect(ui->spinBox,
SIGNAL(valueChanged(int)),
ui->slider,
SLOT(setValue(int))
);
connect(ui->slider,
SIGNAL(valueChanged(int)),
ui->spinBox,
SLOT(setValue(int))
);
ui->spinBox->setValue(35);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{
ui->spinBox->setValue(0);
}


.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>

namespace Ui
{
class MainWindowClass;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = 0);
~MainWindow();

private:
Ui::MainWindowClass *ui;

private slots:
void on_pushButton_clicked();
};

#endif // MAINWINDOW_H


main.cpp
#include <QtGui/QApplication>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
  • 打赏
  • 举报
回复
是QT4吧。
QWidget *window = new QWidget;
window 是你的主窗口吧,一般不需要在main()函数里做这么多操作。
一般是在main里实例化一个window ,然后show就可以了。

至于你说的文本框等,都可以作为window 的成员,然后signals and slots的绑定都可以放到window的构造函数里。

你这里
QObject::connect(button,
SIGNAL(clicked()),
spinBox,SLOT(setValue(0))
);
怀疑是绑定信号,出问题。
project15 2009-03-31
  • 打赏
  • 举报
回复
你的
void spinbox::on_pushButton_clicked()
{
ui->spinBox->setValue(0);
}
放在哪里
jawiudi 2009-03-31
  • 打赏
  • 举报
回复
你的程序我试了,确实不行,实际上connect没有问题,所以我觉得应该自己定义一个SLOT,随便编了一个程序,能满足要求。
我是在QT Creator中写的.我建立一个Qt4 GUI Application工程,在QT设计器中添加部件:一个spinBox,一个slider,一个pushButton。
头文件中添加槽函数:
private slots:
void on_pushButton_clicked();


源文件中在构造函数中添加代码:
ui->setupUi(this);


connect(ui->spinBox,
SIGNAL(valueChanged(int)),
ui->slider,
SLOT(setValue(int))
);
connect(ui->slider,
SIGNAL(valueChanged(int)),
ui->spinBox,
SLOT(setValue(int))
);
ui->spinBox->setValue(35);//初始值

实现槽函数:
void spinbox::on_pushButton_clicked()
{
ui->spinBox->setValue(0);//设成零
}

主要和你的不同在于,清零时用自定义的槽函数。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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