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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QtableView, как в некоторых столбцах прижать текст вправо  (Прочитано 10092 раз)
raven1976
Гость
« : Апрель 15, 2010, 15:34 »

как в QtableView в некоторых столбцах прижать текст вправо (или разместить по центру)?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Апрель 15, 2010, 15:43 »

QModelIndex index;
QAbstractItemModel::setData ( index, Qt::AlignmentCenter, Qt::TextAlignmentRole )
Записан

Qt 5.11/4.8.7 (X11/Win)
raven1976
Гость
« Ответ #2 : Апрель 15, 2010, 16:05 »

QModelIndex index;
QAbstractItemModel::setData ( index, Qt::AlignmentCenter, Qt::TextAlignmentRole )

спасибо за ответ, но так как я не могу назвать себя спецом по Qt, то просьба немного уточнить объяснение
вот кусок моего кода:

    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("myDB.db3");
    model_General = new QSqlTableModel(this);
    model_General->setTable("view_general");

    model_General->setHeaderData(0, Qt::Horizontal, tr("Абонент"));
    model_General->setHeaderData(1, Qt::Horizontal, tr("Номер телефона"));
    model_General->setHeaderData(2, Qt::Horizontal, tr("комментарий"));
    model_General->select();

    ui->General_tableView->setModel(model_General);
    ui->General_tableView->setAlternatingRowColors(true);
    ui->General_tableView->autoFillBackground();

    ui->General_tableView->resizeColumnsToContents();

   мне нужно чтобы данные во второй колонке были прижаты вправо
   
   как мне соединить Вашу подсказку с моим кодом?
   

Записан
alexman
Гость
« Ответ #3 : Апрель 15, 2010, 16:46 »

Перед select сделай:
Код:
for ( int i = 0; i < model_General->rowCount(); ++i ) {
    model_General->setData( model_General->index( i, column ), Qt::AlignmentCenter, Qt::TextAlignmentRole );
}
column - номер колонки (то есть нужно пробежать по нужным колонкам).
Записан
raven1976
Гость
« Ответ #4 : Апрель 15, 2010, 17:02 »

Перед select сделай:
Код:
for ( int i = 0; i < model_General->rowCount(); ++i ) {
    model_General->setData( model_General->index( i, column ), Qt::AlignmentCenter, Qt::TextAlignmentRole );
}
column - номер колонки (то есть нужно пробежать по нужным колонкам).

Спасибо, но так не срабатывает, во всех колонках текст остается прижатым влево Грустный
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Апрель 15, 2010, 17:53 »

Используй свой делегат.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
crossly
Гость
« Ответ #6 : Апрель 15, 2010, 17:57 »

переопределить метод data у модели.... AligmentRole
Записан
kirill
Гость
« Ответ #7 : Апрель 16, 2010, 11:49 »

переопределить метод data у модели.... AligmentRole
Код
C++ (Qt)
class MyModel : public QSqlTableModel
{
  Q_OBJECT
public:
  MyModel(){}
protected:
  QVariant data ( const QModelIndex & index, int role = Qt::DisplayRole ) const
  {
     //Для нужного столбца - подставить свое число
     if (index.column() == 3)
     {
        //Роль - выравнивание
        if (role == Qt::TextAlignmentRole)
        {
           return Qt::AlignLeft;
        }
     }
     return QSqlTableModel::data(index, role);
  }
};
 
Записан
Kolobok
Гость
« Ответ #8 : Апрель 16, 2010, 13:55 »

А зачем нужна модель с защищенным методом data?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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