Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Kurles от Март 05, 2011, 01:15



Название: QTableWidget и QSpinDoubleBox
Отправлено: Kurles от Март 05, 2011, 01:15
Здравствуйте! Подскажите куда копать: есть QTableWidget, ячейки которого заполнены QSpinDoubleBox, хотелось бы заполучить возможность посылки сигнала при клике на этот самый QSpinDoubleBox, пробовал через наследование и переопределение слота setFocus() - не вышло. Направте на путь истинный, пожалуйста  :)


Название: Re: QTableWidget и QSpinDoubleBox
Отправлено: alexman от Март 05, 2011, 08:39
А как вы QSpinDoubleBox устанавливаете?


Название: Re: QTableWidget и QSpinDoubleBox
Отправлено: Kurles от Март 05, 2011, 17:50
Устанавливаю так:
Код:
MySpinBox *dsb = new MySpinBox(MySpinBox::SpinBoxForTime); //MySpinBox наследован от QSpinDoubleBox
    connect(dsb,SIGNAL(valueChanged(MySpinBox*)),SLOT(onValueChanged(MySpinBox*))); //присоединение сигнала к слоту
    ui->tableWidget->setCellWidget(0,0,dsb);
в идеале хотелось  бы получить такой-же сигнальчик, как во второй строке кода, только по получению спинбоксом фокуса ввода.


Название: Re: QTableWidget и QSpinDoubleBox
Отправлено: m_ax от Март 05, 2011, 18:00
Устанавливаю так:
Код:
MySpinBox *dsb = new MySpinBox(MySpinBox::SpinBoxForTime); //MySpinBox наследован от QSpinDoubleBox
    connect(dsb,SIGNAL(valueChanged(MySpinBox*)),SLOT(onValueChanged(MySpinBox*))); //присоединение сигнала к слоту
    ui->tableWidget->setCellWidget(0,0,dsb);
в идеале хотелось  бы получить такой-же сигнальчик, как во второй строке кода, только по получению спинбоксом фокуса ввода.
Это не правильно. Так не надо устанавливать.
надо как то так:
Код
C++ (Qt)
connect(dsb, SIGNAL(valueChanged(int)), this, SLOT(onValueChanged(int)));
 

QSpinDoubleBox - это в смысле QDoubleSpinBox.. или уже что то новое придумали?


Название: Re: QTableWidget и QSpinDoubleBox
Отправлено: Kurles от Март 05, 2011, 18:15
Это не правильно. Так не надо устанавливать.
надо как то так:
Код
C++ (Qt)
connect(dsb, SIGNAL(valueChanged(int)), this, SLOT(onValueChanged(int)));
 
Это понятно, спасибо, исправим. Хотя в доках написано, что
Цитировать
Код
C++ (Qt)
bool QObject::connect ( const QObject * sender, const char * signal, const char * method, Qt::ConnectionType type = Qt::AutoConnection ) const
This function overloads connect().
Connects signal from the sender object to this object's method.
Equivalent to
Код
C++ (Qt)
connect(sender, signal, this, method, type)
.
так что в теории должно быть без разницы.
Цитировать

QSpinDoubleBox - это в смысле QDoubleSpinBox.. или уже что то новое придумали?
Да, мой косяк, читать QSpinDoubleBox как QDoubleSpinBox :)


Название: Re: QTableWidget и QSpinDoubleBox
Отправлено: m_ax от Март 05, 2011, 18:19
Цитировать
Это понятно, спасибо, исправим. Хотя в доках написано, что
...
так что в теории должно быть без разницы.
Я вообщето это к тому, что аргументы у valueChanged(int) и у onValueChanged(int) должны быть int, а не MySpinBox*


Название: Re: QTableWidget и QSpinDoubleBox
Отправлено: Kurles от Март 05, 2011, 18:40
Цитировать
Это понятно, спасибо, исправим. Хотя в доках написано, что
...
так что в теории должно быть без разницы.
Я вообщето это к тому, что аргументы у valueChanged(int) и у onValueChanged(int) должны быть int, а не MySpinBox*
У меня сигнал свой, который указатель на сам себя возвращает при изменении значения спинбокса, так что все в порядке :)


Название: Re: QTableWidget и QSpinDoubleBox
Отправлено: m_ax от Март 05, 2011, 18:48
Цитировать
У меня сигнал свой, который указатель на сам себя возвращает при изменении значения спинбокса, так что все в порядке Улыбающийся
Ааа... Ну раз сейчас такие костыли в порядке вещей.. Тогда наверно нужно зарегистрировать ваш тип MySpinBox*. Почитайте про
Q_DECLARE_METATYPE,
QMetaType


Название: Re: QTableWidget и QSpinDoubleBox
Отправлено: Kurles от Март 05, 2011, 19:08
Цитировать
У меня сигнал свой, который указатель на сам себя возвращает при изменении значения спинбокса, так что все в порядке Улыбающийся
Ааа... Ну раз сейчас такие костыли в порядке вещей.. Тогда наверно нужно зарегистрировать ваш тип MySpinBox*. Почитайте про
Q_DECLARE_METATYPE,
QMetaType
На счет костылей - ну как умеем, раньше только на асме z80 программил, там любые костыли в порядке вещей. А по основному вопросу, т.е. как отловить событие получения фокуса ввода спинбоксом есть что подсказать?


Название: Re: QTableWidget и QSpinDoubleBox
Отправлено: m_ax от Март 05, 2011, 19:33
Цитировать
А по основному вопросу, т.е. как отловить событие получения фокуса ввода спинбоксом есть что подсказать?
я бы курил в сторону определения своего eventFilter:
bool eventFilter(QObject *obj, QEvent *event);


Название: Re: QTableWidget и QSpinDoubleBox
Отправлено: Kurles от Март 05, 2011, 20:17
Цитировать
А по основному вопросу, т.е. как отловить событие получения фокуса ввода спинбоксом есть что подсказать?
я бы курил в сторону определения своего eventFilter:
bool eventFilter(QObject *obj, QEvent *event);

Оно, спасибо.