Просмотр сообщений
|
Страниц: 1 ... 28 29 [30] 31 32 ... 38
|
436
|
Qt / Пользовательский интерфейс (GUI) / Как замостить центральный виджет рисунком?
|
: Сентября 20, 2010, 08:11
|
Центральный виджет есть QStackWidget. Пока в него не добавленно ни одного виджета, нужно показывать фон, замещенный картинкой, пример в прикреплении. Как такое сделать в Qt4? Пробовал в конструктор центрального виджета вставить QPalette palette; palette.setBrush(backgroundRole(), QBrush(QPixmap(":icons/logo.xpm"))); setPalette(palette); - не отрисовывается рисунок. Если переопределить паинтЭвэнт void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawPixmap(rect(), QPixmap(":icons/logo.xpm")); } то рисуется один рисунок растянутый на весь центральный виджет.
|
|
|
437
|
Разное / Говорилка / Re: Вопрос о Qt.
|
: Сентября 19, 2010, 08:26
|
Т.е. чтоб заменить рабочий стол на свою программку, я должен написать свою оболочку. - Нет. Можно (или нужно) в любом оконном менеджере запустить свою программу на весь экран. А вообще зачем заменять рабочий стол или писать свой? В чем задача стоит? Я так пологаю автор хочет сделать киоск. Для этой задачи можно использовать готовый оконный менеджер, возможно даже KDE. Мы делали так: -Ставили голый линукс (без кде, гнома и т.п.), -ставили xorg -ставили оконный менеджер icewm, -ставили свою программу, которая должна быть рабочим столом. -Настраивали запуск иксов так, чтоб запускался оконный менеджер и в в нем запускалась наша программа в full-screen. -настраивали оконный менеджер таким образом, чтоб не было панели задач с меню "пуск" и у программы не было заголовка с кнопками "свернуть", "свернуть в окно", "закрыть". Получался - киоск, в котором пользователь может работать только с одной программой растянутой на весь экран. Вместо icewm можно использовать любой другой легкий оконный менеджер.
|
|
|
438
|
Qt / Qt-инструментарий / Re: QtCreator и WinGW
|
: Сентября 17, 2010, 17:16
|
огда проверь, в нужном ли месте находится qmake. И убедись, что в настройках проекта выбран правильный профиль Qt Проверил. qmake находится в нужном месте. Если бы qmake был бы в др. месте, то в диалоге настроек (см выше) путь "Размещение Qmake был бы подсвечен красным. В настройках проекта выбран правильный профиль. Кстати, в Qt при установке прописываются пути, поэтому копировать нужно в ту же папку, в которую он был установлен на первой машине. Но вот это нереально. На 1-ой установил на диск С, на второй прав на С нет. Тока на Д. В общем добил админа - он установил мне креатор нормально. Всё заработало. Но вопрос не решен. Есть еще у меня чистая машина, попробую до сути докопаться и опробовать туда скопипастить папку с Qt и там поэкспериментирую. Если есть еще у кого какие мысли - выкладывайте.
|
|
|
441
|
Qt / Qt-инструментарий / QtCreator и WinGW
|
: Сентября 16, 2010, 09:24
|
Поставил QtCreator из SDK на один комп. На другом нет прав администратора, поэтому туда просто скопировал всю пaпку с установленным qtcreator. Не могу собрать проект. При сборке ошибка Не выбран корректный профиль Qt. Выберите его в Инструменты - Параметры Ошибка во время сборки проекта TeremQt Во время выполнения сборки на этапе 'QMake' Прерванная сборка. полез в настройки - там .... см скриншот. Нет строки с указанием папки с mingw. что и где ещё нужно настроить, чтоб сборка заработала?
|
|
|
443
|
Qt / Многопоточное программирование, процессы / Сигнально-слотовое соединение потоков
|
: Сентября 05, 2010, 20:26
|
Есть GUI поток и второй поток MyThread. Нужно обмениваться событиями между потоками. Решил через слоты-сигналы. В главном потоке генерирую сигнал, во втором потоке должен обрабатываться слот. Не получается. Взял готовый пример из "Макс Шлее - QT4.5. Профессиональное программирование на C++." (стр 618-621). Немножко подправил его: добавил кнопку, чтоб контролировать GUI поток. #include <QtGui>
// ====================================================================== class MyThread : public QThread { Q_OBJECT private: int m_nValue;
public: MyThread() : m_nValue(10){}
void run(){exec();}
signals: void finished(); void currentValue(int);
public slots: void slotNextValue() { emit currentValue(--m_nValue);
if (!m_nValue) { emit finished(); } while(1) usleep(100); } };
// ---------------------------------------------------------------------- int main(int argc, char** argv) { QApplication app(argc, argv); QLCDNumber lcd; QPushButton *button = new QPushButton(QString("Button")); MyThread thread;
QTimer timer; QObject::connect(&timer, SIGNAL(timeout()), &thread, SLOT(slotNextValue())); timer.start(1000);
QObject::connect(&thread, SIGNAL(currentValue(int)), &lcd, SLOT(display(int)) ); QObject::connect(&thread, SIGNAL(finished()), &app, SLOT(quit()) );
lcd.setSegmentStyle(QLCDNumber::Filled); lcd.display(10); lcd.resize(220, 90); QWidget widget; QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(&lcd); layout->addWidget(button); widget.setLayout(layout); widget.show(); thread.start(); return app.exec(); }
#include "main.moc" Таймер в основном потоке генерирует сигнал и в потоке MyTread должен быть вызван слот slotNextValue(). Чтоб проверить в каком из потоков вызывается слот решил слот подвесить, добавив строку while(1) usleep(100). Попадая в slotNextValue GUI поток виснет, т.е. получается что слот обрабатывается в главном потоке. Как сделать чтоб сигнал из GUI потока вызывал слот во втором потоке? Пробовал сделать соединенеи QObject::connect(&timer, SIGNAL(timeout()), &thread, SLOT(slotNextValue()), Qt::QueuedConnection); или QObject::connect(&timer, SIGNAL(timeout()), &thread, SLOT(slotNextValue()), Qt::DirectConnection); не помогает. Gui также виснит.
|
|
|
444
|
Qt / Установка, сборка, отладка, тестирование / Re: Ошибка Во время выполнения сборки на этапе 'QMake'
|
: Сентября 01, 2010, 05:44
|
нешел в чем была проблемма. Покапался в настройках проекта. В основных настройках была установленна галочка "Фоновая сборка" и был установлен несуществующий каталог. При чем интересно, проект лежит в папке c:/work/MyProj/trunk. Указываю несуществующую папку, например c:/work/MyProj/trunkssss, creator создает папку c:/work/MyProj/trunkssss и делает там сборку. Но если указать несуществующую папку на несущюствующем диске, как у меня было, например d:/work/MyProj/trunk, то тут-то creator загибается и выдает ошибку "Невозможно запустить процесс c:/qt/2010.01/qt/bin/qmake.exe". По мойму это глюк.
|
|
|
445
|
Qt / Установка, сборка, отладка, тестирование / Ошибка Во время выполнения сборки на этапе 'QMake'
|
: Августа 31, 2010, 12:45
|
поставил QtCreator (sdk 2010.1). Собираю рабочий проект. Ошибка Выполняется сборка проекта MyProj... Невозможно запустить процесс c:/qt/2010.01/qt/bin/qmake.exe Ошибка во время сборки проекта MyProj Во время выполнения сборки на этапе 'QMake' захожу в рабочую папку, выполняю c:/qt/2010.01/qt/bin/qmake.exe MyProj.pro - работает. В чем может быть проблема? вот настройки qt
|
|
|
446
|
Qt / Пользовательский интерфейс (GUI) / Re: QTreeView
|
: Августа 27, 2010, 11:28
|
так что все же... сначала документация... потом поиск... и в последнюю очередь форум.. ибо ни у кого нету желания мусолить одну и ту же проблему то 100 раз.... ну во 1-х ни кто ни кого мусолить не заставляет против желания. лень написать ответ в одно слово - не пиши. А вот длиннющую подколку писать не лень. а во 2-х ну с чего вы взяли что я решаю проблему в обратной последовательности. Почему на человека сразу лепят клеймо - "лень", "не уважение". Естественно сначало проштудировал асистент, потом изучал демки, как троли это делают, потом поиск на форуме, потом поиск в гугле, только потом уже соизволил дерзость побеспокоить участников форума своим вопросом. Кстати, в QTDemo->Item Views->Simple Tree Model не вызывается метод setEditTriggers, однако их QTreeView нередактируемый. Почему?
|
|
|
447
|
Qt / Пользовательский интерфейс (GUI) / Re: QTreeView
|
: Августа 27, 2010, 06:19
|
а вот еслиб ты подумал над ключевым вопросом, чтобы сделать из него нормальный заголовок темы, а не просто название виджета. А то я не думал. Сам знаю что заголовок кривой, но лучшего не придумал. Тут же темa "QTreeWidget" и ни каких придирок. Да потом бы догадался получившийся заголовок воткнуть в поиск по форуму. ООО!!! Есть ПОИСК!!! Да Вы что!? Никогда бы не подумал! Ну спасибо, Вы открыли мне глаза! Ну теперь все проблемы в считанные секунды решу.... Форум наверно существует не для того, чтобы получить ответ "Воспользуйся поиском" или "читай асистент". Я даже не знал в QTreeView ли проблема? Может запрет нужно выставлять в моделе, или в атеме. В QDemo есть примеры, в том числе "Simple Tree Model Example", но там такого метода я не заметил. У них почему-то по умолчанию нет редактирования. Абстрактные советы типа "читай доки", "гугли", "подумай сам", "пользуй поиск" - давно уже ни кому ни каких результатов не дают. Вместо вашего бесмысленного длинного ответа с подё....кой можно было ни чего не писать или написать одно слово "setEditTriggers", или правильный, по твоему мнению, заголовок который в поиске сразу найдет ответ. void setEditTriggers ( EditTriggers triggers ) Спасибо, проблема решена.
|
|
|
448
|
Qt / Пользовательский интерфейс (GUI) / QTreeView
|
: Августа 26, 2010, 20:51
|
Отобразил дерево в QTreeView. По двойному клику по любой ячейке вызывается редактирование текста в ячейке. Ну могу понять как запретить редактирование?
|
|
|
449
|
Qt / Дополнительные компоненты / Re: Создаю библиотеку для работы с последовательными портами. [В ПРОЦЕССЕ].
|
: Июля 07, 2010, 18:30
|
хотя "См. определение в файле serialdeviceinfo.h строка 35" - нашел, но где-то в конце описания. В асистанте - название класса, файл описания. В справочнике на с++ перед описанием функции или класса - инклуде atoi()
#include <stdlib.h> int atoi(const char *str);
В справочник на СИ - аналогично. А тут как-то всё наоборот, сначало Начало работы с классом необходимо начинать с создания экземпляра объекта SerialDeviceInfo. Пример: ... SerialDeviceInfo *sdi = new SerialDeviceInfo(this); ...
Пробую по примеру создать - не компилируется. нужен инклуде. лазишь по примерам, находишь. Далее делаешь постепенно все по тексту,,,,, описание заканчивается. в самом конце контакты автора и вдруг "См. определение в файле serialdeviceinfo.h строка 35" ))
|
|
|
450
|
Qt / Дополнительные компоненты / Re: Создаю библиотеку для работы с последовательными портами. [В ПРОЦЕССЕ].
|
: Июля 07, 2010, 18:10
|
Отзыв и предложение: Почему бы в документации не написать как эти классы прикрутить к проекту, в каких *.h эти классы описаны? например что-то типа
"В *.pro файл добавте INCLUDEPATH += D:\soft\Qt\serportM\trunk\qserialdevice QMAKE_LIBDIR += D:\Soft\Qt\serportM\trunk\build\lib\qintegratedserialdevice\release LIBS += -lqserialdevice"
А то приходится по примерам лазить. Мелочь - а не приятно. Ну хотя бы какой *.h файл включать нужно - это уж в первую очередь нужно было в доке прописать.
|
|
|
|
|