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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Сигналы и слоты, текущее время в компоненте типа Qtimeedit.  (Прочитано 13275 раз)
Gate007
Гость
« : Февраль 15, 2012, 14:42 »

Задача: сделать так, чтобы в компоненте timeedit отображалось текущее время.
Как я себе это представляю:
Имеется компонент типа Qtimeedit, у него есть функция setTime. Для получения текущего времени необходимо использовать объект типа QTime, у которого есть функция currentTime и сигнал timeout. Соответственно нужен слот, который будет соединен с сигналом timeout, а у него в обработчике будет установка текущего времени для объекта timeedit.
Если неправ-подскажите где, если прав-смотрим дальше.
Пытаюсь реализовать. Для этого в заголовочном файле

Код
C++ (Qt)
class Myclass : public MainWindow {
Q_OBJECT
 
public slots:
  void mySlot();
 
};

Далее в cpp:

Код
C++ (Qt)
void Myclass::mySlot()
{
QTime time_obj;
ui->timeEdit->setTime(time_obj.currentTime());
}

Ошибка 'Ui::MainWindow* MainWindow::ui' is private
А как тогда мне обратиться к визуальному элементу не из класса mainwindow?
Записан
andrew.k
Гость
« Ответ #1 : Февраль 15, 2012, 14:53 »

1. Сделать у класса MyClass публичный метод setTime(const QTime &time), который будет задавать время как надо (лучше)
2. Сделать ui публичным в MyClass (хуже)
Записан
sudo
Гость
« Ответ #2 : Февраль 15, 2012, 14:55 »

Я здесь ui вообще не вижу. Доступ к нему должен быть.
Увидел. Либо сделать сеттер для времени, либо перенести ui в protected

Создавать объект QTime не нужно, его метод статический
Сигнал timeout() есть у QTimer, у QTime его нет

QTime, QDate и QDateTime вообще не имеют ни слотов, ни сигналов, они не являются QObject'ами
« Последнее редактирование: Февраль 15, 2012, 15:00 от sudo » Записан
andrew.k
Гость
« Ответ #3 : Февраль 15, 2012, 15:09 »

Я здесь ui вообще не вижу. Доступ к нему должен быть.
Увидел.
Где?
Либо сделать сеттер для времени, либо перенести ui в protected
в public
Записан
sudo
Гость
« Ответ #4 : Февраль 15, 2012, 15:12 »

Где?

MyClass отнаследован от MainWindow. Судя по ошибке компилятора ui именно там

в public

У нас же публичное наследование, protected будет достаточно для доступа
Записан
andrew.k
Гость
« Ответ #5 : Февраль 15, 2012, 15:28 »

Где?

MyClass отнаследован от MainWindow. Судя по ошибке компилятора ui именно там

в public

У нас же публичное наследование, protected будет достаточно для доступа
1. Где ты увидел, что там используется наследование?
2. Судя по ошибке компилятора используется агрегация через указатель.
3. Видимо ТС копировать не умеет (хороший программист будет), поэтому переписывал код по памяти и не весь переписал.
4. Какая связь между уровнем доступа и типом наследования? Ее нет.
5. protected будет недостаточно.

Афигеть можно.
Записан
sudo
Гость
« Ответ #6 : Февраль 15, 2012, 15:38 »

1.
class MyClass : public MainWindow - это не наследование?
2.
Именно судя по ошибке компилятора ui находится в MainWindow
3.
Да, одного класса не хватает
4-5.
Прочитай хотя бы у Алёны С++ (если не знаешь, кто это, то это печально Подмигивающий ) про права доступа при наследовании http://alenacpp.blogspot.com/2006/03/blog-post_11.html


Андрей, ну я тебя прошу, если мне не веришь, напиши сэмпл Подмигивающий Хотя про тип наследования я сказанул не подумав, освежил в памяти этот вид сексуальных извращений
« Последнее редактирование: Февраль 15, 2012, 16:26 от sudo » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Февраль 15, 2012, 16:00 »

