August 22, 2009

[QT] Изменение размера виджета в зависимости от размера окна

Захотелось мне сделать таблицу, которая будет растягиваться или сжиматься в зависимости от размеров главного окна программы. Попытался в Qt дизайнере поиграться со свойствами таблицы, но ничего не получилось и пришел к следующим действиям:
Переопределил метод QMainWindow

protected:
void resizeEvent( QResizeEvent *__e );

August 4, 2009

[Qt]Вывод в консоль в Qt проекте в среде MSVS

Так как обычные *.pro файлы не работают в MSVC, точнее, интегратор Qt для MSVS не генерирует из *.pro файла Makefile'ы, то может возникнуть проблема в том, что нужно вывести дебаг информацию в консоль, а консоль-то не работает... Есть 2 способа решения данной проблемы:
1. Создать Qt Console Application:

August 3, 2009

MSVS + Qt 4.5-Windows CE

Как скомпилировать Qt 4.5.x для создания приложений под Windows CE(я компилил под Windows Mobile 6).
Качаем Windows Mobile 6 Standard SDK или Windows Mobile 6 Professional SDK. Устанавливаем. Далее создаем батник(пути и версии свои):

August 2, 2009

MSVS + Qt 4.5

Неоднократно видел вопросы на форумах, как собрать Qt для использования в MS Visual Studio. Изначально, на сайте qtsoftware.com можно скачать библиотеку, ориентированную на использование с компилятором gcc для Windows(MinGW). Для того, чтобы можно было собирать проекты с использованием данной библиотеки компилятором MS необходимо пересобрать Qt.
И так, качаем Qt. Устанавливаем. Далее создаем батник с таким содержанием:

June 20, 2009

ZTE AC8700 + Debian GNU/Linux

Как подключиться к интернету, если Вы в парке на лавочке, у Вас есть ноутбук c Debian 5.0 и модем zte ac8700? У меня провайдер PeopleNet, потому некоторые моменты будут с ним связанны.
Для начала заставляем Debian понимать то, что в usb мы воткнули модем.
выполняем команду:
#>modprobe usbserial vendor=0x19d2 product=0xfffe

Далее вставляем модем в usb и ждем, пока его индикатор не начнет мигать зеленым цветом.
Замигал зеленым.
выполняем команду
#>dmesg | tail

March 13, 2009

[Qt]Импорт проекта в Eclipse IDE

Если Вы хотите импортировать Qt-шный проект в рабочее пространство Eclipse IDE и у Вас не получается это сделать посредством интегратора Qt для Eclipse через *.pro файл, рекомендую обратиться к стандартным средствам Eclipse:
File -> Import... -> General -> Existing Project into Workspace
затем жмем Next и выбираем директорию или архив с проектом. Завершаем операцию импорта и Ваш проект уже находится в Workspace Eclipse.

March 6, 2009

[Qt4] Работа с БД

Написал небольшой класс для работы с бд посредством Qt.
Использовать класс нужно так:
тут пишем свою строку коннекта:
--------------------------------------------------------------------------------------------
this->dbo.setDatabaseName( "CONNECTION STRING" );
--------------------------------------------------------------------------------------------

Потом так:
--------------------------------------------------------------------------------------------

1 RDatabase dbs;
2 dbs.init( "my_connection" );
3 if ( dbs.connect() ){
4 dbs.exec( "SELECT id, name FROM table" );
5 for ( int i = 0; i < dbs.count(); i++ ){
6 /*второй параметр 1 для перемещения курсора*/
7 id = dbs.value( 0, 1 );
8 name = dbs.value( 1 );
9 }
10 dbs.disconnect();
11 }


--------------------------------------------------------------------------------------------

Код класса

RDatabase.h
--------------------------------------------------------------------------------------------

19
20 #ifndef RDATABASE_H_
21 #define RDATABASE_H_
22
23 #include <QtSql/QSqlDatabase>
24 #include <QtSql/QSqlQuery>
25 #include <QtSql/QSqlResult>
26 #include <QtSql/QSqlError>
27
28 class RDatabase {
29
30 public:
31 RDatabase();
32 virtual ~RDatabase();
33
34 public:
35 void init( const QString &name );
36 bool connect();
37 bool connected() const;
38 bool reconnect();
39 void disconnect();
40 bool exec( const QString &query );
41 const QString value( int i, int r = 0 );
42 int count();
43 const QString getLastError();
44
45 private:
46 QSqlDatabase dbo;
47 QSqlQuery dbq;
48 bool initialized;
49
50 };
51
52 #endif /* RDATABASE_H_ */

