Название: событие+connect Отправлено: 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&)));} }; Название: Re: событие+connect Отправлено: andrew.k от Август 28, 2012, 20:09 код каша какая-то. открывай книгу по qt и начинай по порядку примеры изучать.
Лучше бы, конечно, с с++ начать, но видимо это бессмысленно писать. Название: Re: событие+connect Отправлено: anv от Сентябрь 01, 2012, 08:00 Не помогают книги... Убрал "кашу" .QLabel и MyLineEdit(QLineEdit). Пытаюсь ,почти как в книжном примере,перенести текст из MyLimeEdit в QLabel,но не сразу,а после нажатия кнопки клавиатуры.
Код:
Название: Re: событие+connect Отправлено: mutineer от Сентябрь 01, 2012, 09:48 В чем вообще идея этого кода? Ты проверяешь переменную startconnect один раз на старте приложения, а изменяешь ее потом, в процессе работы, больше не проверяя. Получается ерунда
Название: Re: событие+connect Отправлено: anv от Сентябрь 01, 2012, 16:39 Спасибо.Заклинило. все меня Quest3d сбивает.
Название: Re: событие+connect Отправлено: demaker от Сентябрь 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; } ??? Название: Re: событие+connect Отправлено: demaker от Сентябрь 10, 2012, 14:09 Почему так может происходить ??? что keypressed не срабатывает.
Название: Re: событие+connect Отправлено: demaker от Сентябрь 10, 2012, 14:28 Подскажите почему??? ???
Название: Re: событие+connect Отправлено: kambala от Сентябрь 10, 2012, 14:45 скорее всего события о нажатии поступают не этому виджету. или может ты просто не тот ноль жмёшь :)
Название: Re: событие+connect Отправлено: demaker от Сентябрь 11, 2012, 09:40 ::) ну может быть
хотя странно по коду правильно я делую или нет ? Название: Re: событие+connect Отправлено: kambala от Сентябрь 11, 2012, 12:14 по куску, который ты привёл — правильно, но ведь всей картины-то не видно
|