Archive for the ‘C++’ Category
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();
}
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é :-)
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
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.