crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Не могу разобраться с combobox и QpushButton
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Litkevich Yuriy Дата 28.12.2008, 14:41
  В этой программе два окошка, одно наследник QDialog. А второе просто для демонстрации работы самодельного сигнала.
main.cpp

#include <QtGui>
#include "class.h"

int main(int argc, char *argv[])
{
  QApplication     app(argc, argv);
    // Устанавливаем кодеки
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
    QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); // Для функций перевода tr()

  CTest        wgt;// основной виджет
  QLabel   ctrlwgt;// виджет для контроля
  
    // Соеденяем самодельный сигнал самодельного виджета
    // со стандартным слотом метки (QLable)
    QObject::connect(&wgt, SIGNAL(sigChange(int)), &ctrlwgt, SLOT(setNum(int)));
    
    // т.к. оба неимеют родителя - виджеты верхнего уровня
    // надо обоим сказать, чтобы появились
    ctrlwgt.show();
    wgt.show();
    
    return app.exec();
}


class.h

#ifndef CLASS_H
#define CLASS_H

#include <QDialog>

class QComboBox;
class QPushButton;

class CTest: public QDialog
{
    Q_OBJECT

public:
    CTest(QWidget *parent = 0);

signals:
    void sigChange(int);

private:
    QComboBox        *cb;
    QPushButton        *btn;
    
private slots:
    void slotComboChange(int);
};

#endif //CLASS_H


class.cpp

#include <QtGui>
#include "class.h"

CTest::CTest(QWidget *parent):QDialog(parent)
{
  QStringList    list;
  QVBoxLayout    *lay = new QVBoxLayout;

    cb = new QComboBox(this);
    list << " " << "profile 1" << "profile 2" << "profile 3" << "profile 4" << "profile 5";
    cb->addItems(list);
    connect(cb, SIGNAL(currentIndexChanged(int)), this, SLOT(slotComboChange(int)));

    btn = new QPushButton(this);
    btn->setText(tr("Тык"));
    
    lay->addWidget(cb);
    lay->addWidget(btn);
    
    this->setLayout(lay);


    qDebug() << "QComboBox is visible? " << cb->isVisible();

}

void CTest::slotComboChange(int idx)
{
qDebug() << "Curent index=" << idx;
    
    // посылаем самодельный сигнал,
    // передавая в качестве параметра текущий индекс выпадающего списка
    emit sigChange(idx);

}



да кодировка файлов UTF-8, поэтому setCodecForTr имеет такое значение. если у тебя другая - исправь
Litkevich Yuriy Дата 28.12.2008, 13:54
 
Цитата(Andrewshkovskii @ 28.12.2008, 16:03) *
что насчет примера?
щас накидаю
Andrewshkovskii Дата 28.12.2008, 13:03
  Litkevich Yuriy, что насчет примера?..я просто никак успокоиться не могу..
Litkevich Yuriy Дата 28.12.2008, 0:56
 
Цитата(Andrewshkovskii @ 28.12.2008, 3:49) *
Что я делаю не так?...
завтра на свежую голову пример накидаю
Andrewshkovskii Дата 28.12.2008, 0:49
  Все, понял..сигналы генерируются..слоты вызываются по сигналам..спасибо

не...не получается..
Значит так :
При изменении позиции в QCombobox генерируется сигнал activated,так?
Пишу слот :
private slots:
void SetChooseButtonProfileEnable();

Соединяю так :
connect(ProfileList, SIGNAL(activated()), this, SLOT(SetChooseButtonCriteriaEnable() ) );
ProfileList - этой мой combobox.

Что я делаю не так?...

Реализация SetChooseButtonProfileEnable

void Mail_choose:: SetChooseButtonProfileEnable(int index)
{
ChooseProfile->setEnabled(true);
}
;
+Поменял описания слота и соединение :
connect(ProfileList,SIGNAL(activated(int)),this,SLOT(SetChooseButtonCriteriaEnab
le(int)));

Только смысла от этого...
Litkevich Yuriy Дата 27.12.2008, 23:04
 
Цитата(sagifire @ 28.12.2008, 1:54) *
Но ошибка "undefined reference" значит отсутствие реализации
такая ошибка возникает, когда и объявление/интерфейс и реализация класса в одном файле. Но Andrewshkovskii, говорит, что они в разных. Поэтому не понятно в чем дело.
sagifire Дата 27.12.2008, 22:54
  Для сигналов реализации не нужно, только для методов и слотов.
Но ошибка "undefined reference" значит отсутствие реализации
Andrewshkovskii Дата 27.12.2008, 22:47
  Это как это?может мы под реализацией понимаем каждый свое?
Ведь в хидере объявляешь сигнал .В сорце его реализуешь. как и обычные методы класса.что не так?
Litkevich Yuriy Дата 27.12.2008, 22:41
 
Цитата(Andrewshkovskii @ 28.12.2008, 1:17) *
наличие реализации сингалов..спасибо!
у сигнала не должно быть реализации!
Andrewshkovskii Дата 27.12.2008, 22:17
  черт, не думал что qt требует наличие реализации сингалов..спасибо!
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 13:35