Russian Qt Forum

Qt => Вопросы новичков => Тема начата: UltraPenguin от Март 19, 2014, 19:06



Название: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 19:06
Доброго времени суток! Решил связаться с QTableWidget... Только вот он никак не хочет связываться со мной :-\
Суть проблемы: код исполняется без видимых ошибок, но на выходе пустая таблица... Цикл проходит 1 раз - 1 пустая и белая строка... Что я не так делаю?
Вначале думал может QTableWidgetItem'ы удаляются при окончании цикла (вызываются деструкторы автоматом), перенес newItem'ы в глобальную область - эффекта ноль. Та же таблица с единственной пустой строкой...

Код:
#define PROTOCOL_NAME_COL 0
#define REGTYPE_NAME_COL 1

Код:
	QDirIterator it(sPath, QDirIterator::Subdirectories);
QFileInfo qFileInfo;
QTableWidgetItem *newItem;
QTableWidgetItem *newItem2;
while (it.hasNext())
{
qFileInfo.setFile(it.next());
if(qFileInfo.isDir())
continue;
else
{
if((ExtractFileExt(qFileInfo.fileName())).toUpper() == "DLL")
{
CProcessingService* pProcService = new CProcessingService;
if(!pProcService->Load(qFileInfo.absFilePath()))
{
delete pProcService;
continue;
}

pProcServ_t pPS = {NULL, pProcService->GetInfo()};
pPS.pProcessingService = pProcService;
vectProcessingService->push_back(pPS);

int iRowIndx = ui.tableWidgetProtocolList->rowCount();
ui.tableWidgetProtocolList->insertRow(iRowIndx);
QColor qClr = pProcService->GetOnOff() ? Qt::green : Qt::red;

newItem = new QTableWidgetItem(pPS.sProcServName);
newItem->setBackgroundColor(qClr);
ui.tableWidgetProtocolList->setItem(iRowIndx, PROTOCOL_NAME_COL, newItem);

newItem2 = new QTableWidgetItem(RegTypes[REGTYPEBASE]);
newItem2->setBackgroundColor(qClr);
ui.tableWidgetProtocolList->setItem(iRowIndx, REGTYPE_NAME_COL, newItem2);
}
}
}


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: Old от Март 19, 2014, 19:12
Вы не устанавливаете размеров таблицы:
setRowCount и setColumnCount.


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 19:15
Вы не устанавливаете размеров таблицы:
setRowCount и setColumnCount.
то есть в любом случае надо и размер и insertRow()?

PS размер в столбцах указывал
Код:
ui.tableWidgetProtocolList->setColumnCount(2);

PS2 спасибо за оперативность :)


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 19:18

то есть в любом случае надо и размер и insertRow()?


не тут что-то одно, иначе дублирование строки


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: kambala от Март 19, 2014, 19:21
инструментов богов под названием «дебаггер» пользовался? а в папке хоть дллки есть? ExtractFileExt — непонятно зачем вызывать эту функцию, если у QFileInfo и так есть метод вычленения расширения.
Вначале думал может QTableWidgetItem'ы удаляются при окончании цикла (вызываются деструкторы автоматом)
если бы знал С++ на приемлемом уровне, подобные еретичные мысли в отношении обычных указателей бы не возникали ;)


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 19:29
инструментов богов под названием «дебаггер» пользовался? а в папке хоть дллки есть? ExtractFileExt — непонятно зачем вызывать эту функцию, если у QFileInfo и так есть метод вычленения расширения.

дллки есть. Точнее сказать одна, которая должна быть. (отсюда и один проход цикла упомянутый в начале топика)
ExtractFileExt остался из-за того что код в процессе переноса из Builder'a в VS. Для скорости переноса просто создал такой метод и впихнул в него QFileInfo метод, чтобы не искать по всему коду... потом исправится само собой.
В дебаггере не видно конкретных ошибок... путь выполнения корректный... все переменные инициализируются...

если бы знал С++ на приемлемом уровне, подобные еретичные мысли в отношении обычных указателей бы не возникали ;)

Эта мысль была из разряда "невозможно, but shit happens"... просто вообще нет никаких догадок...


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: Old от Март 19, 2014, 19:36
не тут что-то одно, иначе дублирование строки
Да, я проглядел у вас insertRow. :)


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: kambala от Март 19, 2014, 19:40
В дебаггере не видно конкретных ошибок... путь выполнения корректный... все переменные инициализируются...
брейкпоинт ставил на строчку pProcServ_t pPS = {NULL, pProcService->GetInfo()} (или ниже)? туда заходит?


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 19:45
Цитировать
брейкпоинт ставил на строчку pProcServ_t pPS = {NULL, pProcService->GetInfo()} (или ниже)? туда заходит?
да заходит. pProcService->GetInfo() - это строка "В базу".

не знаю, важно ли это, но данный код работает из конструктора дочернего (по отношению к главному) окна программы.
то есть создаем мэйн-окно, создаем дочернее окно с QTableWidget (и тут же заполняем QTableWidget).


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: Old от Март 19, 2014, 19:55
Попробуйте заменить это на константную строку:
Код
C++ (Qt)
//newItem = new QTableWidgetItem(pPS.sProcServName);
newItem = new QTableWidgetItem( "Test item" );
 
и посмотрите, появится или нет.


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 20:00
Попробуйте заменить это на константную строку:
Код
C++ (Qt)
//newItem = new QTableWidgetItem(pPS.sProcServName);
newItem = new QTableWidgetItem( "Test item" );
 
и посмотрите, появится или нет.

Это первое что я делал, в обоих итемах ставил строки константные... не помогает :(


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: Old от Март 19, 2014, 20:02
Это первое что я делал, в обоих итемах ставил строки константные... не помогает :(
Текст не появляется и цвет тоже не меняется?


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 20:03
Ни то ни другое


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 20:05
Qt 4.8.3 если что


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: kambala от Март 19, 2014, 20:19
а если вставить тестовые айтемы вне цикла — сработает?


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: Old от Март 19, 2014, 20:20
Покажите пожалуйста весь конструктор.


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 20:25
а если вставить тестовые айтемы вне цикла — сработает?

Не совсем Вас понял... newItem и так вне цикла объявлен. Инициализацию тоже туда перенести?


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 20:30
Покажите пожалуйста весь конструктор.

К сожалению кода конструктора нет под рукой, только что ушел из офиса. Но так могу сказать, что  там инициализируется ui, несколько не связаных с проблемным участком переменных и вызывается как раз эта функция подключения длл и заполнения tablewidget


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: kambala от Март 19, 2014, 20:37
а если вставить тестовые айтемы вне цикла — сработает?

Не совсем Вас понял... newItem и так вне цикла объявлен. Инициализацию тоже туда перенести?
да, вставку новой строки и создание айтема с тестовым текстом.


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 19, 2014, 20:41
а если вставить тестовые айтемы вне цикла — сработает?

Не совсем Вас понял... newItem и так вне цикла объявлен. Инициализацию тоже туда перенести?
да, вставку новой строки и создание айтема с тестовым текстом.

Попробую, и отпишусь о результате


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: Nidxogg от Март 19, 2014, 20:44
del


Название: Re: QTableWidget все не заполняется и не заполняется...
Отправлено: UltraPenguin от Март 20, 2014, 09:33
Покажите пожалуйста весь конструктор.

Да Вы были правы, дело в конструкторе! Устанавливал ui.tableWidgetProtocolList->setColumnCount(2); после вызова функции заполнения виджета итемами... :P Вот что значит невнимательность, особенно под конец рабочего дня! :)

Простите за беспокойство и спасибо еще раз большое всем за Ваше внимание!