Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [qt4] работа с указателем ui 
:(
    Опции темы
gordmiand
Дата 15.2.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



  В хидере переношу Ui::MainWindow *ui; из private в public, но все равно надо указывать 
ui->lineEdit->…  почему?

PM MAIL   Вверх
Любитель
Дата 15.2.2010, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Потому что дело не в прайват/паблик. Просто lineEdit vожно было писать только для глобальных переменных, полей класса (в том числе наследованных, если это паблик/протектед), параметров функции и локальных переменных функции. И всё.



Это сообщение отредактировал(а) Любитель - 15.2.2010, 18:10


--------------------
PM MAIL ICQ Skype   Вверх
gordmiand
Дата 15.2.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



это не только с lineEdit такая петрушка получается... и для label тоже... получается для все компонентов ui-> указывать надо?

Добавлено через 10 минут и 53 секунды
это не только с lineEdit такая петрушка получается... и для label тоже... получается для все компонентов надо железно указывать ui->  ?
PM MAIL   Вверх
bsa
Дата 15.2.2010, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



gordmiand, сделай наследование от Ui::MainWindow - после этого не нужно будет писать ui->...
Код
class MyWidget : public QMainWindow, private Ui::MainWindow
{
...
};

PM   Вверх
gordmiand
Дата 15.2.2010, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



mainwindow.h
Код

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
    class MainWindow;   // [U]error: forward declaration of 'struct Ui::MainWindow'[/U]
}

class MainWindow : public QMainWindow, private Ui::MainWindow
{ [U]// error: invalid use of incomplete type 'struct Ui::MainWindow'[/U]
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    //Ui::MainWindow *ui;


protected:
    void changeEvent(QEvent *e);

private:
      Ui::MainWindow *ui;

private slots:
    void on_checkBox_clicked();
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H



main.cpp
Код

#include <QtGui/QApplication>
#include "mainwindow.h"                 //? In file included from main.cpp:2: c:\proga\main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); 
    MainWindow w;
    w.show();
    return a.exec();
}

такие вот ошибки... что не так? совсем я заблудился в этих классах


PM MAIL   Вверх
gordmiand
Дата 15.2.2010, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



mainwindow.h
Код

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
    class MainWindow;   // [U]error: forward declaration of 'struct Ui::MainWindow'[/U]
}

class MainWindow : public QMainWindow, private Ui::MainWindow
{ [U]// error: invalid use of incomplete type 'struct Ui::MainWindow'[/U]
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    //Ui::MainWindow *ui;


protected:
    void changeEvent(QEvent *e);

private:
      Ui::MainWindow *ui;

private slots:
    void on_checkBox_clicked();
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H



main.cpp
Код

#include <QtGui/QApplication>
#include "mainwindow.h"                 //? In file included from main.cpp:2: c:\proga\main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); 
    MainWindow w;
    w.show();
    return a.exec();
}

такие вот ошибки... что не так? совсем я заблудился в этих классах

и вообще - при создании проекта какой базовый класс надо выбирать: Qmainwindow, QWidget, Qdialog...
в чем их отличие?
PM MAIL   Вверх
gordmiand
Дата 16.2.2010, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 15.4.2007

Репутация: нет
Всего: 0



mainwindow.h
Код

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
    class MainWindow;   // [U]error: forward declaration of 'struct Ui::MainWindow'[/U]
}

class MainWindow : public QMainWindow, private Ui::MainWindow
{ [U]// error: invalid use of incomplete type 'struct Ui::MainWindow'[/U]
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
    //Ui::MainWindow *ui;


protected:
    void changeEvent(QEvent *e);

private:
      Ui::MainWindow *ui;

private slots:
    void on_checkBox_clicked();
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H



main.cpp
Код

#include <QtGui/QApplication>
#include "mainwindow.h"                 //? In file included from main.cpp:2: c:\proga\main.cpp

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); 
    MainWindow w;
    w.show();
    return a.exec();
}

такие вот ошибки... что не так? совсем я заблудился в этих классах
и вообще - при создании проекта какой базовый класс надо выбирать: Qmainwindow, QWidget, Qdialog...
в чем их отличие?

PM MAIL   Вверх
kuvshinka
Дата 16.2.2010, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 386
Регистрация: 27.4.2008

Репутация: нет
Всего: нет



bsa: у меня что-то тоже не получается: что за класс MyWidget? базовый (который указываестя при создании приложения)? у меня базовый -  MainWindow.... а какой надо указывать?
пробую так:
Код

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow,  [U]private Ui::MainWindow[/U]
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();

protected:
    void changeEvent(QEvent *e);

//private:
    //Ui::MainWindow *ui;

private slots:
    void on_pushButton_clicked();
};

#endif // MAINWINDOW_H
 
ошибки  invalid use of incomplete type 'struct Ui::MainWindow',   forward declaration of 'struct Ui::MainWindow'

PM MAIL   Вверх
zayacnk
Дата 16.2.2010, 23:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 11.2.2010

Репутация: нет
Всего: нет



Попробуй по пунктам:

1. Создаешь форму например с кнопкой pbSet и строкой lText и сохраняешь форму в MainWindow.ui
    ObjectName у формы MainWindow

2. Создаешь хедер mainwindow.h следующго содержания:

Код

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

class MainWindow  :  public QMainWindow, public Ui::MainWindow
{
  Q_OBJECT

  public:
    MainWindow(QWidget *parent = 0);

  private slots: 
    void on_pbSet_clicked();
}



3. Исходник mainwindow.cpp следующего содержания
Код

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
  setupUi(this);
}

void MainWindow::on_pbSet_clicked()
{
  lText->setText(tr("hello"));
}



За опечатки сорри. Собственно ui указывать перед именами объектов формы указывать не надо
PM MAIL   Вверх
Любитель
Дата 17.2.2010, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Цитата(kuvshinka @  16.2.2010,  23:31 Найти цитируемый пост)
пробую так:

Только форвард-декларейшен при наследовании не применим. Компилятор должен знать сразу, сколько памяти классу нужно и т. д. Форвард декларейшен примением только для указателя/ссылки, но не для базового класса.


--------------------
PM MAIL ICQ Skype   Вверх
bsa
Дата 17.2.2010, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



kuvshinka, в твоем варианте используется идиома PIMPL. Т.е. Ui подключается в cpp файле. В этом случае без ui-> не обойтись. Я имел в виду то, что привел в пример zayacnk
PM   Вверх
kuvshinka
Дата 17.2.2010, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 386
Регистрация: 27.4.2008

Репутация: нет
Всего: нет



а хедер и исходник создавать полностью руками или можно их скомпилить при  разработке формы в qt designer?
PM MAIL   Вверх
bsa
Дата 17.2.2010, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



kuvshinka, если не ошибаюсь, дизайнер работает только с ui файлами. Поэтому h/cpp нужно создавать вручную.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1077 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.