Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > lineEdit ->setText работает только из main


Автор: americanets 1.11.2008, 17:00
Срабатывает только в main функции , а как его изменить в других ? 

Код

#include <QtGui/QApplication>
#include "mainwindow.h"

void testF();

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    w.ui.lineEdit->setText("dffffffff");
    testF();
    return a.exec();
}

void testF() {
    MainWindow w;
    w.ui.lineEdit->setText("ddsdssdds");
}



Автор: americanets 1.11.2008, 18:59
разобрался


Код

#include <QtGui/QApplication>
#include <QtGui>
#include "mainwindow.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.testF();
    w.show();
    //w.ui.lineEdit->setText("dffffffff");
    //QMessageBox::information(NULL, "fdf", "dfgdfgf") ;
    //testF(  );
    return a.exec();
}




"mainwindow.h"

Код

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QtGui/QMainWindow>
#include "ui_mainwindow.h"

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~MainWindow();
    Ui::MainWindowClass ui;
    void testF( );
};

#endif // MAINWINDOW_H


mainwindow.срр


Код

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
}

MainWindow::~MainWindow()
{

}

void MainWindow::testF(  )
{
   connect(ui.pushButton,SIGNAL(clicked()), this, SLOT(close()) );
   // QMessageBox::information(NULL, "fdf", "dfgdfgf") ;
    //QMessageBox::critical(NULL, "fdf", "dfgdfgf");
   ui.lineEdit->clear();
}



Автор: mes 1.11.2008, 19:02
Цитата

...
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;                      // создаем на стеке объект w
    w.show();
    w.ui.lineEdit->setText("dffffffff");
    testF();
    return a.exec();
}
void testF() {
    MainWindow w;  // создаем на стеке объект w - то есть w здесь совсем другой - не тот что в main 
                                // закoмментируйте эту строчку и тогда 
    w.ui.lineEdit->setText("ddsdssdds"); // здесь будете использовать объект, созданный в main
}



Автор: americanets 1.11.2008, 19:12
mes, тут что то не пойму а как мне очистить поле при нажатии кнопки

Код

 connect(ui.pushClear,SIGNAL(clicked()), this,  ui.lineEdit->clear() );


не работает

Автор: mes 1.11.2008, 19:54
Цитата(americanets @  1.11.2008,  19:12 Найти цитируемый пост)
ui.lineEdit->clear() 

вынесите в отдельный метод и его имя используй .

Автор: americanets 5.11.2008, 10:02
mes, спасибо , понятно

Код

public slots:
    void clear();

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)