crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
RazrFalcon
  опции профиля:
сообщение 25.2.2011, 19:14
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Что бы было понятней, прога листает обои рабстола.
В трее висит прога, которую по ПКМ на значке можно развернуть и там будет таблица.
1-й столбец - иконки, 2-й - текст.
Раз в 10 мин, по таймеру, сменяется позиция в таблице. Была к примеру 10, стала 300-я. И соответственно пролистало таблицу до этого элемента.
Все хорошо. Но есть баг.
Если клацнуть по иконке, то смениться положение в таблице в этот же момент, не взирая на таймер.
Вот если так клацнуть, а потом через любое время развернуть из трея, то все иконки от начала, до той строки, на которую сместилось при клике - исчезают. И никак не появляются. Только перезапуск программы.
Бывает и с конца начинает удалять.
Не знаю что приложить. Вот скрин, если нужен код, то какой части, там строк ~400.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 25.2.2011, 20:01
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


модель для таблицы самописанная?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 25.2.2011, 21:04
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


    for(int i=0; i<allFiles.count(); i++)
    {
        removeButtons[i] = createButton("Del", SLOT(digitClicked()),i);
        removeButtons[i]->setIcon(*delicon);
        removeButtons[i]->setAutoRaise(true);
        removeButtons[i]->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
        removeButtons[i]->setGeometry(0,0,30,30);
        tableWidget->setCellWidget(i, 0, removeButtons[i]);

        QTableWidgetItem* Item = new QTableWidgetItem();
        if (onlynames_checkBox->checkState()==Qt::Checked)
            Item->setText(QString(allFiles.at(i).fileName()));
        if (onlynames_checkBox->checkState()==Qt::Unchecked)
            Item->setText(QString(allFiles.at(i).absoluteFilePath()));
        tableWidget->setItem(i, 1, Item);
    }

Забыл сказать, что иконки пропадают на кнопках, созданных с помощью QToolButton.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 26.2.2011, 12:20
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Где и как создается и удаляется delicon?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 26.2.2011, 15:49
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


.h
#include <QToolButton>

//...

class Button : public QToolButton
{
    Q_OBJECT

public:
    Button(const QString &text, QWidget *parent = 0);
};

//...

class WallWindow : public QDialog
{
    Q_OBJECT

//...

private:
    Button *createButton(const QString &text, const char *member, int &num);
    enum { NumDigitButtons = 1000 };
    Button *removeButtons[NumDigitButtons];
        QIcon *trayicon, *delicon;

//...
};
.cpp
WallWindow::WallWindow()
{

//...

    delicon = new QIcon("/usr/share/icons/gnome/48x48/actions/edit-delete.png");

//...

}

//...

Button::Button(const QString &text, QWidget *parent):QToolButton(parent){setText(text);}

void WallWindow::digitClicked()
{
    Button *clickedButton = qobject_cast<Button *>(sender());
    int nowClicked=clickedButton->accessibleName().toInt();

    allFiles.removeAt(nowClicked);
    tableWidget->removeRow(nowClicked);

    for(int i=0; i<allFiles.count(); i++)
    {
        removeButtons[i] = createButton("Del", SLOT(digitClicked()),i);
        removeButtons[i]->setIcon(*delicon);
        removeButtons[i]->setAutoRaise(true);
        tableWidget->setCellWidget(i, 0, removeButtons[i]);
    }

//...

}

//...


digitClicked() - это когда я удаляю строку в таблице, это не влияет в общем на пропадание иконок.

Сообщение отредактировал RazrFalcon - 26.2.2011, 15:51
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 27.2.2011, 0:10
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

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




Репутация:   7  


Хм.... щас туго соображать, но имхо тут по-любому твой косяк.. Что-то не так делаешь. Попробуй вместо
removeButtons[i]->setIcon(*delicon);

поставить
removeButtons[i]->setIcon(QIcon("/usr/share/icons/gnome/48x48/actions/edit-delete.png"));

может поможет конечно, но не факт... И еще, с tableWidget какие-нить сигналы ловятся?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 27.2.2011, 2:47
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Не помогло =/
Что значит сигналы, ловяться?

Прогнал через дебаг. Оказывается пропадают не иконки, а сами кнопки.

Сообщение отредактировал RazrFalcon - 27.2.2011, 2:50
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 17.3.2011, 16:24
Сообщение #8


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Нашел причину.
tableWidget->scrollToItem(tableWidget->item(number,1),QAbstractItemView::PositionAtTop);

Если закоментить - то все нормально работает, но не листает конечно. <_<
PS: если выбрать столбец 0, то есть:
tableWidget->scrollToItem(tableWidget->item(number,0),QAbstractItemView::PositionAtTop);

то вообще не листает =/ Бага.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 17.3.2011, 16:51
Сообщение #9


Участник
**

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

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




Репутация:   4  


ну вот я потрогал QTableWidget, поначалу получил неработающий scrollToItem(), как у тебя, но потом выяснил, что по умолчанию в ячейках таблицы нет никаких итемов, ячейки пусты. Я создал итем (setItem) в ячейке в (0,0), и скролл заработал
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 17.3.2011, 18:08
Сообщение #10


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Цитата(abc @ 17.3.2011, 15:51) *
по умолчанию в ячейках таблицы нет никаких итемов, ячейки пусты.

По умолчанию - да, но я то уже их заполнил, как на рисунке выше. Только у меня в первом столбце не items, а Widget's ...
Суть в том, что виджеты, эти, пропадают при скроле по итемам во втором столбце, вот так вот.

Такой трюк не прошел:
QTableWidgetItem* Item = new QTableWidgetItem();
Item->tableWidget()->setCellWidget(i, 0, removeButtons[i]);


Сообщение отредактировал RazrFalcon - 17.3.2011, 18:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 30.12.2024, 19:12