Qt4 (Подскажите что делаю не так)

Модератор: Модераторы разделов

Аватара пользователя
Nerr
Сообщения: 65

Qt4

Сообщение Nerr »

Код: Выделить всё

#include <QApplication>
#include <QFont>
#include <QLCDNumber>
#include <QPushButton>
#include <QSlider>
#include <QVBoxLayout>
#include <QWidget>

class MyWidget : public QWidget
{
    public:
        MyWidget(QWidget *parent = 0);
};

MyWidget::MyWidget(QWidget *parent)
    : QWidget(parent)
{
    QPushButton *quit = new QPushButton(tr("Quit"));
    quit->setFont(QFont("Times", 18, QFont::Bold));

    QLCDNumber *lcd = new QLCDNumber(3);
    lcd->setSegmentStyle(QLCDNumber::Filled);

    QSlider *slider = new QSlider(Qt::Horizontal);
    slider->setRange(0, 999);
    slider->setValue(0);

    QPushButton *qdv1 = new QPushButton(tr("50"));
    QPushButton *qdv2 = new QPushButton(tr("250"));
    QPushButton *qdv3 = new QPushButton(tr("450"));
    QPushButton *qdv4 = new QPushButton(tr("750"));

    connect(quit, SIGNAL(clicked()), qApp, SLOT(quit()));
    connect(slider, SIGNAL(valueChanged(int)),
        lcd, SLOT(display(int)));
    connect(qdv1, SIGNAL(clicked()), slider, SLOT(setValue(50)));
    connect(qdv2, SIGNAL(clicked()), slider, SLOT(setValue( 250)));
    connect(qdv3, SIGNAL(clicked()), slider, SLOT(setValue(450)));
    connect(qdv4, SIGNAL(clicked()), slider, SLOT(setValue(750)));

    QVBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(quit);
    layout->addWidget(lcd);
    layout->addWidget(slider);
    layout->addWidget(qdv1);
    layout->addWidget(qdv2);
    layout->addWidget(qdv3);
    layout->addWidget(qdv4);
    setLayout(layout);
}

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MyWidget widget;
    widget.show();
    return app.exec();
}


по моему мнению при нажатии на кнопки должен двигаться слайдер и меняться число, но ничего не происходит.
изучаю Qt4 по встроенной документации, там есть такое упражнение.
Спасибо сказали:
Аватара пользователя
Atragor
Сообщения: 681
Статус: ...

Re: Qt4

Сообщение Atragor »

Разве так можно?

Код: Выделить всё

SLOT(setValue(50))


Скорее всего, придется создать производный от QPushButton класс как-нибудь так:

Код: Выделить всё

#include <QPushButton>
class MyButton: public QPushButton {
    Q_OBJECT
    public:
    MyButton(QString title): QPushButton(title) {
        connect(this, SIGNAL(clicked()), this, SLOT(click()));
    }
    signals:
        void myButtonClicked(int value);
    private slots:
        void click() {
            emit myButtonClicked(text().toInt());
        }
};


И произвести соответствующие замены в основной программе.Тогда будет работать.
If you were MEANT to understand it, we wouldn't have called it 'code' © bash.org
Спасибо сказали:
Аватара пользователя
Electronix
Сообщения: 53
ОС: Slackware, Suse, XP

Re: Qt4

Сообщение Electronix »

Nerr
Передавать значения параметров в slot нельзя, только типы.
В твоем случае тебе нужно ретранслировать/перенеправить вызов функции с нужным параметром.
We have no beginning, we have no end. We are infinite.
Спасибо сказали: