Просмотр сообщений
|
Страниц: 1 ... 10 11 [12]
|
166
|
Qt / Общие вопросы / Бланшет-предварительное объявление класса
|
: Сентябрь 28, 2009, 08:54
|
В книге во второй главе приводится пример предварительного объявления классов. Я попробовал сделать что-то похожее- не получилось. Вот код: ////dialogimpl.h #ifndef DIALOGIMPL_H #definr DIALOGIMPL_H #include<QDialog> #include "ui_dialog.h" #include <QVector> //class QVector<int>; //если без <int>, пишет, что нужен шаблон, если с <int>, то при объявлении //ivec пишет, что вектор имеет "неполный тип" class DialogImpl:public QDialog,public Ui::Dialog { Q_OBJECT public: DialogImpl(QWidget *parent=0,Qt::WFlags f=0); private: QVector,int> ivec; private slots: void fillVec(); }; #endif
////dialogimpl.cpp #include "dialogimpl.h" #include<QDebug> DialogImpl::DialogImpl(QWidget *parent,Qt::WFlags f):QDialog(parent,f) { setupUi(this); connect(Button,SIGNAL(clicked()),this,SLOT(fillVec())); } void DialogImpl::fillVec() { ivec.push_back(2); qDebug()<<ivec[0]; }
в общем, все работает, только если в .h-файле включаю QVector.h если, как рекомендует Бланшет (правильно, между прочим, рекомендует), то выдает ошибки. Подскажите, как правильно предварительно объявить класс, а то если несколько файлов, да в каждом нужно упомянуть вектор, так не включать же его библиотеку везде?
|
|
|
168
|
Qt / Пользовательский интерфейс (GUI) / перемещение по TableView-продолжение
|
: Июнь 30, 2009, 13:53
|
(Qt 4.5.1) Ета тема уже поднималась ( http://www.prog.org.ru/topic_7117_0.html), а все равно ничего не получается. Делаю так же, как в теме по ссылке-в дизанере создал диалог, на нем лежит QTableView и QLineEdit. Таблица заполняется из запроса. Все отображается, и вот перемещение по таблице программа игнорирует-даже на Breapoint не попадает. Вот исходники: dialogimpl.h class DialogImpl : public QDialog, public Ui::Dialog { Q_OBJECT public: DialogImpl( QWidget * parent = 0, Qt::WFlags f = 0 ); private: QString btnName; private slots: void fillEdit(const QModelIndex &, const QModelIndex &); protected: virtual bool start(); virtual void closeEvent(QCloseEvent *event); };
class MyModel:public QSqlQueryModel { Q_OBJECT public: MyModel(); Qt::ItemFlags flags(const QModelIndex &index) const; QVariant data(const QModelIndex &index,int role=Qt::DisplayRole) const; private: void refresh(); }; dialogimpl.cpp DialogImpl::DialogImpl( QWidget * parent, Qt::WFlags f) : QDialog(parent, f) { setupUi(this); connect(tab_view->selectionModel(),SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),this,SLOT(fillEdit(const QModelIndex &, const QModelIndex &))); start(); MyModel *model=new MyModel(); tab_view->setModel(model); }
MyModel::MyModel() { refresh(); }
Qt::ItemFlags MyModel::flags(const QModelIndex &index) const {........}
QVariant MyModel::data(const QModelIndex &index,int role) const {.........}
void MyModel::refresh() { setQuery("SELECT ...FROM ...."); setHeaderData(0,Qt::Horizontal,tr("...")); ..... }
bool DialogImpl::start() { QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL3"); ........ }
void DialogImpl::closeEvent(QCloseEvent *event) {...}
void DialogImpl::fillEdit(const QModelIndex & current, const QModelIndex &previuos) { int row=current.row(); EInvNum->setText(QString::number(row)); }
Проблема, похоже ерундовая, но никак не пойму за что ухватиться. Помогите!
|
|
|
169
|
Qt / Печать / Re: не могу заставить работать NCReport
|
: Февраль 05, 2009, 15:42
|
сил моих больше нет!!! Скачал ncreport-qt4-0.7.02.tar.gz, вроде не бинарник. qmake c make его вообще не компилирует-куча ошибок, qmake-qt4 c make долго что-то делает без ошибок, но кроме возможности просмотреть пример отчета (./ncreport n -preview) больше, кажется, ничего из этого не получается. Во всяком случае ни папки "bin", ни "lib" тут не появилось. Собственно, и дезайнера-то я там не нашел. Может плюнуть на этот NCReport? А как тогда сделать отчет?
|
|
|
170
|
Qt / Печать / Re: не могу заставить работать NCReport
|
: Февраль 05, 2009, 06:56
|
вернул, как было файл /etc/ld.so.conf, создал ncreport.conf, положил в /etc/ld.so.conf.d, выполнил sudo ldconfig. Ничего не заругадось, наверное все прошло как надо, однако ни демо, ни программа не компилируются-демо из-за отсутствия "runner", программа из-за "undefined reference to `QGraphicsScene::eventFilter(QObject*, QEvent*)". Может, я как-то не так саму ncreport установил? Собственно, я просто распаковал архив. Пытался скомпилировать, qmake-qt4 вроде создал Makefile, а вот make дала ошибку Cannot find file: src.pro. make: *** [src//Makefile] Ошибка 2
|
|
|
171
|
Qt / Печать / Re: не могу заставить работать NCReport
|
: Февраль 04, 2009, 15:53
|
1) Демо не скомпилировались (я ж писал, что нет папки "runner", а при компиляции ругается, что make[1]: *** Нет правила для сборки цели `../../runner/ncrtestform.ui', требуемой для `uic/ui_ncrtestform.h'. Останов. make[1]: Leaving directory `/home/user/downloads/NCReport2/src/demos/CustomDataSource' make: *** [sub-CustomDataSource-make_default] Ошибка 2
2)ldd выдал очень длинный список. Вот он: linux-gate.so.1 => (0xffffe000) libQtScript.so.4 => /usr/lib/libQtScript.so.4 (0xb7df3000) libQtSql.so.4 => /usr/lib/libQtSql.so.4 (0xb7dab000) libmysqlclient_r.so.15 => /usr/lib/libmysqlclient_r.so.15 (0xb7bbe000) libcrypt.so.1 => /lib/tls/i686/cmov/libcrypt.so.1 (0xb7b90000) libnsl.so.1 => /lib/tls/i686/cmov/libnsl.so.1 (0xb7b78000) libssl.so.0.9.8 => /usr/lib/i686/cmov/libssl.so.0.9.8 (0xb7b37000) libcrypto.so.0.9.8 => /usr/lib/i686/cmov/libcrypto.so.0.9.8 (0xb79f4000) libQtXml.so.4 => /usr/lib/libQtXml.so.4 (0xb799a000) libQtGui.so.4 => /usr/lib/libQtGui.so.4 (0xb71ff000) libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb71dc000) libSM.so.6 => /usr/lib/libSM.so.6 (0xb71d4000) libICE.so.6 => /usr/lib/libICE.so.6 (0xb71bc000) libXi.so.6 => /usr/lib/libXi.so.6 (0xb71b4000) libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb71ac000) libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb71a5000) libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb7135000) libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb710a000) libXext.so.6 => /usr/lib/libXext.so.6 (0xb70fc000) libX11.so.6 => /usr/lib/libX11.so.6 (0xb700b000) libQtCore.so.4 => /usr/lib/libQtCore.so.4 (0xb6e8b000) libz.so.1 => /usr/lib/libz.so.1 (0xb6e75000) libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb6e70000) librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb6e67000) libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb6daa000) libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb6d92000) libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb6d8e000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb6c9a000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb6c75000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb6c6a000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb6b20000) libpq.so.5 => /usr/lib/libpq.so.5 (0xb6b03000) libsqlite.so.0 => /usr/lib/libsqlite.so.0 (0xb6aaa000) libsqlite3.so.0 => /usr/lib/libsqlite3.so.0 (0xb6a45000) libaudio.so.2 => /usr/lib/libaudio.so.2 (0xb6a2f000) libXt.so.6 => /usr/lib/libXt.so.6 (0xb69de000) libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb69d9000) libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb69cf000) libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb69cc000) libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb69ac000) libXau.so.6 => /usr/lib/libXau.so.6 (0xb69a9000) libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb69a4000) /lib/ld-linux.so.2 (0x80000000) libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb691b000) libcom_err.so.2 => /lib/libcom_err.so.2 (0xb6918000) libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb68f3000) libkrb5support.so.0 => /usr/lib/libkrb5support.so.0 (0xb68eb000) libkeyutils.so.1 => /lib/libkeyutils.so.1 (0xb68e8000) libresolv.so.2 => /lib/tls/i686/cmov/libresolv.so.2 (0xb68d5000)
солидно, но непонятно.
|
|
|
172
|
Qt / Печать / Re: не могу заставить работать NCReport
|
: Февраль 04, 2009, 12:56
|
что-то вообще не то получается. В /etc/ld.so.conf теперь такие строки: include /etc/ld.so.conf.d/*.conf include /home/user/downloads/NCReport2/lib/* ///я добавил
делаю /etc/ld.so.conf и получаю длинную портянку с такого рода надписями
/sbin/ldconfig.real: �E����t is not a known library type /sbin/ldconfig.real: ���4$�,i���ƋE�����T����E��$�����D�����t& is not a known library type /sbin/ldconfig.real: b���D��<����U���T����D$ is not a known library type /sbin/ldconfig.real: ���(����NjE���������E��$�k��������NjE������
На всякий случай запустил make, но результат был абсолютно тот же, что и до всех моих издевательств над ld.so.conf
|
|
|
174
|
Qt / Печать / не могу заставить работать NCReport
|
: Февраль 03, 2009, 07:48
|
Исходные данные: KUbuntu 7.10, QT 4.3.2, ncreport скачал с http://nocisoft.com/download/ncreport/bin/NCReport_2.1.1_Linux_bin_Qt4.3.2.tar.gz. Делаю отчет, как описывается в "Getting started Guide" в папке "Doc". Сделал форму с единственной кнопкой, которая запускает просмотр отчета. В .pro-файле есть строки INCLUDEPATH = /home/user/downloads/NCReport2/include LIBS += -lncreport -L/home/user/downloads/NCReport2/lib -L/usr/local/bin запускаю make, выдает g++ -o bin/tabl build/dialogimpl.o build/main.o build/moc_dialogimpl.o -L/usr/lib -lncreport -L/home/user/downloads/NCReport2/lib -L/usr/local/bin -lQtSql -lQtXml -lQtGui -lQtCore -lpthread /home/user/downloads/NCReport2/lib/libncreport.so: undefined reference to `QGraphicsScene::eventFilter(QObject*, QEvent*)' collect2: выполнение ld завершилось с кодом возврата 1 make: *** [bin/tabl] Ошибка 1 при этом упоминания QGraphicsScene в тексте программы нет. Как заставить NCReport работать? И еще: в примерах все время идут ссылки на папку "runner", я уже штук 5 разных NCReport'ов повыкачал, ни в одном этой папки нет. Это мне не везет, или так задумано?
|
|
|
175
|
Qt / Базы данных / Re: MySQL, QT3, кириллица. Перепробовал все
|
: Октябрь 20, 2008, 13:33
|
УРА!! Я, похоже, перемудрил. Изменил по совету crossly свой main.cpp (приведу полный текст-вдруг кому пригодится?) #include <qapplication.h> #include <qtextcodec.h> #include "baseform.h"
int main( int argc, char ** argv ) { QApplication a( argc, argv ); QTextCodec *codec; codec=QTextCodec::codecForName("utf8"); QTextCodec::setCodecForCStrings(codec); QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForTr(codec); baseForm w; w.show(); a.connect( &a, SIGNAL( lastWindowClosed() ), &a, SLOT( quit() ) ); return a.exec(); } И все! Не нужно править my.cnf, не нужны дополнительные запросы-все сразу заработало, как хотелось. Тема закрыта.
|
|
|
176
|
Qt / Базы данных / MySQL, QT3, кириллица. Перепробовал все
|
: Октябрь 20, 2008, 09:11
|
Исходные данные: Linux (Ubuntu 7.10), локаль utf8, KDE 3, MySQL 5.0.45, Qt 3.3.7 Создал локальную базу, в ней таблица с текстовым полем. В shell или в Query Brouser кириллица работает нормально: можно записать, можно просмотреть. Имеется программа в Qt с QDataTable, в которую выводится таблица. Вместо кириллицы-что-то типа "билеÑ". Пытаюсь сделать запись из QLineEdit-в таблицу записываются вопросики. Пересмотрел все, что мог в инете. пробовал: 1) менять my.cnt [client] default-character-set=utf8 [mysqld] default-character-set=utf8 [mysql] default-character-set = utf8 в текст программы после подключения к базе пробовал написать запрос QSqlQuery query1; 2)query1.exec("set character set utf8;"); или 3)query1.exec("SET NAMES utf8;"); толку никакого-только в 3 случае содержимое QLineEdit-поля после команды UPDATE отображается в таблице кракозяблами, а во 2-м случае-вопросиками. Запрос SHOW VARIABLES LIKE '%char%'; выдает 'character_set_client', 'utf8' 'character_set_connection', 'utf8' 'character_set_database', 'latin1' 'character_set_filesystem', 'binary' 'character_set_results', 'utf8' 'character_set_server', 'latin1' 'character_set_system', 'utf8' 'character_sets_dir', '/usr/share/mysql/charsets/' а между прочим, в , //usr/share/mysql/charsets/ нет utf8. 4)Пробовал и у таблицы, и у текстового поля менять character set-без толку, в запрос вставлять не содержимое Edit-поля, а tr(Edit->text()) - то же самое 5)если пишу не из Edit-поля, а пишу типа "UPDATE pinigai SET nam='"+QString::fromLocal8Bit("булка")+"' WHERE id=7;" опять вопросики. 6)если сначала выполняю запрос таким образом query1.exec(query_str.utf8()) то по крайней мере в Query Brouser кириллица отображается правильно. А в Qt-программе все равно ее нет. 7)И еще что заметил: если после запуска программы пытаюсь редактировать имеющуюся запись и первую запись делаю латинницей, запись проходит удачно и все следующие тоже (только не по-русски). А если первую редакцию пытаюсь сделать кириллицей-не пишет, пока хоть что-нибудь не впишу латинницей. Это действует, только если изменен my.cnf (см. п. 1)
|
|
|
Страниц: 1 ... 10 11 [12]
|
|
|