С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/30: Рейтинг темы: голосов - 30, средняя оценка - 4.53
Арий Монтана
1 / 1 / 0
Регистрация: 13.02.2012
Сообщений: 83
1

QTableWidget (реагирование на клик по ячейке);

11.04.2012, 08:42. Просмотров 5679. Ответов 13
Метки нет (Все метки)

Всем привет, хотел спросить, как можно скрывать определенные кнопки на интерфейсе по клику мыши на таблице(ячейки, строке) ?

Немного ясности: Пользователь кликнул по какому-либо столбцу в таблице - он выделился, кнопки скрылись и наоборот (нет выделенных элементов строки, - кнопки появились).


C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
QFile file(qApp->applicationDirPath() + QDir::separator() + "test.html");
    if (file.open(QIODevice::ReadOnly)){
        QDataStream stream(&file);
        stream >> myList;
        file.close();
        QString data, dateTime, dataTime;
        for (int i = 0; i < myList.count(); i++){
            data = myList.at(i).data.toString("dd.MM.yy");
            dateTime = myList.at(i).dateTime.toString("hh:mm:ss");
            dataTime.clear();
            dataTime.append(data);
            dataTime.append(" / ");
            dataTime.append(dateTime);
            QTableWidgetItem *item0 = new QTableWidgetItem(dataTime);
            QTableWidgetItem *item1 = new QTableWidgetItem(data);
            ui->tableWidget->setRowCount(ui->tableWidget->rowCount() +1);
            ui->tableWidget->setItem(ui->tableWidget->rowCount()-1,0, item0);
            ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 1, item1);
            ui->tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 08:42
Ответы с готовыми решениями:

Виджет в ячейке QTableWidget
В ячейки помещаются виджеты (QSpinBox, но не суть) . К сигналу изменения спина...

Состояние Checkstate в ячейке QTableWidget
Собственно как узнать его состояние? В смысле Qt::Checked или Qt::Unchecked...

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

Выравнивание QCheckBox в ячейке QTableWidget
Доброго времени суток коллеги. Суть вопроса в следующем: В ячейке таблицы...

QTableWidget сигнал изменения виджета в ячейке
Qt 4.8.4 Есть таблица QTableWidget данных на строчек 20 не более. В ячейки...

13
Чистый
Автор FAQ
2714 / 1410 / 89
Регистрация: 08.09.2011
Сообщений: 3,741
Записей в блоге: 1
11.04.2012, 10:42 2
ну так и смотри сигнал того на что пользователь кликает, если это таблица то смотри сигналы QTableWidget если ячейка то смотри сигналы QTableWidgetItem соединяй подходящий тебе сигнал со слотом и в этом слоте уже делай необходимые действия
1
Арий Монтана
1 / 1 / 0
Регистрация: 13.02.2012
Сообщений: 83
11.04.2012, 12:06  [ТС] 3
Можешь примерчик показать один для наглядности, пожалуйста?

У меня два столбца, при клике по нему он объединяется (выделяет) полностью строку.
0
Чистый
Автор FAQ
2714 / 1410 / 89
Регистрация: 08.09.2011
Сообщений: 3,741
Записей в блоге: 1
11.04.2012, 12:25 4
ты опиши нормально задачу, по клику по нему это по чему? по строке или по столбцу ?
1
Арий Монтана
1 / 1 / 0
Регистрация: 13.02.2012
Сообщений: 83
11.04.2012, 12:48  [ТС] 5
Есть запуск приложения, при запуске все кнопки на форме скрываются.


Пользователь кликает по строке, строка выделяется, кнопки появляются.
0
Чистый
Автор FAQ
2714 / 1410 / 89
Регистрация: 08.09.2011
Сообщений: 3,741
Записей в блоге: 1
11.04.2012, 12:55 6
тогда так:
C++ (Qt)
1
connect(ui->tableWidget, SIGNAL(itemActivated (QTableWidgetItem *), this, SLOT(userclicked(QTableWidgetItem *)));
где:
ui->tableWidget - это имя таблицы по которой щелкает пользователь подставь свое значение
userclicked(QTableWidgetItem *) - это слот где ты можешь обрабатывать что тебе надо делать при клике по строке
1
Арий Монтана
1 / 1 / 0
Регистрация: 13.02.2012
Сообщений: 83
11.04.2012, 16:04  [ТС] 7
C++ (Qt)
1
connect(ui->tableWidget, SIGNAL(itemActivated (QTableWidgetItem *), this, SLOT(show()(QTableWidgetItem *)));
ругается на это:

C++ (Qt)
1
error: macro "SIGNAL" passed 3 arguments, but takes just 1
пользователь кликает по строчке и кнопки отображаются.

Пример кнопок:
C++ (Qt)
1
ui->btnWrite->hiden();
0
Чистый
Автор FAQ
2714 / 1410 / 89
Регистрация: 08.09.2011
Сообщений: 3,741
Записей в блоге: 1
11.04.2012, 16:17 8
ну вас вот так:
C++ (Qt)
1
connect(ui->tableWidget, SIGNAL(itemActivated (QTableWidgetItem *), this, SLOT(show()(QTableWidgetItem *)));
а должно быть так:
C++ (Qt)
1
connect(ui->tableWidget, SIGNAL(itemActivated (QTableWidgetItem *), this, SLOT(show(QTableWidgetItem *)));
чувствуете разницу ?
2
Арий Монтана
1 / 1 / 0
Регистрация: 13.02.2012
Сообщений: 83
12.04.2012, 07:27  [ТС] 9
Да, разницу чувствую, но все равно та же ошибка.

C++ (Qt)
1
error: macro "SIGNAL" passed 3 arguments, but takes just 1
C++ (Qt)
1
error:SIGNAL’ was not declared in this scope
Как ее исправить?

Правильное ли построение кода ?

C++ (Qt)
1
2
3
ui->btnWrite->hide(); // при запуске прячем кнопки
            ui->btnRead->hide();
            connect(ui->tableWidget, SIGNAL(itemActivated (QTableWidgetItem *), this, SLOT(show(QTableWidgetItem *))); // как только пользователь кликает по любой строчке на TableWidget (строка выделяется) и кнопочки появляются
0
solar_wind
761 / 752 / 58
Регистрация: 06.07.2009
Сообщений: 2,995
Завершенные тесты: 1
12.04.2012, 07:45 10
Арий Монтана, Блин, ну скобки у тебя не правильно стоят!

Добавлено через 1 минуту
вот так надо:
C++ (Qt)
1
connect(ui->tableWidget, SIGNAL(itemActivated (QTableWidgetItem *)), this, SLOT(show(QTableWidgetItem *)) );
1
Арий Монтана
1 / 1 / 0
Регистрация: 13.02.2012
Сообщений: 83
12.04.2012, 08:06  [ТС] 11
Компилируется, но кнопки по нажатию на строку не появляются

На запуске прописал скрытие кнопок:
C++ (Qt)
1
2
ui->setupUI (this); ui->btnWrite->hide();
            ui->btnRead->hide();
Создал отдельный слот:
C++ (Qt)
1
2
3
4
void MainWindow::on_tableWidget_itemClicked(QTableWidgetItem* item)
{
    connect(ui->tableWidget, SIGNAL(itemActivated (QTableWidgetItem *)), this, SLOT(show(QTableWidgetItem *)) );
}
В чем причина ?
0
solar_wind
761 / 752 / 58
Регистрация: 06.07.2009
Сообщений: 2,995
Завершенные тесты: 1
12.04.2012, 08:11 12
А слот show у тебя в классе вообще есть? как он выглядит?

Вообще мог бы написать просто:
C++ (Qt)
1
2
3
4
5
void MainWindow::on_tableWidget_itemClicked(QTableWidgetItem* item)
{
ui->btnWrite->show();
ui->btnRead->show();
}
1
Арий Монтана
1 / 1 / 0
Регистрация: 13.02.2012
Сообщений: 83
12.04.2012, 08:16  [ТС] 13
vitaly1981, ты гений, правда говорят, - все гениальное просто

Я что-то не дотумкал до этого, так бы пришлось 2 слота объявлять ))) Премного благодарен.

И еще 1 маленький вопросик:

Как избежать выделения срузу нескольких строк ? Чтобы пользователь не мог выделить несколько ?
0
solar_wind
761 / 752 / 58
Регистрация: 06.07.2009
Сообщений: 2,995
Завершенные тесты: 1
12.04.2012, 08:25 14
Арий Монтана,
А походу ты вообще все перпутал.
Зачем связку писать в itemClicked? Обычно такие вещи помещают в конструктор!
Вообще Чистый предлагал тебе создать слот userclicked, в котором обработку делать.
А связать с ним itemActivated через connect в конструкторе класса!
А ты просто переопределил itemClicked, это тоже можно делать, но это просто другой подход и мешать их не надо!

Добавлено через 6 минут
Попробуй ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
1
12.04.2012, 08:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2012, 08:25

QTableWidget, как записать несоколько строк в ячейке?
Никак не могу найти ответа на вопрос. Нужно в ячейке таблицы сделать запись в...

QTableWidget кнопка и текст в 1 ячейке используя QTableWidgetItem
Собственно необходимо запихнуть кнопку для удаления в ячейку с текстом(текст и...

Правый клик по ячейке таблицы
Народ такой вопрос. Если клик левой кнопки мыши обрабатывается так: void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru