crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 5.5.2024, 13:51