Russian Qt Forum
Май 05, 2024, 15:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 25 26 [27] 28 29 ... 38
391  Qt / Многопоточное программирование, процессы / Re: Как узнать кто излучил сигнал? : Февраль 06, 2011, 18:29
QObject::sender()
старая песня о главном))) в общем случае - вы и не должны знать. никак и никогда.
про QObject::sender()- как помню, ассистант рассказывает следующее: данный метод противоречит философии сигнал-слотов и работает только внутри одного потока. ....

В общем, имхо, ссылка на объект-источник типа QPointer передаваемая с сигналом - это получше будет и поуниверсальнее, хотя и "более тяжелая конструкция". но QPointer::isNull() удобен.
Спасибо за разъяснение. В моём случае как раз сигнал из др. потока.
392  Qt / Многопоточное программирование, процессы / Как узнать кто излучил сигнал? : Февраль 06, 2011, 14:13
В слоте нужно узнать адрес объекта, который испустил сигнал. Можно конечно в параметрах сигнала передавать адрес. А можно ещё как-нибудь? Вроде в Qt для этого есть какие-то методы?
393  Qt / Дополнительные компоненты / Re: Создаю библиотеку для работы с последовательными портами. [В ПРОЦЕССЕ]. : Январь 31, 2011, 20:19
моё преложение не собирается.

Собрал serialDevice 0.4.0. В своём .pro прописал
Код:
INCLUDEPATH += $$(QTPATH)/serportM04/src/qserialdevice \
$$(QTPATH)/serportM04/src/qserialdeviceenumerator

QMAKE_LIBDIR += $$(QTPATH)/serportM04/src/build/release

LIBS += -lqserialdevice

QTPATH = d:/soft/Qt/
при компиляции получаю ошибки
Код:
d:/soft/Qt/serportM04/src/build/release/libqserialdevice.a(serialdeviceenumerator_p_win.o):serialdeviceenumerator_p_win.cpp:(.text+0x89a): undefined reference to `_imp__SetupDiGetDeviceRegistryPropertyW@28'

d:/soft/Qt/serportM04/src/build/release/libqserialdevice.a(serialdeviceenumerator_p_win.o):serialdeviceenumerator_p_win.cpp:(.text+0xfb3): undefined reference to `_imp__SetupDiGetClassDevsW@16'

d:/soft/Qt/serportM04/src/build/release/libqserialdevice.a(serialdeviceenumerator_p_win.o):serialdeviceenumerator_p_win.cpp:(.text+0x100a): undefined reference to `_imp__SetupDiEnumDeviceInfo@12'

d:/soft/Qt/serportM04/src/build/release/libqserialdevice.a(serialdeviceenumerator_p_win.o):serialdeviceenumerator_p_win.cpp:(.text+0x1170): undefined reference to `_imp__SetupDiOpenDevRegKey@24'

