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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обратится к компоненту из другого класса/файла  (Прочитано 5448 раз)
NezLich
Гость
« : Август 16, 2012, 16:55 »

Есть стандартный проект QT Widget.
Добавляю к нему пользовательский класс. И проблема в том, как обратится к компоненту из пользовательского класса.
В главной классе (MainWindow) к нему можно достучаться так: ui->component.
Пробовал объявлять в пользовательском классе "ui_mainwindow", но приложение крешется при обращении к компонентам...
Записан
Bepec
Гость
« Ответ #1 : Август 16, 2012, 17:09 »

Код приведите пожалуйста .

А по делу - надо просто сделать его полем родительского класса. Ну или как вариант давать ему родителя Улыбающийся
Записан
NezLich
Гость
« Ответ #2 : Август 16, 2012, 17:31 »

Вот код test.h:
Код:
#ifndef TEST_H
#define TEST_H

#include <QMainWindow>
#include <ui_mainwindow.h>

class MainWindow;

class Test : public QMainWindow
{
    Q_OBJECT
public:
    explicit Test(QWidget *parent = 0);
    Ui_MainWindow Form;

signals:
   
public slots:


};

#endif // TEST_H

Код test.c:
Код:
#include "test.h"
#include "Mainwindow.h"
#include "ui_mainwindow.h"

Test::Test(QWidget *parent) :
    QMainWindow(parent)
{
    Form.FindButton->setVisible(false);
}
Записан
Bepec
Гость
« Ответ #3 : Август 16, 2012, 17:44 »

Кхм. Очень странный у вас подход.

Обычно взаимодействие с ГУИ осуществляется через собственный интерфейс - сигналы, слоты.
Так, как сделали вы, я ещё ниразу не делал и не видел, кто бы делал Улыбающийся Счас попробую сам Веселый
Записан
Bepec
Гость
« Ответ #4 : Август 16, 2012, 17:49 »

Вы видимо по памяти писали на коленке.
h
Код:
#ifndef TMO_H
#define TMO_H

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

class tmo : public QMainWindow
{
Q_OBJECT

public:
tmo(QWidget *parent = 0, Qt::WFlags flags = 0);
~tmo();

private:
Ui::tmoClass ui;
};

#endif // TMO_H
сpp
Код:
#include "tmo.h"

tmo::tmo(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
ui.label->setText("Olala");
}

tmo::~tmo()
{

}
Записан
NezLich
Гость
« Ответ #5 : Август 16, 2012, 19:10 »

Что-то не получается... Вообще то да, через слоты, просто в одном классе реализовал слоты для работы с деревом.
Попробовал их в главном файле подключить слот, но не получается...
Записан
Bepec
Гость
« Ответ #6 : Август 16, 2012, 19:11 »

На пустые слова можно ответить пустыми словами. А на неработающий проект можно ответить замечаниями и патчами.

PS это намёк. Начинали все.
Записан
NezLich
Гость
« Ответ #7 : Август 16, 2012, 19:15 »

Собственно пока вот такой код, но не работает.
Mainwindow.cpp
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "test.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    Test *treetest = new Test();

    QObject::connect(ui->TreeFiles,
                     SIGNAL(itemClicked(QTreeWidgetItem*,int)),
                     this,
                     SLOT(treetest->TreeClick(QTreeWidgetItem*,int)));
}

MainWindow::~MainWindow()
{
    delete ui;
}
test.h
Код:
#ifndef TEST_H
#define TEST_H

#include <QMainWindow>
#include <ui_mainwindow.h>

class MainWindow;

class Test : public QMainWindow
{
    Q_OBJECT
public:
    explicit Test(QWidget *parent = 0);

signals:
   
public slots:

    void TreeClick(QTreeWidgetItem *item, int column);

private:
    Ui::MainWindow ui;
};

#endif // TEST_H
test.cpp
Код:
#include "test.h"
#include "ui_mainwindow.h"
#include "QDebug"

Test::Test(QWidget *parent) :
    QMainWindow(parent)
{
    ui.setupUi(this);
}

void Test::TreeClick(QTreeWidgetItem *item, int column)
{
    QTreeWidgetItem *atem = new QTreeWidgetItem();

    atem->setText(0, "Test");

    ui.TreeFiles->addTopLevelItem(atem);
}
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Август 16, 2012, 19:29 »

изучай сигналы-слоты:
QObject::connect(ui->TreeFiles,
                     SIGNAL(itemClicked(QTreeWidgetItem*,int)),
                     treetest,
                     SLOT(TreeClick(QTreeWidgetItem*,int)));
Записан

Изучением 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
NezLich
Гость
« Ответ #9 : Август 16, 2012, 19:42 »

изучай сигналы-слоты:
QObject::connect(ui->TreeFiles,
                     SIGNAL(itemClicked(QTreeWidgetItem*,int)),
                     treetest,
                     SLOT(TreeClick(QTreeWidgetItem*,int)));
К сожалению, не реагирует на клик Грустный
Извиняюсь, клик работает, но вот дерево не добавляет компонент...
« Последнее редактирование: Август 16, 2012, 20:32 от NezLich » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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