crossplatform.ru

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


  Ответ в Как сохранить расположение столбцов в QTableWidget?
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
RazrFalcon Дата 5.4.2011, 18:17
  Самый простой способ сохранить положение, это банальное
bool QHeaderView::restoreState ( const QByteArray & state )
QByteArray QHeaderView::saveState () const


И все отлично работает.
abc Дата 5.4.2011, 14:42
  я, может быть, понимаю, почему ты ринулся в практику, не прочувствовав теорию. потому что, блин, эту теорию без практики фиг прочувствуешь! я сам еле-еле осилил первую книгу по с++, чуть не на каждом шаге я задавался вопросом "а зачем это надо? где, блин, пример из жизни?!"... тут определённо нужно совмещать чтение теории с практикой.. сейчас я теорию читаю с удовольствием.. теперь вместо тех вопросов у меня в голове появляется "о, так вот в чём тут дело! о, вот как оно было лучше!"... и по поводу книжки - там даже в первых разделах я столкнулся с новыми знаниями, не обходи стороной знакомые разделы
RazrFalcon Дата 5.4.2011, 14:04
  Спасибо, почитаю.
"Раздражающим", совет был бы если я "все знал" или ЧСВ зашкаливал. :lol:
А так я точно знаю, что ничего не знаю.
abc Дата 5.4.2011, 13:29
  наследование здесь бессмысленно.
вот если бы ты хотел переопределить какой-то виртуальный метод, но такого метода нет.
боюсь дать раздражающий совет, но вот книжка, которую и я в данный момент читаю. она мне очень многие моменты объясняет, разные тонкости c++:
http://valera.asf.ru/cpp/book/c00.html
подробные понятные примеры
RazrFalcon Дата 5.4.2011, 13:11
  Капец!
connect(table->horizontalHeader(),SIGNAL(sectionMoved(int,int,int)),this,SLOT(sectionMoved(int,int,int)));
Работает!
Я совершенно не знал что так можно.

Проблему я решил, ладно.
Но про наследование так ничего и не понял. Как тоже самое сделать при помощи наследования?
abc Дата 5.4.2011, 13:04
  соедини сигнал sectionMoved со своим слотом void header::sectionMoved

наследоваться-то было незачем

можно было создать слот в MainWindow и соединить его с сигналом sectionMoved объекта, возвращаемого tableView->horizontalHeader()
RazrFalcon Дата 5.4.2011, 12:54
  Ну вроде ясно, только как теперь отловить перемещение?

.h
class header : public QHeaderView
{
    Q_OBJECT

public:
    header(Qt::Orientation orientation, QWidget * parent = 0);

private slots:
    void sectionMoved ( int logicalIndex, int oldVisualIndex, int newVisualIndex );
};

.cpp
header::header (Qt::Orientation orientation, QWidget * parent)
                      : QHeaderView(orientation, parent)
{

}

MainWindow::MainWindow()
{
      table->setHorizontalHeader(new header(Qt::Horizontal));
}

void header::sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex)
{
    qDebug()<<logicalIndex;
}

В консоли пусто.
abc Дата 5.4.2011, 12:40
  конструктор базового класса:
QHeaderView::QHeaderView ( Qt::Orientation orientation, QWidget * parent = 0 )
нужно задавать Qt::Orientation при создании
тебе нужно написать свой конструктор:
h.
public: 
header(Qt::Orientation orientation, QWidget * parent = 0);

cpp.
header::header (Qt::Orientation orientation, QWidget * parent) 
                      : QHeaderView(orientation, parent) //инициализация базового класса
{
}

тогда в MainWIndow:
MainWindow::MainWindow
{
      ui->tableView->setHorizontalHeader(new Header(Qt::Horizontal)) //если это горизонтальный QHeaderView
}
RazrFalcon Дата 5.4.2011, 12:19
  Сам класс:
class header : public QHeaderView
{
private slots:
    void sectionMoved ( int logicalIndex, int oldVisualIndex, int newVisualIndex );
};

Соурс:
MainWindow::MainWindow()
{
    table->setHorizontalHeader(new header);
}


In constructor ‘header::header()’:
error: no matching function for call to ‘QHeaderView::QHeaderView()’

и тд.
abc Дата 5.4.2011, 11:55
  Вот ты написал код класса. Теперь создай его экземпляр в конструкторе MainWindow, и установи свой header в tableView:
MainWindow::MainWindow
{
      ui->tableView->setHorizontalHeader(new Header) 
}

Касаемо того, что у тебя написано, правильно написать так, хотя я не знаю, что ты пытаешься сделать, я просто показываю, как это нужно было написать:
void header::sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex)
{
    qDebug()<<visualIndex(0);
    qDebug()<<"Hello";
}
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 13.7.2025, 13:27