crossplatform.ru

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

5 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
> Рисование во вкладках, В каждой вкладке - свой рисунок. Как сделать?
QMainWindow
  опции профиля:
сообщение 1.8.2010, 15:42
Сообщение #1


Участник
**

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

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




Репутация:   0  


Доброго дня!
Ситуация: делаю прогу для построения графиков. Графики хочу, чтобы рисовались во вкладках (одна вкладка - один график). Не знаю, как заставить рисовальщик рисовать в нужной мне вкладке. Создаю, соответственно, в главном окне QTabWidget, в котором создаю вкладку. Сразу же после ее создания должен в ней отобразиться график. Как это сделать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 1.8.2010, 17:15
Сообщение #2


фрилансер
******

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

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




Репутация:   34  


Если нет никакого подвоха, то, казалось бы, всё элементарно:
в paintEvent вкладки посмотреть, что должна отображать вкладка, и нарисовать это.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.8.2010, 17:20
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9642
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


QMainWindow, сделай виджет, на котором будет рисоваться график и помести его в QTabWidget в качестве страницы
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 1.8.2010, 20:21
Сообщение #4


Участник
**

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

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




Репутация:   0  


Аха, простой QWidget и поместить его туда. Такс, а как его соединить с вкладкой? Т.е. чтобы виджет tab отвечал своей странице?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 1.8.2010, 20:26
Сообщение #5


фрилансер
******

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

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




Репутация:   34  


QMainWindow, читай описание конструктора QWidget.

А как понять "чтобы виджет tab отвечал своей странице" ? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 1.8.2010, 21:00
Сообщение #6


Участник
**

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

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




Репутация:   0  


Имел ввиду, что когда нажимаем на вкладку (на прямоугольник с названием вверху), то на экране выводится именно тот график (или что-то другое), который соответствует данной вкладке))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.8.2010, 21:49
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9642
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Прочитай документацию по QTabWidget и всё поймёшь
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 2.8.2010, 10:33
Сообщение #8


Участник
**

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

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




Репутация:   0  


Прочитал еще в первый раз, не разобрался тогда. Теперь понятно как размещать страницы во вкладках. Но пейнтер все равно не рисует. Говорит, что не активирован. Вот код:
tabWidget = new QTabWidget(centralwidget);
    tabWidget->setObjectName(QString::fromUtf8("TabWidget"));
    tabWidget->setGeometry(QRect(5, 30, width()-10, height()-85));
    PageForGraphic = new QWidget;
    PageForGraphic->setGeometry(QRect(5, 30, width()-10, height()-85));

Этот код записан в конструкторе Главного окна. Далее:
void MainWindow::InTabs()
{
    tab = new QWidget(); //Создаем вкладку.
    PageForGraphic->setParent(tab); //Называем ее родителем.
    tabWidget->addTab(tab, QString::fromLocal8Bit("Ãðàôèê %1").arg(tabWidget->count()+1)); //Добавляем ее на TabWidget.
    tabWidget->setCurrentWidget(tab); //Подсвечивем.
}

Этот код записан в отдельной функции. В нее посылается сигнал из диалогового окна, приказывающий создать собственно вкладку. Далее:
void MainWindow::RunMNK(double *PointArrayX, double *PointArrayY, int N, int choise)
{
    //Здесь написан некоторый код. Для его выполнения посылается сигнал из того диалогового окна.
    ChooseGraphic(choise);
}

void MainWindow::ChooseGraphic(int choise)
{
    C=choise;
    update();
}

Это некоторое лирическое отступление, как программа доходит до update(). Далее:
void MainWindow::paintEvent(QPaintEvent *event)
{

    QPainter painter(PageForGraphic);

    switch(C)
    {
    case 1:
        {
            painter.setWindow(/*-LW*maxX-30, -LH*maxY-65,*/0,0, width(), height());
            painter.setRenderHint(QPainter::Antialiasing, true);
            painter.setPen(QPen(QColor(255, 0, 0), 7, Qt::SolidLine, Qt::RoundCap));
            painter.drawPoints(PointArrayXY, M);
        }
    case 2:
        {
            //
        }
    case 3:
        {
            //
        }
    }
}
Сам пейнтэвент. В нем указываю, где рисовать, но он не рисует))
Короче перепробовал все варианты переписи кода, которые приходили в голову, но ни один не помог. Подскажите, где ошибка? Или я чего ее не дописал...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 2.8.2010, 11:00
Сообщение #9


фрилансер
******

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

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




Репутация:   34  


Может, оно и не оно, но одна ошибка (даже 3) точно есть: в твоём лирическом о. нет break после каждого case.

вот это тоже сильно смущает
QPainter painter(PageForGraphic);

обычно тут
QPainter painter(this);

Зачем окну рисовать в другом окне ? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
QMainWindow
  опции профиля:
сообщение 2.8.2010, 11:04
Сообщение #10


Участник
**

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

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




Репутация:   0  


:blink: Эт по невнимательности. Исправил, но painter как не был активированным, так и не активирован... Странно, вот если написать QPainter painter(this);, то он все прекрасно рисует... Но только непосредственно в главном окне((
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 19.8.2018, 9:34