d:/soft/Qt/serportM04/src/build/release/libqserialdevice.a(serialdeviceenumerator_p_win.o):serialdeviceenumerator_p_win.cpp:(.text+0x27de): undefined reference to `_imp__SetupDiDestroyDeviceInfoList@4'

collect2: ld returned 1 exit status

mingw32-make[1]: *** [debug/TestProg.exe] Error 1

mingw32-make: *** [debug] Error 2
Как это победить?
394  Qt / Дополнительные компоненты / Re: Создаю библиотеку для работы с последовательными портами. [В ПРОЦЕССЕ]. : Январь 31, 2011, 09:14
Ну и до кучи ещё вопросы
Код:
01346 void AbstractSerial::setCharIntervalTimeout(int usecs)
01347 {
01348     Q_D(AbstractSerial);
01349     if (this->isOpen())
01350         d->serialEngine->setCharReadTimeout(usecs);
01351     else
01352         this->emitStatusString(ESetCharIntervalTimeout);
01353 }
в 0.2 по возвращаемуму булу судил о том, установлен ли таймаут. если ошибка - вываливал юзеру MessageError. Как сейчас это проверяется? В  d->serialEngine->setCharReadTimeout() есть сигнал какой-то?

смотрю сигналы у AbstractSerial
Код:
void AbstractSerial::signalStatus  ( const QString &  status,  
  QDateTime  current 
 )  [signal]

Этот сигнал автоматически испускается при изменении статуса AbstractSerial.
Изменение статуса может быть вызвано следующими причинами:

•При ошибках конфигурировании устройства.
•При его открытии/закрытии.
•При ошибках I/O.
Допустим при  открытии/закрытии не нужно не чего делать, а вот при ошибках конфигурировании устройства или при ошибках I/O нужно что-то сделать и пользователя сообщением уведомить. Как отличить излучился сигнал из-за ошибки или из-за открытия/закрытия? Парсить QString&  status?
395  Qt / Дополнительные компоненты / Re: Создаю библиотеку для работы с последовательными портами. [В ПРОЦЕССЕ]. : Январь 31, 2011, 08:56
Цитировать
Попробуйте и отпишитесь.
Отписываюсь. Попробывать так и не удалось. Я использовал библиотеку 0.2.0. Там нет 230400. Обновился до 0.4.0. Там в справке не увидел 230400, но в *.h вроде есть. но слишлом уж 0.4 отличается от 0.2. Код не компиляется. Придется код перелопатить. Первый косяк... в 0.2 была функция
bool AbstractSerial::setCharIntervalTimeout(int), в 0.4 такой нет, вместо неё есть void AbstractSerial::setCharIntervalTimeout(int). Смотрю хелпник
Цитировать
void AbstractSerial::setCharIntervalTimeout  ( int  usecs = 0 )  

Устанавливает время ожидания прихода символа в приемный буфер последовательного устройства.

Аргументы:
[in] usecs Желаемое время ожидания прихода символа, в мксек.  

Возвращает:
False в случае ошибки.
См. определение в файле abstractserial.cpp строка 1346

Перекрестные ссылки ESetCharIntervalTimeout.

функция по объявлению возвращаяет void, а в хелпе "Возвращает: False в случае ошибки. Не понятно??? могу конечно её использовать как void, но вдруг это ошибка и в следующем релизе эта функция уже будет bool.
396  Qt / Дополнительные компоненты / Re: Создаю библиотеку для работы с последовательными портами. [В ПРОЦЕССЕ]. : Январь 29, 2011, 11:34
Может вопрос уже поднимался ...... Как установить у AbstractSerial скорость обмена 230400?
397  Qt / Пользовательский интерфейс (GUI) / Re: Как реализовать контекстное меню для виджетов? : Январь 29, 2011, 11:08
Из пушки по воробьям...
всё намного проще:
не знал про такой метод.... А как "простым" методом сепаратор вставить?

Цитировать
Цитировать
QMenu * QLineEdit::createStandardContextMenu ()
Вот это не понял как применить. Хотелось бы пример.

У QLineEdit есть стандартное контекстное меню (Copy, Paste, Cut, ....). Если нужно дополнить это сандартное меню своими пунктами, то в "пушке", в  mousePressEvent содаем стандартное меню и добавляем свои пункты

Код:
...
if( event->button() == Qt::RightButton)
{
QMenu *menu = createStandardContextMenu();
menu.addAction("ShowMessage");
menu.addAction("About Qt");
menu.addSeparator();
menu.addAction("Exit");
menu.exec(event->globalPos());
}....
возможно и без переопределения mousePressEvent можно добавить к стандартному меню свои пункты.
398  Qt / Пользовательский интерфейс (GUI) / Re: Как реализовать контекстное меню для виджетов? : Январь 28, 2011, 17:52
Цитировать
как создать контекстное меню для любого из виджетов.
Переопределить mousePressEvent
Код:
#include <QtGui/QApplication>
#include <QLineEdit>
#include <QMenu>
#include <QMouseEvent>

class myLineEdit : public QLineEdit
{
public:
myLineEdit(QWidget *p = 0)
:QLineEdit(p) {}
virtual void mousePressEvent ( QMouseEvent *event )
{
if( event->button() == Qt::RightButton)
{
QMenu menu(this);
menu.addAction("ShowMessage");
menu.addAction("About Qt");
menu.addSeparator();
menu.addAction("Exit");
menu.exec(event->globalPos());
}
else
QLineEdit::mousePressEvent(event);
}

};

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;

QLineEdit *ln = new myLineEdit(&w);

w.show();

return a.exec();

}
399  Qt / Многопоточное программирование, процессы / Re: Как вызывать диалоги из не GUI потока? : Январь 26, 2011, 09:38
идея понятна, спасибо
400  Qt / Многопоточное программирование, процессы / Как вызывать диалоги из не GUI потока? : Январь 26, 2011, 09:18
Есть основной (GUI) поток. Есть другой поток занимающийся обменом по GSM модему. Иногда второму потоку нужно что-то от пользователя, например ввести пинкод. Хотелось бы вызвать статическую функцию какого-нибудь диалога, который вернет пинкод. что-то типа

QString pinCode = PinCodeDialog::getPinCode();

как такое в Qt реализовывается?

ps в билдере есть синхронизация с гуипотоком. можно из не гуи потока вызвать диалог с помощью Synchronize(). На время выполнения диалога не гуи поток останавливается. Synchronize позволяет избежать всякие сбои, которые возможны при обращении к одним данным из разных потоков.
401  Qt / Интернационализация, локализация / Как получить указатель на QApplication? : Январь 14, 2011, 07:14
класический main
Код:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}

у MainWindow нужно определить метод смены языка. в учебниках примеры что-то типа
Код:
void MainWindow::switchLanguage(int language)
{
QTranslator translator;
        switch(language)
        {
      case RUSSIAN:
                translator.load(":/translator/main_ru.qm");
                      break;
      case TURKIC:
                translator.load(":/translator/main_tu.qm");
                      break;
}
        qapp->installTranslator(&translator);
}

Так вот, как из MainWindow достать app? Неужели в конструкторе MainWindow нужно передавать указатель на app?
402  Программирование / С/C++ / Re: Как в код внедрить что-то типа xml? : Январь 12, 2011, 13:13
уверен. пол проги написал на с++ с использованием stl.
Проблему решил. Написал *.h. В нем определил константные масивы и параметрами девайсов. Написал короткий парсер, который из этого h файла создает желаемое дерево объектов.

403  Программирование / С/C++ / Как в код внедрить что-то типа xml? : Январь 12, 2011, 07:47
Есть задача - создать список, например, из объектов Device.

Код:
class Device
{
public:
       Device();
       std::string name;
       int id;
       std::list<Device*> deviceList;
}

Под windows(*nix) пишется одна функция Device* createDevice(...), и пишется какой-нибудь файл, типа xml, с описанием всех девайсов которые должны быть в списке. createDevice парсит этот файл и создает нужный список. если нужно добавить девайс в список или изменить праметр, то просто правится *.xml файл, а код остается неизменный.

Теперь стоит таже задача, тока для микроконтроллера у которого есть только память программ и озу. Нет ос и нет файловой системы. Можно конечно в коде жёстко написать создание этого списка, типа

Код:
std::list<Device*> list;
list.push_back(createDevice1());
list.push_back(createDevice2());
list.push_back(createDevice3());
list.push_back(createDevice4());
....
list.push_back(createDevice50());
каждая функция по созданию объекта ( createDevice*() ) будет уникальна. В каждой функции createDevice* будет создаваться свой список deviceList. Вобщем код получится очень грамоздкий. Да и добавлять девайсы в список, править параметры достаточно сложно, придётся править исходный код.
Хотелось бы написать, как и в случае для Windows, одну функции по созданию девайсов, и ..... как бы в код внедрить что-то типа xml? Как то можно описать это дерево как-то в *.h файле или еще в каком инклуде и потом для добавления/редактирования списка девайсов просто править этот аш?

404  Программирование / С/C++ / Re: параметр конструктора : Январь 10, 2011, 06:34
to blood_shadow
Цитировать
это не из-за того, тут и так понятно что ф-ции не копируются более того ф-ции существуют еще до создания любых объектов
да я вроде про функции не говорил. Может смутила запись из асистанта "Note that type() and tableWidget() are not copied." Ну я её понимаю не буквально, я понимаю что параметр type (его тип int), который получил конструктор, не скопируется. Также table widget that contains the item (тип QTableWidget *) не скопируется.

Цитировать
но буду очень вам благодарен если скажете как в отладчике посмотреть что первое вызывается
ну так глобально переопределить оператор new и переопределить копирующий конструктор Cell. До кучи переопределить копирующий конструктор QTableWidgetItem. Чтоб с gdb не заморачиваться, можно в переопределённых конструкторах и в переопределённом new выводить что-нибудь в cout. Последовательность сообщений в кансоле и будет последовательностью вызова функций.
405  Программирование / С/C++ / Re: параметр конструктора : Январь 09, 2011, 08:38
"Философия С++. Введение в стандарт", Брюс Эккель, глава 11, стр. 344
Цитировать
Чтобы создать копирующий конструктор для класса, использующего композицию (а также наследование - глава 14), компилятор рекурсивно вызывает копирующие конструкторы всех объектов класса и базовых классов.
Там же, в этой главе, примеры, доказывающие это. В вашем случае blood_shadow , с классом Cell, вывозится коп. конст. для QTableWidgetItem. Смотрим асистент
Цитировать
QTableWidgetItem::QTableWidgetItem ( const QTableWidgetItem & other )
Constructs a copy of other. Note that type() and tableWidget() are not copied.
Попробуйте проверить. Создайте класс Cell, задайте type и tableWidget. создайте копию и посмотрите у копии type и tableWidget. Если у Cell был поразрядный конструктор, то type и tableWidget должны сохранится.
Страниц: 1 ... 25 26 [27] 28 29 ... 38

Страница сгенерирована за 0.066 секунд. Запросов: 23.