Search
Categories
Archives

You are currently browsing the archives for the C++ category.

Bookmarks

Archive for the ‘C++’ Category

postheadericon QT Telnet

Pro připojení na telnet pomocí QT4 jsem použil QTcpSocket

Následně na to jsem si vytvořil funkci na připojení

#include <QString>
#include <QDebug>
#include <QtNetwork/QFtp>
#include <QtNetwork/QTcpSocket>
#include <mainwindow.h>
#include <QTcpSocket>

QTcpSocket *tcpSocket;

void telnet_connect() { //definice názvu funkce

tcpSocket = new QTcpSocket(); //nadefinování promenné 
 tcpSocket->connectToHost(„ip adresa“, „císlo portu“); //zde si nadefinuji ip adresu a port na kterem server prima telnet
 bool connected = tcpSocket->waitForConnected(1000); //cekani na odpoved 1000 ’1 vteřina

if (connected) {

 tcpSocket->write(„heslo\n“); //zde zadáme paramert na odeslani nezapomoiname na \n jinak se nám přikaz neprovedl
tcpSocket->flush();

qDebug()<< „spojeni v poradku“;

}
//kdyby byla chyba
else {
qDebug()<< „Chyba (error “ << tcpSocket->error() << ‘)’;
}

}

 

 

zde jsem si nadefinoval funkci na odeslání příkazu telnetu

 

void telnet_ovladani(QString prikaz){ //definice nazvu funkce

QByteArray pp = „“;  //díme prikaz dohromady
pp.append(prikaz);
pp.append(„\n“);

tcpSocket->write(pp); //odesleme přikaz
tcpSocket->flush();

}

 

 

 

postheadericon error: undefined reference to `vtable for ClassPrihlasit’

Dnes si povímě něco o této chybě, na kterou jsem narazil během vytváření aplikace v QT Creatoru

je na to naprosto jednoduchý recept musí se nainsludovat soubor .moc

Nejdříve jsem to dal nahoru do zdrojače kde máme klasický includy, ale začlo to hlásit ještě více chyb než bylo zdrávo a tak jsem se chvilku po googlil, moc toho nenašel ale po chvilce testování jsem skusil v souboru main.cpp

udělat include #include <main.moc> a dal jsem to úplně dolu na konec souboru na posledni řadek uplně pod všechno a už to začlo fungovat, takže pokud se někdo setkáte s touto chybou , nevahejte a napište si to do spod a uvidíte jak je to jednoduché :-)

postheadericon c++ mysql pomocí Qt4

Dnes si ukážem jak se spojit z c++ s mysql pomocí QT knihoven

#include <iostream>
#include <QApplication>
#include <QLabel>
#include <QString>
#include <QLineEdit>
#include <QPushButton>
#include <QObject>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlRecord>

 

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QWidget *window = new QWidget();
//sirka výska
window->resize(200, 110);
QSqlDatabase db = QSqlDatabase::addDatabase(„QMYSQL“); //zde nastavíme ze chceme mysql , jdou použít i jiní ale pro dnešek potřebujem toto
db.setHostName(„napor_ip“); //zde nastavíme hosta
db.setDatabaseName(„název databáze“); //zde nastavíme jmeno databáze
db.setUserName(„uzivatelské jmeno“); //zde nastavíme uzivatelské jmeno
db.setPassword(„heslo“); //zde nastavíme heslo
db.open(); //toto nám otevre tadabazy

QSqlQuery sql;

sql.prepare( „SELECT id FROM uzivatele“ );
sql.exec();

QSqlRecord rec = sql.record();

int pocet = rec.count();

cout << pocet;

 

Ještě musíme do .pro  napsat QT += sql  Jinak nám to nebude fungovat!!!!

 

QSqlQuery nám pomůže vykonat dotaz do mysql .

zde v kodu si ji vyvoláváme sql.prepare(„dotaz“);  a jak již vidíte promenou sql sme si předtím deklarovaly QSqlQuery sql;

abychom mohli dále pracovat s výsledkem nesmíme zapomenout na parametr exec() bez kterého by nám se nevracel vysledek.

Zde je použito sql.exec() jelikož proměnnou sql již máme nadefinovanou.

QsqlRecord rec = sql.record(); // vytvoříme si možnost pracovani s vysledkem sql dotazu

int pocet = rec.count(); //toto nám načte počet sloupcu v mysql dotazu

count << pocet;  toto nám do terminalu vypíše počet řádků z mysql přikazu

 

///////////////////////////////////////////////////////

Stejným spůsobem se dá připojit i do jiných tipů databází

Stačí jen v QSqlDatabase::addDatabase(„QMYSQL“); QMYSQL nahradit jedním z níže uvedených pro spojení s databázý, kterou potřebujeme

QDB2 IBM DB2
QIBASE Borland InterBase Driver
QMYSQL MySQL Driver
QOCI Oracle Call Interface Driver
QODBC ODBC Driver (includes Microsoft SQL Server)
QPSQL PostgreSQL Driver
QSQLITE SQLite version 3 or above
QSQLITE2 SQLite version 2
QTDS Sybase Adaptive Server

 

 

 

postheadericon Proč se funkce main() nemůže jmenovat jinak

Existuje velmi pádný důvod proč pojmenovat funkci programu myfirst.cpp jako main:

nemusí to tak být. Každý program jazyka c++ vyžaduje funkci, která  se nazývá main )).

A nemůže to být ani Main() či MAIN().

Vspoměňte si na nutnost dodržovat správé velikosti a pořadí písmen.

Protože program myfirst.cpp má pouze jednu funkci, musí na sebe vzít tuto zodpovědnost ona a být funkcí main(). Vykonávání spuštěného programu jazyka c++ začíná vždy na zacčátku funkce main)).Bez funkce main)) tedy není žádný program úplný a překladač vás upozorní, že jste nedefinovali funkci main().

Samozřejmě jako u všeho existují výjimky.

Například programování pod Windows můžete napsat modul dinamicky vázané knihovny (DLL).To je kod, který mohou používat i ostatní programy windows. Prodože modul DLL není nezávyslí program, nepotřebuje funkci main)).

Také programy pro specializované prostředí, jako jsou ovládací čipy robota, nemusí potřebovat funkci main)).

Ale programy samostatné funkci main() potřebují a právě takovýmito typip programu se v tomto serialu budeme zabývat.