Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: raven1976 от Апрель 15, 2010, 15:34



Название: QtableView, как в некоторых столбцах прижать текст вправо
Отправлено: raven1976 от Апрель 15, 2010, 15:34
как в QtableView в некоторых столбцах прижать текст вправо (или разместить по центру)?


Название: Re: QtableView, как в некоторых столбцах прижать текст вправо
Отправлено: GreatSnake от Апрель 15, 2010, 15:43
QModelIndex index;
QAbstractItemModel::setData ( index, Qt::AlignmentCenter, Qt::TextAlignmentRole )


Название: Re: QtableView, как в некоторых столбцах прижать текст вправо
Отправлено: raven1976 от Апрель 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();

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



Название: Re: QtableView, как в некоторых столбцах прижать текст вправо
Отправлено: alexman от Апрель 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 - номер колонки (то есть нужно пробежать по нужным колонкам).


Название: Re: QtableView, как в некоторых столбцах прижать текст вправо
Отправлено: raven1976 от Апрель 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 - номер колонки (то есть нужно пробежать по нужным колонкам).

Спасибо, но так не срабатывает, во всех колонках текст остается прижатым влево :(


Название: Re: QtableView, как в некоторых столбцах прижать текст вправо
Отправлено: Пантер от Апрель 15, 2010, 17:53
Используй свой делегат.


Название: Re: QtableView, как в некоторых столбцах прижать текст вправо
Отправлено: crossly от Апрель 15, 2010, 17:57
переопределить метод data у модели.... AligmentRole


Название: Re: QtableView, как в некоторых столбцах прижать текст вправо
Отправлено: kirill от Апрель 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);
  }
};
 


Название: Re: QtableView, как в некоторых столбцах прижать текст вправо
Отправлено: Kolobok от Апрель 16, 2010, 13:55
А зачем нужна модель с защищенным методом data?