Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Окно для программы


Автор: Sasha_cpp 12.3.2008, 15:34
Я написал порогу для некоторых расчётов (Батёк попросис) в VS C++ 6.0. Но он меня попросил переделать её под стиль виндолс (тоесть чтоб было окно) но я уже третий день шарюсь по инету и немогу не чего нормального найти (находил примеры но они почимуто не работают выводят ккакието ошибки во время компилированя. Помогитн пожалуста переписать этот код под виндолс. Кстоате вот сам код--

Автор: korian 12.3.2008, 17:25
а вы, я смотрю, извращенец, сударь  smile
страница ifов потрясла (точнее 4 страницы).

Цитата(Sasha_cpp @  12.3.2008,  14:34 Найти цитируемый пост)
находил примеры но они почимуто не работают выводят ккакието ошибки во время компилированя

давайте то, что вы уже сделали, а не из чего делать.
полностью писать программу вам врядли тут кто-то будет.
или вам сюда:
http://forum.vingrad.ru/Vingrad-help-center.html

Автор: bsa 12.3.2008, 17:42
что такое "виндолс"? Выигрышные куклы?

mycalc.pro:
Код
TEMPLATE = app
TARGET =
DEPENDPATH += . src
INCLUDEPATH += . src
QT += gui core
CONFIG += no_keywords

# Input
HEADERS += src/dlgmain.h
FORMS += src/dlgmain.ui
SOURCES += src/dlgmain.cpp src/main.cpp
src/main.cpp:
Код
#include <QApplication>
#include <QtGui>
#include "dlgmain.h"

int main(int argc, char *argv[])
{
        QApplication app(argc, argv);
        DlgMain dialog;
        dialog.show();
        return app.exec();
}
src/dlgmain.h:
Код
#ifndef DLGMAIN_H
# define DLGMAIN_H

# include <QDialog>
# include "ui_dlgmain.h"

class DlgMain : public QDialog
{
        Q_OBJECT
        Ui::DlgMain ui;
public:
        DlgMain(QWidget *parent = 0);
        ~DlgMain(){}
public Q_SLOTS:
        void compute(void);
};

#endif //DLGMAIN_H
src/dlgmain.ui:
Код
<ui version="4.0" >
 <class>DlgMain</class>
 <widget class="QDialog" name="Dialog" >
  <property name="geometry" >
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>183</height>
   </rect>
  </property>
  <property name="windowTitle" >
   <string>Dialog</string>
  </property>
  <layout class="QGridLayout" >
   <property name="leftMargin" >
    <number>1</number>
   </property>
   <property name="topMargin" >
    <number>1</number>
   </property>
   <property name="rightMargin" >
    <number>1</number>
   </property>
   <property name="bottomMargin" >
    <number>1</number>
   </property>
   <item row="0" column="0" >
    <widget class="QWidget" native="1" name="widget" >
     <layout class="QHBoxLayout" >
      <item>
       <widget class="QLabel" name="label" >
        <property name="text" >
         <string>P1:</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QLineEdit" name="edP1" />
      </item>
     </layout>
    </widget>
   </item>
   <item rowspan="3" row="0" column="1" colspan="3" >
    <widget class="QLabel" name="lbResult" >
     <property name="font" >
      <font>
       <pointsize>16</pointsize>
      </font>
     </property>
     <property name="text" >
      <string>Result</string>
     </property>
    </widget>
   </item>
   <item row="1" column="0" >
    <widget class="QWidget" native="1" name="widget_2" >
     <layout class="QHBoxLayout" >
      <item>
       <widget class="QLabel" name="label_2" >
        <property name="text" >
         <string>P2:</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QLineEdit" name="edP2" />
      </item>
     </layout>
    </widget>
   </item>
   <item row="2" column="0" >
    <widget class="QWidget" native="1" name="widget_3" >
     <layout class="QHBoxLayout" >
      <item>
       <widget class="QLabel" name="label_3" >
        <property name="text" >
         <string>P3:</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QLineEdit" name="edP3" />
      </item>
     </layout>
    </widget>
   </item>
   <item row="3" column="0" colspan="2" >
    <widget class="QWidget" native="1" name="widget_4" >
     <layout class="QHBoxLayout" >
      <item>
       <widget class="QLabel" name="label_4" >
        <property name="text" >
         <string>60 of 65:</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QLineEdit" name="ed60" />
      </item>
     </layout>
    </widget>
   </item>
   <item row="3" column="2" >
    <widget class="QPushButton" name="btCompute" >
     <property name="text" >
      <string>C&amp;ompute</string>
     </property>
     <property name="default" >
      <bool>true</bool>
     </property>
    </widget>
   </item>
   <item row="3" column="3" >
    <widget class="QPushButton" name="btClose" >
     <property name="text" >
      <string>&amp;Close</string>
     </property>
    </widget>
   </item>
  </layout>
 </widget>
 <resources/>
 <connections>
  <connection>
   <sender>btClose</sender>
   <signal>clicked()</signal>
   <receiver>Dialog</receiver>
   <slot>close()</slot>
   <hints>
    <hint type="sourcelabel" >
     <x>361</x>
     <y>161</y>
    </hint>
    <hint type="destinationlabel" >
     <x>199</x>
     <y>91</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>
src/dlgmain.cpp:
Код
#include <QtGui>
#include <cmath>
#include "dlgmain.h"

DlgMain::DlgMain(QWidget *parent) : QDialog(parent)
{
        ui.setupUi(this);
        connect(ui.btCompute, SIGNAL(clicked()), this, SLOT(compute()));
}

void DlgMain::compute(void)
{
        bool ok[4];
        float P1 = ui.edP1->displayText().toFloat(ok + 0);
        float P2 = ui.edP2->displayText().toFloat(ok + 1);
        float P3 = ui.edP2->displayText().toFloat(ok + 2);
        float c = ui.ed60->displayText().toFloat(ok + 3);

        float x = ( -((P1*0)+(P2*48.5)+(P3*(-48.5)))/-(P1+P2+P3));
        float y = ( -((P1*15)+(P2*99)+(P3*99))/-(P1+P2+P3));
        float a = (sqrt((x*x)+(y*y)));
        float k = (sqrt((a*a)+(c*c)));
        float d = (a/k) / M_PI * 180;
        QString result;
        QTextStream stream(&result);
        stream << "x = " << x << "\ny = " << y << "\na = " << a << "\nk = " << k << "\nd = " << d;
        ui.lbResult->setText(result);
}
Для сборки программы требуется http://trolltech.com и поддерживающий его компилятор C++.

Автор: Dronchik 13.3.2008, 09:06
bsa, не уверен что Sasha_cpp требуеться qt. Хотя вариант.

Sasha_cpp
Книги и статьи по программирования на С++ под Windows есть http://cpp-exe.ucoz.ru/ и http://progs.biz/winapi/winapi/winapi01.aspx

Автор: bsa 13.3.2008, 12:38
Цитата(Dronchik @ 13.3.2008,  09:06)
bsa, не уверен что Sasha_cpp требуеться qt. Хотя вариант.

Имхо, программа на QT пишется несколько быстрее, чем аналог на WinApi. Причем, мне даже винду загружать не пришлось для этого  smile 

Автор: Dronchik 13.3.2008, 17:36
Цитата(bsa @  13.3.2008,  12:38 Найти цитируемый пост)
Имхо, программа на QT пишется несколько быстрее, чем аналог на WinApi. Причем, мне даже винду загружать не пришлось для этого  

qt не юзал - не знаю. Поверю Вам наслово. smile 

Автор: bsa 13.3.2008, 20:08
Dronchik, попробовать заюзать никто не мешает. Тем более, что для саморазвития очень полезно.

Автор: Sasha_cpp 8.4.2008, 13:50
Мужики извените что так давно небыло просто инет накрылся.
bsa, спасибо тебе что ты написал эти все кода но я не понимаю покаместь нечего что ты написал. и что это за QT
страшный он какойто. Я почти шо понял как писать проги с окнами. Но мне не понятно  smile как показано на рисунке
считать данные а после нажатии на кнопку ОК обработать (дапустим сложить) и результат вывести в этож окно....

Автор: korian 8.4.2008, 13:59
на чем пишите? Win32? MFC? builder? свой вариант?

Автор: Dronchik 8.4.2008, 14:24
Sasha_cpp, используй функции GetDlgItemText, atof, SetDlgItemText.
Например можно это делать так.
Код

char iop[998];
double opp;
double oppp;


//-------------------------------------------------------------

GetDlgItemText(hDlg,IDC_EDIT1,iop,999);
opp=atof(iop);
oppp=opp/2.54;//какое то действие
ostringstream ostr;    
ostr<<oppp;    
string stringValue = ostr.str();                
SetDlgItemText(hDlg,IDC_EDIT2,stringValue.c_str());

Автор: archimed7592 8.4.2008, 15:23
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: Sasha_cpp 9.4.2008, 12:06
korian,  Пытаюсь писать в любых но больше понравилчя Win32 Application .

Добавлено через 4 минуты и 5 секунд
Dronchik, Я чото не понял а куда ето вставлять?

Вот код программы
Код

#include "afxwin.h" 
#include "resource.h"
class CMyDlg : public CDialog{ 
public:
    char iop[998];
    double opp;
    double oppp;

    CMyDlg(CWnd* pParent=NULL);
    virtual void DoDataExchange(CDataExchange* pDX);
    void SetStr1(CString  sData1);  
                CString GetStr1();  
    void SetStr2(CString  sData2);  
                CString GetStr2();  
    
protected:
    CString m_sData1;    
    CString m_sData2;    
};
CMyDlg::CMyDlg(CWnd* pParent):CDialog(IDD_DIALOG1, pParent){
}
class CMyApp : public CWinApp{
public:
    virtual BOOL InitInstance();
};
BOOL CMyApp::InitInstance(){
    CMyDlg dlg;
    m_pMainWnd = &dlg;
    dlg.SetStr1("123"); 
    dlg.DoModal(); 
    return TRUE;
}
CMyApp theApp;
void CMyDlg::SetStr1(CString  sData1)
{
    m_sData1=sData1;
}
CString CMyDlg::GetStr2()
{
    return m_sData2;
}

void CMyDlg::DoDataExchange(CDataExchange* pDX){
        CDialog::DoDataExchange(pDX);
        DDX_Text(pDX, IDC_EDIT1, m_sData1);
       DDX_Text(pDX, IDC_EDIT2, m_sData2);
}

Автор: korian 9.4.2008, 12:42
например, на обработку кнопки повесить следующие:

UpdateData();
m_sData1 += m_sData2;
UpdateData(FALSE);

Автор: Sasha_cpp 10.4.2008, 11:44
Ура у меня получилось записать данные с EDIT в переменную. 
Вот что я зделал:
Код


void CZavrDlg::OnButton1() 
{
GetDlgItemText(IDC_EDIT1, strEdit);
AfxMessageBox(strEdit); // для проверки что оно записалось    
}

 Лудше всего редактировать в МФС проще и быстрее.

Тепер бы перевести значение общей переменной в переменную чисел. Тоесть чтобы было значение.
Кнонибуть знает как это сделать?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)