crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> получение QTabWidget, Вопрос по миганию таба
B_u_R_n
  опции профиля:
сообщение 6.12.2011, 19:29
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 6.12.2011
Пользователь №: 3048

Спасибо сказали: 0 раз(а)




Репутация:   0  


страницы QTabWidget создаются динамически , создаются так :
NewOrder *wi = qobject_cast<NewOrder *>(ui->tabWidget_3->currentWidget());
wi->AddRow(name);

Хотелось бы что бы до клика этот таб мигал, как сделать мигание я разобрался. Создавал таймер (QTimer) и через 0.5 секунды ставил и убирал картинку на таб. Хотелось бы его засунуть в класс NewOrder . Описаниие класса вот :

class NewOrder : public QWidget
{
    Q_OBJECT
public:
    NewOrder(QWidget *parent = 0,int _IdOrder = 0);
    QTableWidget *tableWidget() { return _tableWidget; }
    void SetIDOrder(int _id) {this->IdOrder = _id;}
    void LoadItems();
    void ShowItems(QSqlQuery query,int count);
    int AddRow(QString name);
signals:

public slots:
    void IsAccepted();
    void IsPrinted();
    void RemoveItem();
    void flashing();
private:
    QTableWidget *_tableWidget;
    QPushButton *BAccept;
    QPushButton *BPrint;
    QPushButton *BClose;
    QGridLayout *Layout;
    QHBoxLayout *_HLayout;
    QHBoxLayout *HLayout;
    QSqlQuery query;
    QLineEdit *price;
    QLabel *label;
    QCheckBox *discount;
    QSpacerItem * spacer;
    QTimer *timer;
    int IdOrder;
    double total;
    ~NewOrder();
};

Как в это классе получить ту самую табу?
Спасибо

Простите, таб создается так
 NewOrder *order = new NewOrder(NULL,id);
        order->SetIDOrder(id);
        ui->tabWidget_3->addTab(order,QIcon(QPixmap(":img/mail-unread.png")),QString::fromLocal8Bit("Столик №")+QString::number(table));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 6.12.2011, 21:08
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Цитата
Создавал таймер (QTimer) и через 0.5 секунды ставил и убирал картинку на таб. Хотелось бы его засунуть в класс NewOrder .

Так ведь таймер у вас и так является членом класса.
Цитата
Как в это классе получить ту самую табу?

Таб это же и есть объект вашего класса. Или вы имели ввиду получить доступ к иконке и тексту таба?
P.S. А еще мне непонятно зачем вы вызываете SetIDOrder(id) сразу после объявления, если у вас в конструкторе и так передается id.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
B_u_R_n
  опции профиля:
сообщение 6.12.2011, 21:26
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 6.12.2011
Пользователь №: 3048

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(ilyabvt @ 6.12.2011, 22:08) *
Цитата
Создавал таймер (QTimer) и через 0.5 секунды ставил и убирал картинку на таб. Хотелось бы его засунуть в класс NewOrder .

Так ведь таймер у вас и так является членом класса.
Цитата
Как в это классе получить ту самую табу?

Таб это же и есть объект вашего класса. Или вы имели ввиду получить доступ к иконке и тексту таба?
P.S. А еще мне непонятно зачем вы вызываете SetIDOrder(id) сразу после объявления, если у вас в конструкторе и так передается id.

Да вы меня правильно поняли, я хочу устанавливать текст и иконку из класса NewOrder
на счет id уже не помню если честно, но зачем-то так сделано

Это не тот таймер, он нигде пока что не задействован
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 6.12.2011, 21:59
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Цитата
я хочу устанавливать текст и иконку из класса NewOrder

NewOrder *order = new NewOrder(NULL, id);
ui->tabWidget_3->addTab(order, order->icon(), order->text());

методы icon() и text() будут возвращать иконку и текст класса соответственно.
предварительно им(иконке и тексту) конечно надо присвоить какие-нибудь значения.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
B_u_R_n
  опции профиля:
сообщение 6.12.2011, 22:18
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 6.12.2011
Пользователь №: 3048

Спасибо сказали: 0 раз(а)




Репутация:   0  


не совсем так
не нужно сделать примерно вот это в конструкторе NewOrder
timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(flashing()));
timer->start(500);

а вот в слоте flashing делать уже setIcon на таб виджет на котором находимся
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 6.12.2011, 22:47
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Для этого тебе надо знать номер этого таба.
 NewOrder *order = new NewOrder(NULL,id);
ui->tabWidget_3->addTab(order, QIcon(QPixmap(":img/mail-unread.png")),QString::fromLocal8Bit("Столик №")+QString::number(table));
order->setNumber(ui->tabWidget_3->count());
//или даже лучше так
order->setNumber(ui->tabWidget_3->indexOf(order));

А потом зная номер просто вызывать setTabIcon и setTabText.
Ну и кроме того я бы инкаписулировал добавление таба в отдельной функции.
void addTab(QTabWidget *tabWidget, const QIcon & icon, const QString & label) {
tabWidget->addTab(this, icon, label);
number = tabWidget->indexOf(this);
}

Тогда не надо будет дополнительно сохранять номер таба.
NewOrder *order = new NewOrder(NULL,id);
order->addTab(ui->tabWidget_3, QIcon(QPixmap(":img/mail-unread.png")),QString::fromLocal8Bit("Столик №")+QString::number(table));


Сообщение отредактировал ilyabvt - 6.12.2011, 22:51
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
B_u_R_n
  опции профиля:
сообщение 6.12.2011, 22:51
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 6.12.2011
Пользователь №: 3048

Спасибо сказали: 0 раз(а)




Репутация:   0  


а как же я вызову setTabIcon и setTabText.без объекта
вроде бы пробовал так
QTabWidget::setTabIcon(...); ошибка, нельзя так сделать без объекта
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 6.12.2011, 23:08
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Ну можно передать объект QTabWidget через указатель, например в конструкторе (тогда не будет необходимости передавать его в методе addTab).
NewOrder *order = new NewOrder(NULL, id, ui->tabWidget_3);

Только не забудь добавить в секцию private: QTabWidget *tabWidget.
И в коде конструктора один указатель присвоить другому.
потом вызывать
 tabWidget->setTabIcon(number, icon);


Сообщение отредактировал ilyabvt - 6.12.2011, 23:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
B_u_R_n
  опции профиля:
сообщение 6.12.2011, 23:11
Сообщение #9


Студент
*

Группа: Участник
Сообщений: 22
Регистрация: 6.12.2011
Пользователь №: 3048

Спасибо сказали: 0 раз(а)




Репутация:   0  


спасибо, а есть варианты без передачи указателя на объект ?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 6.12.2011, 23:14
Сообщение #10


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Думаю нет. А иначе как узнать у какого QTabWidget надо менять иконку на табе?
Нет, ну можно конечно попробовать унаследоваться от QTabWidget создать слот в котором вызывать setTabIcon, а это слот соединить с сигналом от таймера.

Сообщение отредактировал ilyabvt - 6.12.2011, 23:17
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.4.2024, 2:36