--------------------------------------------------------------------------------------------
RDatabase.cpp
--------------------------------------------------------------------------------------------

19
20 #include "RDatabase.h"
21
22 RDatabase::RDatabase(){
23 this->initialized = false;
24 }
25
26 RDatabase::~RDatabase(){
27
28 }
29
30 /*
31 * Public members
32 */
33 void RDatabase::init(const QString &name){
34 if ( !this->initialized ){
35 this->dbo = QSqlDatabase::addDatabase( "QODBC", name );
36 /*
37 this->dbo.setDatabaseName( "DRIVER={MySQL ODBC 3.51 Driver};"
38 "Server=localhost;Port=3306;"
39 "Option=16384;Stmt=;Database=test;"
40 "Uid=root;Pwd=password" );
41 */
42 this->dbo.setDatabaseName( "CONNECTION STRING" );
45 }
46 this->initialized = true;
47 }
48 bool RDatabase::connect(){
49 return this->dbo.open();
50 }
51 bool RDatabase::connected() const{
52 return this->dbo.isOpen();
53 }
54 bool RDatabase::reconnect(){
55 this->dbo = QSqlDatabase::database( this->dbo.connectionName(), true );
56 return this->dbo.open();
57 }
58 void RDatabase::disconnect(){
59 this->dbo.close();
60 }
61 bool RDatabase::exec(const QString &query){
62 this->dbq = this->dbo.exec( query );
63 return this->dbq.isActive();
64 }
65 const QString RDatabase::value(int i, int r){
66 if ( r != 0 ) this->dbq.next();
67 return this->dbq.value( i ).toString();
68 }
69 int RDatabase::count(){
70 return this->dbq.numRowsAffected();
71 }
72 const QString RDatabase::getLastError(){
73 return this->dbo.lastError().text();
74 }

--------------------------------------------------------------------------------------------

February 26, 2009

[C/C++] Указатель на функцию

С функцией мы можем сделать две вещи:
-вызвать ее;
-получить ее адрес;
Если мы получим адрес функции и присвоим его какому-то указателю, то в дальнейшем сможем использовать этот адрес для вызова функции.
--------------------------------------------------------------------------------------------
/* функция, которая ничего не возвращает */
void function(){ printf( "Hello wrold" ); } /* обьявление функции */
void ( *pointer )( void ); /* обьявление указателя */

int main( int argc, char *argv[] ){
pointer = &function; /* берем адрес функции */
pointer(); /* вызов функции function() через ее адрес */
return 0;
}

/* функция, которая что-то возвращает */
char* function(){ /* обьявление функции */
static char *str = "HelloWorld";
return str;
}

char*( *pointer )( void ); /* обьявление указателя */

int main( int argc, char *argv[] ){
pointer = &function; /* берем адрес функции */
printf( "%s\n", pointer() ); /* вызов функции function() через ее адрес */
return 0;
}

/* функция, которая что-то принимает в качестве аргумента */
void function(const char *_s){ /* обьявление функции */
printf( "%s\n", _s );
}

void ( *pointer )( const char *); /* обьявление указателя */

int main( int argc, char *argv[] ){
pointer = &function; /* берем адрес функции */
pointer( "Hello world" ); /* вызов функции function() через ее адрес */
return 0;
}

--------------------------------------------------------------------------------------------

[C/C++] Получить имя пользователя в Windows

Ниже предоставленна небольшая функция, которая помогает определить имя пользователя в системе Windows:
--------------------------------------------------------------------------------------------
/* init */
char* winUserName(){
static char name[256];
unsigned long size = sizeof( name );
GetUserName( name, &size ); /* from windows.h */
return name;
}
/* using */
int main(int argc, char *argv[]){
printf( "%s\n", ::winUserName() ); /* from stdio.h*/
return 0;
}

--------------------------------------------------------------------------------------------

February 25, 2009

Уникальная установка .Net Framework 3.5 SP1

На Windows XP SP3 устанавливал .Net Framework 3.5 SP1
Пронаблюдал очень интересную картину: