crossplatform.ru

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

5 страниц V  « < 3 4 5  
Ответить в данную темуНачать новую тему
> Разрабатываю форму
Sokoloff
  опции профиля:
сообщение 28.10.2011, 9:29
Сообщение #41


Участник
**

Группа: Участник
Сообщений: 237
Регистрация: 1.4.2009
Из: Москва
Пользователь №: 654

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




Репутация:   11  


Цитата(TiiL @ 27.10.2011, 14:46) *
Нужна ваша помощь:

В моем проекте в теле main(int argc, char argv){ } выполняются кое какие вычисления вот только значения для некоторых перменных берутся с формы... знаю что есть способ сделать это вот так x =ui->Factor->value(), но почему то сделать это в теле main не удаётся, как в мэйн запихнуть значение с формы задающаяся через spinBOX?

PS: Значение именно передать надо в мэйн.
Не надо ничего считать в main.

Обычно в гуевых программах main прост, в нем только инициализация и запуск. Вроде:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv); // Создали объект приложения
    MainWindow w;               // Создали форму
    w.show();                   // Показали форму
    return a.exec();            // Запустили цикл сообщений
}


P.S. Серьезно, C++ не тот я зык, который можно изучать методом тыка. Почитай книги, Страуструп для начала слишком круто. Но что-то для начинающих нужно прочитать, и Бланшет про Qt.
Заранее отвечу на возможное возражение вроде "посмотрел бы я на тебя если б ты приехал чинить машину и тебе сказали читай "МАТЧАСТЬ"". Аналогия должна быть другой:
Ты приехал чинить машину и а механик спрашивает Я слышал что в машине есть такой жиклер, заглянул в багажник, там его нет, я догадываюсь что если взять длинную палку то смогу дотянутся до жиклера. Поэтому вопрос, как жиклер выглядит, какой длины должна быть палка, какой съемник к ней привязать.
Что ты скажешь этому механику, правильно - читай "МАТЧАСТЬ"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 17.2.2012, 8:21
Сообщение #42


Участник
**

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

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




Репутация:   0  


и снова я программирую...

помогите с реализацией:

есть dialog и mainwindow:

файл .pro:
Раскрывающийся текст

QT       += core gui

TARGET = grathQWT
TEMPLATE = app

#подключаем библиотеку qwt
INCLUDEPATH += ../src/
LIBS += ../qwtlib/libqwtd.a

SOURCES += main.cpp\
        mainwindow.cpp \
    dialog.cpp

HEADERS  += mainwindow.h \
    dialog.h
FORMS += qwtplot.ui \
    dialog.ui


dialog.h:
Раскрывающийся текст
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
namespace Ui{
    class Dialog;
}
class Dialog : public QDialog
{
    Q_OBJECT
public:
    explicit Dialog(QWidget *parent = 0);
private:
    Ui::Dialog *ui;

private slots:
    void on_pushButton_clicked();
};

#endif // DIALOG_H

mainwindow.cpp
Раскрывающийся текст
namespace Ui{
    class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent =0 );
    ~MainWindow();
    void plotCurve();
    void showData(double *x, double *y,
                  double *x2, double *y2,
                  const int N);
    int AxisLogOrLin(double AxisXmin, double AxisYmin, int i);

private:
    Ui::MainWindow *ui;
protected:
    QwtPlotGrid *grid;
    QwtPlotCurve *curv1,*curv2;
    QwtSymbol *symbol1, *symbol2;
    QwtLegend *leg;

private slots:
    void on_checkBox_3_toggled(bool checked);
    void on_checkBox_2_toggled(bool checked);
    void on_checkBox_toggled(bool checked);
};

#endif // MAINWINDOW_H


main.cpp:
Раскрывающийся текст
#include <QtGui/QApplication>
#include "mainwindow.h"
#include "dialog.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog D;
    D.show ();


    MainWindow w;

    w.show();

    return a.exec();
}


задача:
что хочется получить, открывается dialog(c с кнопками выбора), по нажатию кнопки закрывается этот диалог и открывается mainwindow в которое будет передаваться значение допустим i= 0 или 1 (например 0 - рисуется логарифмическая ось, 1 - рисуется линейная ось(процесс отрисовки я освоил)). Как сделать такую последовательность открывания закрывания окон?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 17.2.2012, 9:43
Сообщение #43


Участник
**

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

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




Репутация:   0  


ВРоде как решил с появлениями окон.
Вопрос появился такой:
в dialoge по кнопке  присваиваю i = 1;
void Dialog::on_pushButton_clicked()
{
    mainwindow = new MainWindow;
    mainwindow->i=1;
    qDebug("Dialog 1 i = %i", mainwindow->i);
    mainwindow->show ();
    close();
}


в классе mainwindow i задается
public:
int i;

mainwindow.cpp
в функции plotCurve()
делаю проверки по i
if(i == 1)
    {
        ui->myPlot->setAxisScaleEngine (QwtPlot::yLeft, new QwtLog10ScaleEngine);
        ui->myPlot->setAxisScaleEngine (QwtPlot::xBottom, new QwtLog10ScaleEngine);
    }
    if(i == 2)
    {
        ui->myPlot->setAxisScaleEngine (QwtPlot::yLeft, new QwtLinearScaleEngine);
        ui->myPlot->setAxisScaleEngine (QwtPlot::xBottom, new QwtLinearScaleEngine);
    }

но i не присваивается значение 1.

в чем я ошибаюсь?

редактирую:

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

Сообщение отредактировал TiiL - 17.2.2012, 15:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
crazymonkey
  опции профиля:
сообщение 18.2.2012, 21:55
Сообщение #44


Студент
*

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

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




Репутация:   0  


Я бы сделал так

main
Раскрывающийся текст

int main(int argc, char** argv)
{
    QApplication app(argc,argv);
    StartDialog* start = new StartDialog(0);
    start->show();
    return app.exec();
}



dialog.h
Раскрывающийся текст

class StartDialog: унаследовались
{
    Q_OBJECT
public:
    StartDialog(QWidget* parent = 0);
public slots:
  void slotButtonClicked();
};



dialog.cpp слот slotButtonClicked
Раскрывающийся текст

#include <start_dialog.h>
#include <main_window.h>

void StartDialog::slotButtonClicked()
{
    MainWindow* dlg = new MainWindow(//Передай число в конструкторе так то оно надёжнее будет);
    this->close();
    this->deleteLater();
    dlg->show();
}



сделай i приватным(private)
и консруктор главного окна какой-нибудь типа такого
Раскрывающийся текст

main_window::main_window(QWidget *parent, int we_need_this_i) : QWidget(parent),  ui(new Ui::main_window)   //Конструктор
{
    ui->setupUi(this);
    i = we_need_this_i;
}



Тогда тебе нужно будет вызывать конструктор как-нибудь вот так

Раскрывающийся текст

    MainWindow* dlg = new MainWindow(null, //тут твоя переменная которую ты получил);


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
TiiL
  опции профиля:
сообщение 27.2.2012, 15:23
Сообщение #45


Участник
**

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

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




Репутация:   0  


Рисую следющую форму:
есть lineEdit 2 штуки, в них записывается названия фалов которые нужно открыть, и есть кнопки Boxs, изначально неактивные, нужно сделать условие: если заполнены lineEdit больше чем на 4 символа(условие для того чтобы отвергать вот такую запись ".txt"), то кнопки становятся активными. не могу понять как реализовать сей процесс.

есть мысль считывать то что записано в лайнедит:
Раскрывающийся текст
 QFileInfo fi(curveName);
        QString shownName = fi.fileName();

        ui->lineEdit->setText(shownName);


и типо усли showName > 4 знаков, то включать кнопки. правильно это ли реализовывать?

Сообщение отредактировал TiiL - 27.2.2012, 16:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
crazymonkey
  опции профиля:
сообщение 27.2.2012, 21:02
Сообщение #46


Студент
*

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

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




Репутация:   0  


посмотрите в сторону метода setValidator
установите у каждого lineEdit QRegExpValidator следующего вида

 
QRegExp rx("\\d{4}");
QValidator *validator = new QRegExpValidator(rx, this);

QLineEdit *edit = new QLineEdit(this);
edit->setValidator(validator);


Раскрывающийся текст
Регулярное выражение может быть неправильным, код не проверял


ой регулярка точно не правильна

наверное так
".{4}"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.11.2024, 14:47