Russian Qt Forum
Сентябрь 22, 2024, 19:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: событие+connect  (Прочитано 5095 раз)
anv
Гость
« : Август 28, 2012, 18:30 »

Добрый день.
Пытаюсь после нажатия кнопки , текст из QLineEdit(MyLineEdit) перенести,в QLabel. Немогу поменять значение переменной startsigal. Кнопка нажимается - всплывает окошко messege, а переменная не меняет значение,когда я ее подставляю через get_startsignal в main.
Помогите,пожалуйста.Второй день мучаюсь с проблемкой.


#ifndef _MyLineEdit_h_
#define _MyLineEdit_h_

#include <QtGui/QtGui>
#include <QtCore/QtCore>

class MyLineEdit : public QLineEdit
{

public:
    MyLineEdit(QWidget*pwgt=0);
    //void sendSignal();
   bool get_startsignal();
   QString get_str();

   
protected:
    virtual void keyPressEvent(QKeyEvent*pe);

   //void textChanged(const QString&);

private:
   
   bool startsignal;
    bool*ptr_startsignal;

   QString str;
   QString*ptrstr;
QMessageBox* message;
};

#endif //_MyLineEdit_h_

#include "MyLineEdit.h"

MyLineEdit::MyLineEdit(QWidget*pwgt): QLineEdit(pwgt)
{startsignal=false;
message =new QMessageBox;
str="text1";
ptr_startsignal=&startsignal;
ptrstr=&str;
}

//void MyLineEdit::sendSignal()
//{emit textChanged(this->text());}

void MyLineEdit::keyPressEvent(QKeyEvent*pe){
   if (pe->key() == Qt::Key_V){*ptrstr="text2";*ptr_startsignal=true;message->information(this,"ok!",this->get_str());
   
   }
   
   
QLineEdit::keyPressEvent(pe);
}

bool MyLineEdit:: get_startsignal()
{return startsignal;}

QString MyLineEdit::get_str()
{return *ptrstr;}


#include <QtGui/QtGui>
#include <QtCore/QtCore>
#include "MyView.h"
#include "MyLineEdit.h"
#pragma comment(lib, "QtGui4.lib")
#pragma comment(lib, "QtCore4.lib")
// ----------------------------------------------------------------------
bool start=false;
int main(int argc, char** argv)
{
    QApplication   app(argc, argv);
    QGraphicsScene scene(QRectF(0, 0, 1000, 1000));
    MyView*      pView  = new MyView(&scene);
   
    QWidget        wgt;

    QString variable="images/crab.jpg";
   QString variable2="temp text";
void butpick(MyLineEdit*myline,QLabel*mylabel);
   
//create objects
    QGraphicsPixmapItem* pPixmapItem =
        scene.addPixmap(QPixmap(variable));
    pPixmapItem->setFlags(QGraphicsItem::ItemIsMovable);

    QGraphicsTextItem* pTextItem =
        scene.addText(variable2);
    pTextItem->setFlags(QGraphicsItem::ItemIsMovable);

    QLabel*    plblAge = new QLabel("Age");

    QLineEdit*ptxt2=new QLineEdit;
    MyLineEdit*ptxtedit=new MyLineEdit;

   plblAge->setText(ptxtedit->get_str());


//Layout setup
 QVBoxLayout* pvbxLayout = new QVBoxLayout;   
    pvbxLayout->addWidget(pView);
    pvbxLayout->addWidget(plblAge);
   pvbxLayout->addWidget(ptxt2);
    pvbxLayout->addWidget(ptxtedit);

//connect
   butpick(ptxtedit,plblAge);
   
wgt.setLayout(pvbxLayout);
wgt.show();
return app.exec();
}
///
void butpick(MyLineEdit*myline,QLabel*mylabel)
{  MyLineEdit*tr=myline;
   QLabel*gr=mylabel;
   if(tr->get_startsignal()){
   QObject::connect(tr, SIGNAL(textChanged(const QString&)),
      gr, SLOT(setText(const QString&)));}
   
   };
Записан
andrew.k
Гость
« Ответ #1 : Август 28, 2012, 20:09 »

код каша какая-то. открывай книгу по qt и начинай по порядку примеры изучать.
Лучше бы, конечно, с с++ начать, но видимо это бессмысленно писать.
Записан
anv
Гость
« Ответ #2 : Сентябрь 01, 2012, 08:00 »

Не помогают книги... Убрал "кашу" .QLabel и MyLineEdit(QLineEdit). Пытаюсь ,почти как в книжном примере,перенести текст из MyLimeEdit в QLabel,но не сразу,а после нажатия кнопки клавиатуры.
Код:

#ifndef _MyLineEdit_h_
#define _MyLineEdit_h_

#include <QtGui/QtGui>
#include <QtCore/QtCore>

