crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Маркер в таблице..., Построчно выделять...
fortero
  опции профиля:
сообщение 18.4.2011, 13:51
Сообщение #1


Участник
**

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

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




Репутация:   0  


Добрый день Господа!
Есть вот такой незамысловатый код:
#include <QtGui>
#include <QtCore>

int main(int argc, char ** argv){
    QApplication app(argc, argv);
    
    QTableWidget table(2, 2);
    QStringList tit;
    tit << "Columens Name" << "Columens Phone";
    table.setHorizontalHeaderLabels(tit);
    
    QTableWidgetItem *item1 = new QTableWidgetItem("Vasy");
    QTableWidgetItem *item2 = new QTableWidgetItem("77777777");
    QTableWidgetItem *item3 = new QTableWidgetItem("Pety");
    QTableWidgetItem *item5 = new QTableWidgetItem("11111111");
    
    table.setItem(0,0, item1);
    table.setItem(0,1, item2);
    table.setItem(1,0, item3);
    table.setItem(1,1, item5);
    
    table.setSortingEnabled(true);
    QString s =
        
        " QHeaderView::down-arrow {"
        "    image: url(img/down.png); width: 18px"
        " }"
        " QHeaderView::up-arrow {"
        "    image: url(img/up.png); width: 18px"
        " }";
    app.setStyleSheet(s);
    table.resizeRowsToContents();

    
    table.show();
    
    
    return app.exec();
}

Это простая табличка, из 2 колонок и 2 строк, сортировка работает… Вод только осталось решить 2 проблемы я не селён в QT, я только начинаю. Подскажите пожалуйста как сделать что бы когда я 1 раз кликаю на строку марке не ячейку подсвечивал а всю строку и второе разумеется не пробовал редактировать. То есть мне нужна табличка которая не будет редактироваться, а маркер подсвечивать будет всю строку, как это сделать???
Спасибо за внимание!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fortero
  опции профиля:
сообщение 18.4.2011, 14:37
Сообщение #2


Участник
**

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

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




Репутация:   0  


С первой проблемой я догадываюсь как решить нашёл я слот selectRow(int row), то есть зная на какой строке стоит маркер можно при помощи connect передать номер строки, тогда как связать эти действия? То есть как послать нужный сигнал???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fortero
  опции профиля:
сообщение 18.4.2011, 15:07
Сообщение #3


Участник
**

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

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




Репутация:   0  


Помоему я нашёл решение, скажите насколько это правильно но чёрт возми оно работает:
QObject::connect(&table, SIGNAL(cellClicked(int, int)), &table, SLOT(selectRow(int)));


Как же быть со вторым вопросом? Запрет редактирования???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 18.4.2011, 15:14
Сообщение #4


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

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

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




Репутация:   12  


Цитата(fortero @ 18.4.2011, 15:37) *
... тогда как связать эти действия? То есть как послать нужный сигнал???

Не совсем понятно о чем идет речь.

Цитата(fortero @ 18.4.2011, 16:07) *
Помоему я нашёл решение, скажите насколько это правильно но чёрт возми оно работает:
QObject::connect(&table, SIGNAL(cellClicked(int, int)), &table, SLOT(selectRow(int)));

Абсолютно нормальное решение.

Цитата(fortero @ 18.4.2011, 16:07) *
Запрет редактирования???

    QTableWidgetItem* pItem = new QTableWidgetItem(tr("blablabla"));
        pItem->setFlags(pItem->flags() & (~(Qt::ItemIsEditable)));
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fortero
  опции профиля:
сообщение 18.4.2011, 16:09
Сообщение #5


Участник
**

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

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




Репутация:   0  


[quota]
    QTableWidgetItem* pItem = new QTableWidgetItem(tr("blablabla"));
        pItem->setFlags(pItem->flags() & (~(Qt::ItemIsEditable)));

[/quote]

А я вот ещё нашёл, подайдёт?
table.setEditTriggers(QAbstractItemView::NoEditTriggers);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 18.4.2011, 16:37
Сообщение #6


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

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

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




Репутация:   12  


да подойдет, если нужен запрет на редактирование всего представления таблицы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 18.4.2011, 17:42
Сообщение #7


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

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

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




Репутация:   6  


Цитата(fortero @ 18.4.2011, 13:51) *
а маркер подсвечивать будет всю строку, как это сделать???

Цитата(fortero @ 18.4.2011, 17:07) *
Помоему я нашёл решение, скажите насколько это правильно но чёрт возми оно работает:


Мне кажется так лучше:
QTableWidget::setSelectionBehavior(QAbstractItemView::SelectRows);

Сообщение отредактировал silver47 - 18.4.2011, 17:45
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
fortero
  опции профиля:
сообщение 18.4.2011, 17:44
Сообщение #8


Участник
**

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

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




Репутация:   0  


Новый вопрос, теперь решил я передовать сигнал в слот другого класса, вот таким способом:
QObject::connect(&table, SIGNAL(itemDoubleClicked(QTableWidgetItem)), &ddd, SLOT(dial(QTableWidgetItem)));

Но не чего не происходит, а когда я пробовал так:
QObject::connect(&table, SIGNAL(cellDoubleClicked(int, int)), &ddd, SLOT(dial(int, int)));


То всё работало передовался номер строки и колонки, а как же передать содиржимое ячейки?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ruzik
  опции профиля:
сообщение 18.4.2011, 17:48
Сообщение #9


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

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

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




Репутация:   0  


tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //Выделить всю строку
tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //Запрет редактирования
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
silver47
  опции профиля:
сообщение 18.4.2011, 18:10
Сообщение #10


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

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

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




Репутация:   6  


Цитата(fortero @ 18.4.2011, 19:44) *
То всё работало передовался номер строки и колонки, а как же передать содиржимое ячейки?


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

Для этого свяжем сигнал выделения ячейки с неким слотом:
QObject::connect(table, SIGNAL(clicked(QModelIndex)), this, SLOT(someSlot(QModelIndex)));

// слот
    // берем значение ячекий
QVariant value(index.sibling(index.row(), index.column()).data(Qt::EditRole));
    // испускаем сигнал со значением
emit cellValue(value);


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

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


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




RSS Текстовая версия Сейчас: 30.6.2022, 8:18