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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QTableWidget все не заполняется и не заполняется...  (Прочитано 8815 раз)
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);
}
}
}
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Март 19, 2014, 19:12 »

Вы не устанавливаете размеров таблицы:
setRowCount и setColumnCount.
Записан
UltraPenguin
Гость
« Ответ #2 : Март 19, 2014, 19:15 »

Вы не устанавливаете размеров таблицы:
setRowCount и setColumnCount.
то есть в любом случае надо и размер и insertRow()?

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

PS2 спасибо за оперативность Улыбающийся
Записан
UltraPenguin
Гость
« Ответ #3 : Март 19, 2014, 19:18 »


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


не тут что-то одно, иначе дублирование строки
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #4 : Март 19, 2014, 19:21 »

инструментов богов под названием «дебаггер» пользовался? а в папке хоть дллки есть? ExtractFileExt — непонятно зачем вызывать эту функцию, если у QFileInfo и так есть метод вычленения расширения.
Вначале думал может QTableWidgetItem'ы удаляются при окончании цикла (вызываются деструкторы автоматом)
если бы знал С++ на приемлемом уровне, подобные еретичные мысли в отношении обычных указателей бы не возникали Подмигивающий
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
UltraPenguin
Гость
« Ответ #5 : Март 19, 2014, 19:29 »

инструментов богов под названием «дебаггер» пользовался? а в папке хоть дллки есть? ExtractFileExt — непонятно зачем вызывать эту функцию, если у QFileInfo и так есть метод вычленения расширения.

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

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

Эта мысль была из разряда "невозможно, but shit happens"... просто вообще нет никаких догадок...
« Последнее редактирование: Март 19, 2014, 19:32 от UltraPenguin » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Март 19, 2014, 19:36 »

не тут что-то одно, иначе дублирование строки
Да, я проглядел у вас insertRow. Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Март 19, 2014, 19:40 »

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
UltraPenguin
Гость
« Ответ #8 : Март 19, 2014, 19:45 »

Цитировать
брейкпоинт ставил на строчку pProcServ_t pPS = {NULL, pProcService->GetInfo()} (или ниже)? туда заходит?
да заходит. pProcService->GetInfo() - это строка "В базу".

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

Сообщений: 4350



Просмотр профиля
« Ответ #9 : Март 19, 2014, 19:55 »

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

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

Это первое что я делал, в обоих итемах ставил строки константные... не помогает Грустный
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Март 19, 2014, 20:02 »

Это первое что я делал, в обоих итемах ставил строки константные... не помогает Грустный
Текст не появляется и цвет тоже не меняется?
Записан
UltraPenguin
Гость
« Ответ #12 : Март 19, 2014, 20:03 »

Ни то ни другое
Записан
UltraPenguin
Гость
« Ответ #13 : Март 19, 2014, 20:05 »

Qt 4.8.3 если что
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #14 : Март 19, 2014, 20:19 »

а если вставить тестовые айтемы вне цикла — сработает?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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