class MyLineEdit : public QLineEdit
{

public:
    MyLineEdit(QWidget*pwgt=0);
int get_startconnect();
void set_startconnect(int&st);

protected:
    virtual void keyPressEvent(QKeyEvent*pe);

private:
int startconnect;
};
#endif //_MyLineEdit_h_

/////////////////////////////////////////////////////////////////////////////////
#include "MyLineEdit.h"

MyLineEdit::MyLineEdit(QWidget*pwgt): QLineEdit(pwgt)
{startconnect=0;}

int MyLineEdit::get_startconnect()
{return startconnect;}

void MyLineEdit::set_startconnect(int&st)
{st=1;}

void MyLineEdit::keyPressEvent(QKeyEvent*pe)
{if (pe->key() == Qt::Key_V){set_startconnect(startconnect);}
   QLineEdit::keyPressEvent(pe);
}
//////////////////////////////////////////////////////////////////////////////
#include <QtGui/QtGui>
#include <QtCore/QtCore>
#include "MyLineEdit.h"
#pragma comment(lib, "QtGui4.lib")
#pragma comment(lib, "QtCore4.lib")

// ----------------------------------------------------------------------
int main(int argc, char** argv)
{
    QApplication  app(argc, argv);
    QWidget        wgt;
    QLabel*    plblAge = new QLabel("Age");
    MyLineEdit*txtp =new MyLineEdit;

    QVBoxLayout* pvbxLayout = new QVBoxLayout;
    pvbxLayout->addWidget(plblAge);
    pvbxLayout->addWidget(txtp);

    wgt.setLayout(pvbxLayout);
    wgt.show();

if(txtp->get_startconnect()==1) {
QObject::connect(txtp, SIGNAL(textChanged(const QString&)),
plblAge, SLOT(setText(const QString&)));};


    return app.exec();
}


 
Записан
mutineer
Гость
« Ответ #3 : Сентябрь 01, 2012, 09:48 »

В чем вообще идея этого кода? Ты проверяешь переменную startconnect один раз на старте приложения, а изменяешь ее потом, в процессе работы, больше не проверяя. Получается ерунда
Записан
anv
Гость
« Ответ #4 : Сентябрь 01, 2012, 16:39 »

Спасибо.Заклинило. все меня Quest3d сбивает.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #5 : Сентябрь 10, 2012, 14:00 »

М-да действительно написал прогу
что-то  keyPressEvent (QKeyEvent * event)
не срабатывает  Обеспокоенный

#ifndef TRANSPORTTXT_H
#define TRANSPORTTXT_H

#include <QtGui/QWidget>
#include "ui_transporttxt.h"
#include "QKeyEvent"
#include "QLineEdit"
#include "QLabel"
#include "QString"
#include "QDebug"


class transportTXT : public QWidget
{
    Q_OBJECT

public:
    QString string;
public:
    transportTXT(QWidget *parent = 0);
    ~transportTXT();

public slots:
   void get_text(const QString&);
signals:
   void sg_txt(const QString&);

protected:
    void keyPressEvent ( QKeyEvent * event );
    void resizeEvent(QResizeEvent* event);

private:
    Ui::transportTXTClass ui;
};

#endif // TRANSPORTTXT_H




#include "transporttxt.h"

transportTXT::transportTXT(QWidget *parent)
    : QWidget(parent)
{
   ui.setupUi(this);

   connect(ui.lineEdit,SIGNAL(textChanged (const QString& )),this,SLOT(get_text(const QString&)));
   //connect(this,SIGNAL(sg_txt(const QString&)),ui.label,SLOT(setText(const QString&)));
}

transportTXT::~transportTXT()
{
}

void transportTXT::resizeEvent(QResizeEvent* event)
{
   ui.label->setText(string);
   qDebug()<<"string = "<<string;
   event->accept();
}

void transportTXT:: keyPressEvent (QKeyEvent * event)
{
   if(event->key()==Qt::Key_0)
   {
      ui.label->setText(string);
   //qDebug()<<"string = "<<string;
   //connect(this,SIGNAL(sg_txt(const QString&)),ui.label,SLOT(setText(const QString&)));
      event->accept();
   }
}

void transportTXT::get_text(const QString &str )
{
   string = str;
   qDebug()<<"string = "<<string;
}

 Непонимающий
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #6 : Сентябрь 10, 2012, 14:09 »

Почему так может происходить Непонимающий что keypressed не срабатывает.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #7 : Сентябрь 10, 2012, 14:28 »

Подскажите почему???  Непонимающий
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #8 : Сентябрь 10, 2012, 14:45 »

скорее всего события о нажатии поступают не этому виджету. или может ты просто не тот ноль жмёшь Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #9 : Сентябрь 11, 2012, 09:40 »

 Строит глазки ну может быть
хотя странно по коду правильно  я делую или нет ?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4744



Просмотр профиля WWW
« Ответ #10 : Сентябрь 11, 2012, 12:14 »

по куску, который ты привёл — правильно, но ведь всей картины-то не видно
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 23.