Gate007, покажи полностью содержимое cpp/h.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Gate007
Гость
« Ответ #8 : Февраль 15, 2012, 16:13 »

Код
C++ (Qt)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
namespace Ui {
   class MainWindow;
}
 
class MainWindow : public QMainWindow
{
   Q_OBJECT
 
public:
   explicit MainWindow(QWidget *parent = 0);
   ~MainWindow();
 
private:
   Ui::MainWindow *ui;
};
class Myclass : public MainWindow {
Q_OBJECT
 
public slots:
  void mySlot();
 
};
 
#endif // MAINWINDOW_H

Код
C++ (Qt)
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QTime"
#include "QTimer"
 
 
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
//    MyClass ddd;
//    QObject::connect(time_obj, SIGNAL( timeout() ),
//                      ddd,  SLOT(mySlot));
}
 
void Myclass::mySlot()
{
QTime time_obj;
ui->timeEdit->setTime(time_obj.currentTime());
}
 
MainWindow::~MainWindow()
{
   delete ui;
}
 
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #9 : Февраль 15, 2012, 16:31 »

Зачем тебе Myclass? Определяй слот в MainWindow.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
andrew.k
Гость
« Ответ #10 : Февраль 15, 2012, 16:32 »

1.
class MyClass : public MainWindow - это не наследование?
Не заметил, что буквы Q нет.
Неужели, кто-то пользуется этим методом встраивания UI?
Тогда все равно странно. Класс сформированый после uic находится в неймспейсе Ui.
А тут какой-то неведомый класс MainWindow. Какие тут можно сделать выводы? Никаких.

Цитировать
Прочитай хотя бы у Алёны С++ (если не знаешь, кто это, то это печально  ) про права доступа при наследовании http://alenacpp.blogspot.com/2006/03/blog-post_11.html
Рассмешил.
Записан
andrew.k
Гость
« Ответ #11 : Февраль 15, 2012, 16:34 »

4-5.
Прочитай хотя бы у Алёны С++ (если не знаешь, кто это, то это печально Подмигивающий ) про права доступа при наследовании http://alenacpp.blogspot.com/2006/03/blog-post_11.html


Андрей, ну я тебя прошу, если мне не веришь, напиши сэмпл Подмигивающий Хотя про тип наследования я сказанул не подумав, освежил в памяти этот вид сексуальных извращений
Вот специально для тебя, sudo, открыл ссылку и нашел строку.

Цитировать
public наследование
protected и public данные из CBase остаются, соответственно protected и public.

PS прямо горячая тема получилась)))
« Последнее редактирование: Февраль 15, 2012, 16:36 от andrew.k » Записан
sudo
Гость
« Ответ #12 : Февраль 15, 2012, 16:37 »

Так тогда чем protected не нравится?
И я ж говорю, про тип наследования сказанул не подумав, за несколько лет абсолютнейшего неиспользования чего либо кроме public остальное затёрлось нафиг, поэтому могу даже спасибо сказать )
« Последнее редактирование: Февраль 15, 2012, 16:38 от sudo » Записан
andrew.k
Гость
« Ответ #13 : Февраль 15, 2012, 16:45 »

Так тогда чем protected не нравится?
И я ж говорю, про тип наследования сказанул не подумав, за несколько лет абсолютнейшего неиспользования чего либо кроме public остальное затёрлось нафиг, поэтому могу даже спасибо сказать )
Достаточно запомнить, что уровень доступа нельзя повысить, лишь понизить.
Записан
sudo
Гость
« Ответ #14 : Февраль 15, 2012, 17:00 »

Ладно, ты мне ответь, вот есть наш случай:

Код:
class Foo
{
  public:
    Foo();

  protected:
    m_member;
}

class Boo : public Foo
{
  public:
    Boo();
}

Скажи, из Boo мы можем обратиться напрямую к m_member?
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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